Replace Unit configuration with Nginx + PHP-FPM setup in Docker
- Remove outdated Unit-based Docker configuration and scripts. - Introduce Nginx + PHP-FPM stack with environment-based configurations. - Add custom Nginx setup for frontend-backend routing. - Update Dockerfiles, Docker Compose, and related scripts for new architecture.
This commit is contained in:
15 files changed
+293
-375
No files matched your search
@@ -0,0 +1,101 @@
|
||||
FROM docker.io/php:8.5-fpm-alpine3.23 AS build
|
||||
|
||||
RUN apk --no-cache add pcre2 libbz2 libpng libwebp libjpeg-turbo icu-libs freetype oniguruma libzip jq \
|
||||
&& apk add --no-cache --virtual .phpize-deps icu-dev libpng-dev bzip2-dev libwebp-dev libjpeg-turbo-dev freetype-dev oniguruma-dev libzip-dev pcre2-dev ${PHPIZE_DEPS} \
|
||||
&& docker-php-ext-configure intl --enable-intl && \
|
||||
docker-php-ext-configure bcmath --enable-bcmath && \
|
||||
docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp && \
|
||||
docker-php-ext-install -j$(nproc) gd && \
|
||||
docker-php-ext-install bcmath &&\
|
||||
docker-php-ext-install pdo \
|
||||
mysqli pdo_mysql \
|
||||
intl mbstring \
|
||||
zip pcntl \
|
||||
exif bz2 \
|
||||
calendar \
|
||||
&& pear update-channels && pecl update-channels \
|
||||
&& pecl install redis && docker-php-ext-enable redis \
|
||||
&& rm -rf /tmp/pear \
|
||||
&& docker-php-source delete \
|
||||
&& apk del .phpize-deps \
|
||||
&& rm -rf /var/cache/apk/* && rm -rf /etc/apk/cache \
|
||||
&& rm -rf /usr/share/php && rm -rf /tmp/* \
|
||||
&& rm "$PHP_INI_DIR/php.ini-development" \
|
||||
&& mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
|
||||
&& mkdir -p /tmp/php/upload \
|
||||
&& mkdir -p /tmp/php/sys \
|
||||
&& mkdir -p /tmp/php/session \
|
||||
&& chown -R www-data:www-data /tmp/php
|
||||
|
||||
COPY docker/php/conf/app-fpm.conf /usr/local/etc/php-fpm.d/app-fpm.conf
|
||||
|
||||
FROM build AS app_build_for_production
|
||||
WORKDIR /home/app
|
||||
|
||||
COPY application /home/app
|
||||
|
||||
RUN apk --no-cache add git \
|
||||
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
|
||||
&& composer install --optimize-autoloader --no-dev \
|
||||
&& rm -rf /home/app/.env
|
||||
|
||||
|
||||
FROM build AS production
|
||||
|
||||
COPY --from=app_build_for_production /home/app /var/www/html
|
||||
COPY docker/php/start.sh /usr/local/bin/start
|
||||
|
||||
WORKDIR /var/www/html
|
||||
|
||||
RUN chown -R www-data:www-data /var/www/html \
|
||||
&& chmod 755 /usr/local/bin/start
|
||||
|
||||
STOPSIGNAL SIGTERM
|
||||
|
||||
USER www-data
|
||||
|
||||
EXPOSE 9000
|
||||
CMD ["/usr/local/bin/start"]
|
||||
|
||||
|
||||
FROM build AS develop
|
||||
|
||||
WORKDIR /var/www/html
|
||||
|
||||
COPY docker/php/start.sh /usr/local/bin/start
|
||||
|
||||
STOPSIGNAL SIGTERM
|
||||
|
||||
RUN chmod 755 /usr/local/bin/start \
|
||||
&& apk --no-cache add git nodejs npm \
|
||||
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
|
||||
USER www-data
|
||||
|
||||
EXPOSE 9000
|
||||
CMD ["/usr/local/bin/start"]
|
||||
|
||||
|
||||
|
||||
FROM build AS artisan
|
||||
WORKDIR /var/www/html
|
||||
STOPSIGNAL SIGTERM
|
||||
ENTRYPOINT ["php", "/var/www/html/artisan"]
|
||||
|
||||
|
||||
FROM build AS composer
|
||||
WORKDIR /var/www/html
|
||||
STOPSIGNAL SIGTERM
|
||||
RUN apk --no-cache add git \
|
||||
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
RUN mkdir "/.composer" && chmod -R 0777 "/.composer"
|
||||
ENTRYPOINT ["composer"]
|
||||
|
||||
|
||||
|
||||
FROM build AS npm
|
||||
RUN mkdir "/.npm" && chmod -R 0777 "/.npm"
|
||||
WORKDIR /var/www/html
|
||||
STOPSIGNAL SIGTERM
|
||||
RUN apk --no-cache add nodejs npm
|
||||
ENTRYPOINT ["npm"]
|
||||
@@ -0,0 +1,26 @@
|
||||
[www]
|
||||
php_admin_value[upload_tmp_dir] = "/tmp/php/upload"
|
||||
php_admin_value[sys_temp_dir] = "/tmp/php/sys"
|
||||
php_admin_value[session.save_path] = "/tmp/php/session"
|
||||
php_admin_value[open_basedir] = "/var/www/html:/tmp/php:."
|
||||
php_admin_value[expose_php] = 0
|
||||
php_admin_value[memory_limit] = ${PHP_FPM_MEMORY_LIMIT}
|
||||
php_admin_value[upload_max_filesize] = ${PHP_FPM_UPLOAD_MAX_FILESIZE}
|
||||
php_admin_value[post_max_size] = ${PHP_FPM_POST_MAX_SIZE}
|
||||
php_admin_value[display_errors] = ${PHP_FPM_DISPLAY_ERRORS}
|
||||
php_admin_value[opcache.enable] = ${PHP_FPM_OPCACHE_ENABLE}
|
||||
php_admin_value[opcache.validate_timestamps] = ${PHP_FPM_OPCACHE_VALIDATE_TIMESTAMPS}
|
||||
|
||||
pm = dynamic
|
||||
pm.max_children = ${PHP_FPM_PM_MAX_CHILDREN}
|
||||
pm.start_servers = ${PHP_FPM_PM_START_SERVERS}
|
||||
pm.min_spare_servers = ${PHP_FPM_PM_MIN_SPARE_SERVERS}
|
||||
pm.max_spare_servers = ${PHP_FPM_PM_MAX_SPARE_SERVERS}
|
||||
pm.max_requests = ${PHP_FPM_PM_MAX_REQUESTS}
|
||||
|
||||
|
||||
listen = 127.0.0.1:9000
|
||||
listen.mode = 0660
|
||||
listen.owner = www-data
|
||||
listen.group = www-data
|
||||
security.limit_extensions = .php
|
||||
Executable
+59
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env sh
|
||||
set -e
|
||||
role=${CONTAINER_ROLE:-app}
|
||||
|
||||
if [ "$APP_ENV" = "production" ]; then
|
||||
php artisan config:cache
|
||||
php artisan event:cache
|
||||
php artisan route:cache
|
||||
php artisan view:cache
|
||||
php artisan storage:link
|
||||
fi
|
||||
|
||||
if [ "$role" = "app" ]; then
|
||||
|
||||
export PHP_FPM_MEMORY_LIMIT="${PHP_FPM_MEMORY_LIMIT:-256m}"
|
||||
export PHP_FPM_UPLOAD_MAX_FILESIZE="${PHP_FPM_UPLOAD_MAX_FILESIZE:-20m}"
|
||||
export PHP_FPM_POST_MAX_SIZE="${PHP_FPM_POST_MAX_SIZE:-20m}"
|
||||
|
||||
export PHP_FPM_PM_MAX_CHILDREN="${PHP_FPM_PM_MAX_CHILDREN:-10}"
|
||||
export PHP_FPM_PM_START_SERVERS="${PHP_FPM_PM_START_SERVERS:-5}"
|
||||
export PHP_FPM_PM_MIN_SPARE_SERVERS="${PHP_FPM_PM_MIN_SPARE_SERVERS:-2}"
|
||||
export PHP_FPM_PM_MAX_SPARE_SERVERS="${PHP_FPM_PM_MAX_SPARE_SERVERS:-5}"
|
||||
export PHP_FPM_PM_MAX_REQUESTS="${PHP_FPM_PM_MAX_REQUESTS:-500}"
|
||||
|
||||
if [ "$APP_ENV" = "production" ]; then
|
||||
export PHP_FPM_DISPLAY_ERRORS="${PHP_FPM_DISPLAY_ERRORS:-0}"
|
||||
export PHP_FPM_OPCACHE_ENABLE="${PHP_FPM_OPCACHE_ENABLE:-1}"
|
||||
export PHP_FPM_OPCACHE_VALIDATE_TIMESTAMPS="${PHP_FPM_OPCACHE_VALIDATE_TIMESTAMPS:-0}"
|
||||
|
||||
php artisan migrate --force
|
||||
else
|
||||
export PHP_FPM_DISPLAY_ERRORS="${PHP_FPM_DISPLAY_ERRORS:-1}"
|
||||
export PHP_FPM_OPCACHE_ENABLE="${PHP_FPM_OPCACHE_ENABLE:-0}"
|
||||
export PHP_FPM_OPCACHE_VALIDATE_TIMESTAMPS="${PHP_FPM_OPCACHE_VALIDATE_TIMESTAMPS:-1}"
|
||||
fi
|
||||
|
||||
if [ ! -w /var/www/html/storage ]; then
|
||||
echo "ERROR: /var/www/html/storage must be writable."
|
||||
echo "Fix permissions on host/volume for the www-data user."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exec php-fpm
|
||||
elif [ "$role" = "queue" ]; then
|
||||
echo "Running the queue..."
|
||||
while [ true ]
|
||||
do
|
||||
php /var/www/html/artisan queue:work --verbose --sleep=5 --tries=100 --backoff=10 --max-time=3600 --queue=high,normal,low,default
|
||||
done
|
||||
elif [ "$role" = "scheduler" ]; then
|
||||
while [ true ]
|
||||
do
|
||||
php /var/www/html/artisan schedule:run --verbose --no-interaction &
|
||||
sleep 60
|
||||
done
|
||||
else
|
||||
echo "Could not match the container role \"$role\""
|
||||
exit 1
|
||||
fi
|
||||
Reference in new issue
Block a user