|
| 1 | +FROM php:8.4-fpm |
| 2 | + |
| 3 | +# Build arguments for user/group |
| 4 | +ARG USER_ID=1000 |
| 5 | +ARG GROUP_ID=1000 |
| 6 | +ARG USER_NAME=www-data |
| 7 | +ARG GROUP_NAME=www-data |
| 8 | + |
| 9 | +# Set document root to /app/public (Yii2 structure) |
| 10 | +WORKDIR /app |
| 11 | + |
| 12 | +# Install required system packages for PHP extensions for Yii 2.0 Framework |
| 13 | +COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ |
| 14 | +RUN install-php-extensions \ |
| 15 | + bcmath \ |
| 16 | + @composer \ |
| 17 | + exif \ |
| 18 | + gd \ |
| 19 | + imagick \ |
| 20 | + intl \ |
| 21 | + opcache \ |
| 22 | + pdo_mysql \ |
| 23 | + pdo_pgsql \ |
| 24 | + soap \ |
| 25 | + xdebug \ |
| 26 | + zip |
| 27 | + |
| 28 | +# Set composer environment |
| 29 | +ENV COMPOSER_ALLOW_SUPERUSER=1 |
| 30 | + |
| 31 | +# Change PHP config |
| 32 | +COPY docker/php/php.ini /usr/local/etc/php/conf.d/base.ini |
| 33 | + |
| 34 | +# Install supervisord, gosu, and Node.js (version simple) |
| 35 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 36 | + supervisor \ |
| 37 | + curl \ |
| 38 | + gosu \ |
| 39 | + debian-keyring \ |
| 40 | + debian-archive-keyring \ |
| 41 | + apt-transport-https \ |
| 42 | + && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \ |
| 43 | + && apt-get install -y nodejs \ |
| 44 | + && apt-get clean \ |
| 45 | + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
| 46 | + |
| 47 | +# Install Caddy (standalone) |
| 48 | +RUN curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg \ |
| 49 | + && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list \ |
| 50 | + && apt-get update \ |
| 51 | + && apt-get install -y caddy \ |
| 52 | + && apt-get clean \ |
| 53 | + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
| 54 | + |
| 55 | +# Change web server config |
| 56 | +COPY docker/caddy/Caddyfile /etc/caddy/Caddyfile |
| 57 | + |
| 58 | +# Apply the user/group IDs to www-data |
| 59 | +RUN usermod -u ${USER_ID} www-data && groupmod -g ${GROUP_ID} www-data |
| 60 | + |
| 61 | +# Create composer and npm cache directories with proper ownership |
| 62 | +RUN mkdir -p /var/www/.composer/cache /var/www/.npm && \ |
| 63 | + chown -R www-data:www-data /var/www/.composer /var/www/.npm |
| 64 | + |
| 65 | +# Configure PHP-FPM to use Unix socket |
| 66 | +RUN sed -i 's|^listen = 127.0.0.1:9000|listen = /var/run/php/php-fpm.sock|' /usr/local/etc/php-fpm.d/www.conf \ |
| 67 | + && sed -i 's|^;listen.owner = www-data|listen.owner = www-data|' /usr/local/etc/php-fpm.d/www.conf \ |
| 68 | + && sed -i 's|^;listen.group = www-data|listen.group = www-data|' /usr/local/etc/php-fpm.d/www.conf \ |
| 69 | + && sed -i 's|^;listen.mode = 0660|listen.mode = 0660|' /usr/local/etc/php-fpm.d/www.conf \ |
| 70 | + && mkdir -p /var/run/php \ |
| 71 | + && chown www-data:www-data /var/run/php |
| 72 | + |
| 73 | +# Copy supervisord program configs |
| 74 | +COPY docker/supervisord/conf.d/caddy-php-fpm.conf /etc/supervisord/conf.d/caddy-php-fpm.conf |
| 75 | + |
| 76 | +# Copy queue worker config uncommented for use with yii2-queue |
| 77 | +#COPY docker/supervisor/available/queue.conf /etc/supervisor/available/queue.conf |
| 78 | + |
| 79 | +# Copy scripts |
| 80 | +COPY docker/init.sh /usr/local/bin/init.sh |
| 81 | +COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh |
| 82 | + |
| 83 | +# Make scripts executable and validate |
| 84 | +RUN chmod +x /usr/local/bin/init.sh /usr/local/bin/entrypoint.sh && \ |
| 85 | + # Convert any Windows line endings |
| 86 | + sed -i 's/\r$//' /usr/local/bin/init.sh /usr/local/bin/entrypoint.sh && \ |
| 87 | + # Test that scripts have valid syntax |
| 88 | + bash -n /usr/local/bin/init.sh && \ |
| 89 | + bash -n /usr/local/bin/entrypoint.sh && \ |
| 90 | + echo "✓ Scripts validated successfully..." |
| 91 | + |
| 92 | +# Use ENTRYPOINT to guarantee execution |
| 93 | +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] |
0 commit comments