83 lines
2.2 KiB
Plaintext
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"] |