cgk-rooster-streamen/Dockerfile-prod

83 lines
2.2 KiB
Plaintext

# --- Stage 1: Build PHP & Symfony ---
FROM php:8.3-fpm AS php_builder
# Set working directory
WORKDIR /var/www
RUN apt-get update && apt-get install -y \
bash \
unzip \
git \
curl \
libicu-dev \
libpq-dev \
libonig-dev \
libzip-dev \
npm \
&& docker-php-ext-install intl pdo pdo_pgsql zip
# Make Composer available.
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Copy source.
COPY . .
RUN printf "APP_ENV=prod\nAPP_DEBUG=0\nDATABASE_URL=\"mysql://user:password@url:3306?serverVersion=1\"\n" > .env.local
# Install app dependencies.
RUN composer install --no-dev --no-scripts --no-progress --no-interaction --optimize-autoloader
# Run Symfony cache warmup.
RUN php bin/console cache:warmup
# --- Stage 2: Build Frontend ---
FROM node:18 AS frontend_builder
WORKDIR /app
# Copy source again, for front-end assets.
COPY . .
RUN npm install && npm run build
# --- Stage 3: Production Runtime ---
FROM php:8.3-fpm
# Set working directory
WORKDIR /var/www
# Install required PHP extensions (must be in runtime)
RUN apt-get update && apt-get install -y \
libicu-dev \
libpq-dev \
libonig-dev \
libzip-dev \
&& docker-php-ext-install intl pdo pdo_pgsql zip
# Copy built app from PHP build stage
COPY --from=php_builder /var/www ./
# Copy only built frontend assets
COPY --from=frontend_builder /app/public/build ./public/build
# Clean up
RUN rm -rf .DS_Store .idea .env.local /var/www/html /var/www/var/cache/dev Dockerfile* compose.yaml .git LICENSE README.md node_modules
# Copy settings for PHP-FPM
COPY --link ./.docker/conf.d/05-app.ini $PHP_INI_DIR/conf.d/
COPY --link ./.docker/conf.d/50-opcache_prod.ini $PHP_INI_DIR/conf.d/
# Set entrypoints + terminal
RUN echo "export PS1='\h:\w\$ '" >> /root/.bashrc
COPY --chmod=744 --link .docker/docker-entrypoint.d /docker-entrypoint.d
COPY --link ./.docker/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
COPY --link ./.docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["/usr/local/bin/docker-healthcheck"]
ENTRYPOINT ["/usr/local/bin/docker-entrypoint"]
# Expose PHP-FPM port
EXPOSE 9000
# Start PHP-FPM
CMD ["php-fpm"]