From 16f733b47fb6dad5187666d0538d8e04a8940dad Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Tue, 17 Jan 2023 00:16:56 -0500 Subject: [PATCH] Lots of tweaks and traefik support, still some weirdness building. --- contrib/docker-nginx.conf | 2 +- contrib/docker/Dockerfile.fpm | 92 ++++++++++++++++++++++++++++++++++ contrib/docker/Dockerfile.php | 94 +++++++++++++++++++++++++++++++++++ contrib/docker/start.nginx.sh | 3 +- docker-compose.yml | 30 +++++------ 5 files changed, 205 insertions(+), 16 deletions(-) create mode 100644 contrib/docker/Dockerfile.fpm create mode 100644 contrib/docker/Dockerfile.php diff --git a/contrib/docker-nginx.conf b/contrib/docker-nginx.conf index 5b2e4c6..dc91767 100644 --- a/contrib/docker-nginx.conf +++ b/contrib/docker-nginx.conf @@ -14,7 +14,7 @@ server { index index.html index.htm index.php; charset utf-8; - client_max_body_size 32M; # or your desired limit + client_max_body_size 125M; # or your desired limit location / { try_files $uri $uri/ /index.php?$query_string; diff --git a/contrib/docker/Dockerfile.fpm b/contrib/docker/Dockerfile.fpm new file mode 100644 index 0000000..a685be2 --- /dev/null +++ b/contrib/docker/Dockerfile.fpm @@ -0,0 +1,92 @@ +FROM php:7.4-fpm-buster + +# Use the default production configuration +COPY contrib/docker/php.production.ini "$PHP_INI_DIR/php.ini" + +# Install Composer +ENV COMPOSER_VERSION 2.4.2 +ENV COMPOSER_HOME /var/www/.composer +RUN curl -o /tmp/composer-setup.php https://getcomposer.org/installer \ + && curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \ + && php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \ + && php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --version=${COMPOSER_VERSION} && rm -rf /tmp/composer-setup.php + +# Update OS Packages +RUN apt-get update + +# Install OS Packages +RUN apt-get install -y --no-install-recommends apt-utils +RUN apt-get install -y --no-install-recommends \ +## Standard + locales locales-all \ + git \ + gosu \ + zip \ + unzip \ + libzip-dev \ + libcurl4-openssl-dev \ +## Image Optimization + optipng \ + pngquant \ + jpegoptim \ + gifsicle \ +## Image Processing + libjpeg62-turbo-dev \ + libpng-dev \ +# Required for GD + libxpm4 \ + libxpm-dev \ + libwebp6 \ + libwebp-dev \ +## Video Processing + ffmpeg + +# Update Local data +RUN sed -i '/en_US/s/^#//g' /etc/locale.gen && locale-gen && update-locale + +# Install PHP extensions +RUN docker-php-source extract + +#PHP Imagemagick extensions +RUN apt-get install -y --no-install-recommends libmagickwand-dev +RUN pecl install imagick +RUN docker-php-ext-enable imagick + +# PHP GD extensions +RUN docker-php-ext-configure gd \ + --with-freetype \ + --with-jpeg \ + --with-webp \ + --with-xpm +RUN docker-php-ext-install -j$(nproc) gd + +#PHP Redis extensions +RUN pecl install redis +RUN docker-php-ext-enable redis + +#PHP Database extensions +RUN apt-get install -y --no-install-recommends libpq-dev libsqlite3-dev +RUN docker-php-ext-install pdo_mysql pdo_pgsql pdo_sqlite + +#PHP extensions (dependencies) +RUN docker-php-ext-configure intl +RUN docker-php-ext-install -j$(nproc) intl bcmath zip pcntl exif curl + +#Cleanup +RUN docker-php-source delete +RUN apt-get autoremove --purge -y +RUN rm -rf /var/cache/apt +RUN rm -rf /var/lib/apt/lists/* + +ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}" + +COPY . /var/www/ +WORKDIR /var/www/ + +RUN cp -r storage storage.skel +RUN composer install --prefer-dist --no-interaction --no-ansi --optimize-autoloader +RUN rm -rf html && ln -s public html + +VOLUME /var/www/storage /var/www/bootstrap + +CMD ["/var/www/contrib/docker/start.fpm.sh"] diff --git a/contrib/docker/Dockerfile.php b/contrib/docker/Dockerfile.php new file mode 100644 index 0000000..330a8f6 --- /dev/null +++ b/contrib/docker/Dockerfile.php @@ -0,0 +1,94 @@ +FROM php:7.4-buster + +# Use the default production configuration +COPY contrib/docker/php.production.ini "$PHP_INI_DIR/php.ini" + +# Install Composer +ENV COMPOSER_VERSION 1.9.2 +ENV COMPOSER_HOME /var/www/.composer +RUN curl -o /tmp/composer-setup.php https://getcomposer.org/installer \ + && curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \ + && php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \ + && php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --version=${COMPOSER_VERSION} && rm -rf /tmp/composer-setup.php + +# Update OS Packages +RUN apt-get update + +# Install OS Packages +RUN apt-get install -y --no-install-recommends apt-utils +RUN apt-get install -y --no-install-recommends \ +## Standard + locales locales-all \ + git \ + gosu \ + zip \ + unzip \ + libzip-dev \ + libcurl4-openssl-dev \ +## Image Optimization + optipng \ + pngquant \ + jpegoptim \ + gifsicle \ +## Image Processing + libjpeg62-turbo-dev \ + libpng-dev \ +# Required for GD + libxpm4 \ + libxpm-dev \ + libwebp6 \ + libwebp-dev \ +## Video Processing + ffmpeg + +# Update Local data +RUN sed -i '/en_US/s/^#//g' /etc/locale.gen && locale-gen && update-locale + +# Install PHP extensions +RUN docker-php-source extract + +#PHP Imagemagick extensions +RUN apt-get install -y --no-install-recommends libmagickwand-dev +RUN pecl install imagick +RUN docker-php-ext-enable imagick + +# PHP GD extensions +RUN docker-php-ext-configure gd \ + --with-freetype \ + --with-jpeg \ + --with-webp \ + --with-xpm +RUN docker-php-ext-install -j$(nproc) gd + +#PHP Redis extensions +RUN pecl install redis +RUN docker-php-ext-enable redis + +#PHP Database extensions +RUN apt-get install -y --no-install-recommends libpq-dev libsqlite3-dev +RUN docker-php-ext-install pdo_mysql pdo_pgsql pdo_sqlite + +#PHP extensions (dependencies) +RUN docker-php-ext-configure intl +RUN docker-php-ext-install -j$(nproc) intl bcmath zip pcntl exif curl + +#Cleanup +RUN docker-php-source delete +RUN apt-get autoremove --purge -y +RUN rm -rf /var/cache/apt +RUN rm -rf /var/lib/apt/lists/* + +ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}" + +COPY . /var/www/ +WORKDIR /var/www/ + +RUN cp -r storage storage.skel +RUN composer global require hirak/prestissimo --no-interaction --no-suggest --prefer-dist +RUN composer install --prefer-dist --no-interaction --no-ansi --optimize-autoloader +RUN composer global remove hirak/prestissimo +RUN rm -rf html && ln -s public html + +VOLUME /var/www/storage /var/www/bootstrap + +CMD ["/var/www/contrib/docker/start.php.sh"] diff --git a/contrib/docker/start.nginx.sh b/contrib/docker/start.nginx.sh index 9d42a6e..32bb5b9 100755 --- a/contrib/docker/start.nginx.sh +++ b/contrib/docker/start.nginx.sh @@ -3,6 +3,7 @@ rm -rf /var/www/public/storage ln -s /var/www/storage/app/public /var/www/public/storage -chown -R www-data /var/www/public/ +# nginx user inside container +chown -R 101:101 /var/www/public/ ./docker-entrypoint.sh nginx -g "daemon off;" diff --git a/docker-compose.yml b/docker-compose.yml index 66eed20..2a0c258 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,14 +17,13 @@ services: build: context: . dockerfile: contrib/docker/Dockerfile.fpm - image: porttown.solarpunk.moe/pixelfed + # image: git.solarpunk.moe/pixelfed restart: unless-stopped env_file: - .env.docker volumes: - app-storage:/var/www/storage - app-bootstrap:/var/www/bootstrap - - "./.env.docker:/var/www/.env" networks: internal: external: @@ -38,7 +37,7 @@ services: build: context: . dockerfile: contrib/docker/Dockerfile.fpm - image: porttown.solarpunk.moe/pixelfed + #image: git.solarpunk.moe/pixelfed restart: unless-stopped env_file: - .env.docker @@ -46,8 +45,8 @@ services: - app-storage:/var/www/storage - app-bootstrap:/var/www/bootstrap networks: - - internal - - mail + internal: + mail: command: gosu www-data php artisan horizon depends_on: - db @@ -58,12 +57,12 @@ services: image: mysql:8.0 restart: unless-stopped networks: - - internal + internal: command: --default-authentication-plugin=mysql_native_password env_file: - .env.docker volumes: - - "db-data:/var/lib/lib/mysql" + - "db-data:/var/lib/mysql" redis: image: redis:5-alpine @@ -73,24 +72,28 @@ services: volumes: - "redis-data:/data" networks: - - internal + internal: nginx: image: nginx restart: always command: /var/www/start.nginx.sh networks: - - httpsproxy - - external + httpsproxy: + external: volumes: - ./contrib/docker-nginx.conf:/etc/nginx/templates/default.conf.template - ./contrib/docker/start.nginx.sh:/var/www/start.nginx.sh - ./public:/var/www/public - app-storage:/var/www/storage + labels: + - "traefik.enable=true" + - "traefik.http.services.pixelfed.loadbalancer.server.port=80" + - "traefik.http.routers.pixelfed.rule=Host(`pix.solarpunk.moe`)" + - "traefik.http.routers.pixelfed.tls.certresolver=leresolver" + - "traefik.http.routers.pixelfed.entrypoints=websecure" + environment: - - LETSENCRYPT_HOST=pix.solarpunk.moe - - VIRTUAL_HOST=pix.solarpunk.moe - - VIRTUAL_PORT=80 - NGINX_PORT=80 volumes: @@ -101,7 +104,6 @@ volumes: networks: internal: - internal: true external: mail: external: true