Browse Source

Updating Dockerfile according to #3737, #3740, #3850 and #4065

Mehdi Benadel 2 years ago
parent
commit
3ec81f9e32
2 changed files with 54 additions and 58 deletions
  1. 3 3
      contrib/docker/Dockerfile.apache
  2. 51 55
      contrib/docker/Dockerfile.fpm

+ 3 - 3
contrib/docker/Dockerfile.apache

@@ -1,4 +1,4 @@
-FROM php:8.1-apache
+FROM php:8.1-apache-bullseye
 
 ENV COMPOSER_MEMORY_LIMIT=-1
 ARG DEBIAN_FRONTEND=noninteractive
@@ -18,8 +18,8 @@ RUN apt-get update \
       git \
       gosu \
       zip \
-      unzip \ 
-      libzip-dev \ 
+      unzip \
+      libzip-dev \
       libcurl4-openssl-dev \
 ## Image Optimization
       optipng \

+ 51 - 55
contrib/docker/Dockerfile.fpm

@@ -1,29 +1,25 @@
-FROM php:7.4-fpm-buster
+FROM php:8.1-fpm-bullseye
 
-# 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
+ENV COMPOSER_MEMORY_LIMIT=-1
+ARG DEBIAN_FRONTEND=noninteractive
+WORKDIR /var/www/
 
-# Update OS Packages
-RUN apt-get update
+# Get Composer binary
+COPY --from=composer:2.4.4 /usr/bin/composer /usr/bin/composer
 
-# Install OS Packages
-RUN apt-get install -y --no-install-recommends apt-utils
-RUN apt-get install -y --no-install-recommends \
+# Install package dependencies
+RUN apt-get update \
+  && apt-get upgrade -y \
+#  && apt-get install -y --no-install-recommends apt-utils \
+  && apt-get install -y --no-install-recommends \
 ## Standard
-      locales locales-all \
+      locales \
+      locales-all \
       git \
       gosu \
       zip \
-      unzip \ 
-      libzip-dev \ 
+      unzip \
+      libzip-dev \
       libcurl4-openssl-dev \
 ## Image Optimization
       optipng \
@@ -33,62 +29,62 @@ RUN apt-get install -y --no-install-recommends \
 ## Image Processing
       libjpeg62-turbo-dev \
       libpng-dev \
+      libmagickwand-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
-
+      ffmpeg \
+## Database
+#      libpq-dev \
+#      libsqlite3-dev \
+      mariadb-client \
+# Locales Update
+  && sed -i '/en_US/s/^#//g' /etc/locale.gen \
+  && locale-gen \
+  && update-locale \
 # Install PHP extensions
-RUN docker-php-source extract
-
+  && 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
-
+  && pecl install imagick \
+  && docker-php-ext-enable imagick \
 # PHP GD extensions
-RUN docker-php-ext-configure gd \
+  && docker-php-ext-configure gd \
       --with-freetype \
       --with-jpeg \
       --with-webp \
-      --with-xpm
-RUN docker-php-ext-install -j$(nproc) gd
-
+      --with-xpm \
+  && docker-php-ext-install -j$(nproc) gd \
 #PHP Redis extensions
-RUN pecl install redis
-RUN docker-php-ext-enable redis
-
+  && pecl install redis \
+  && 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
-
+  && 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
-
+  && docker-php-ext-configure intl \
+  && 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/*
+  && docker-php-source delete \
+  && apt-get autoremove --purge -y \
+  && apt-get clean \
+  && rm -rf /var/cache/apt \
+  && rm -rf /var/lib/apt/lists/
 
-ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"
+# Use the default production configuration
+COPY contrib/docker/php.production.ini "$PHP_INI_DIR/php.ini"
 
 COPY . /var/www/
-WORKDIR /var/www/
+# for detail why storage is copied this way, pls refer to https://github.com/pixelfed/pixelfed/pull/2137#discussion_r434468862
+RUN cp -r storage storage.skel \
+  && composer install --prefer-dist --no-interaction --no-ansi --optimize-autoloader \
+  && rm -rf html && ln -s public html \
+  && chown -R www-data:www-data /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
+RUN php artisan horizon:publish
 
 VOLUME /var/www/storage /var/www/bootstrap
- 
+
 CMD ["/var/www/contrib/docker/start.fpm.sh"]