# syntax=docker/dockerfile:1 # JamboApi CMS — Dockerfile production # Build: docker build -t jamboapi . # Run: docker run -p 8080:80 -e DATABASE_URL=... jamboapi # ── Étape 1 : Compilation des assets frontend (Node.js) ── FROM node:20-alpine AS frontend-builder WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY webpack.config.js tsconfig.json postcss.config.cjs* ./ COPY assets ./assets RUN npm run build # ── Étape 2 : Image runtime PHP-FPM & Nginx ── FROM php:8.4-fpm-alpine AS final RUN apk add --no-cache \ icu-dev libpng-dev libjpeg-turbo-dev freetype-dev \ nginx supervisor \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) \ pdo_mysql intl gd opcache COPY --from=composer:2 /usr/bin/composer /usr/bin/composer COPY docker/php.ini /usr/local/etc/php/conf.d/jamboapi.ini COPY docker/nginx.conf /etc/nginx/nginx.conf COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf WORKDIR /app # Copier le code source de l'application COPY . . # Copier les assets compilés depuis l'étape frontend COPY --from=frontend-builder /app/public/build ./public/build # Installer les dépendances PHP sans scripts (avec support secret COMPOSER_AUTH et retry en cas d'indisponibilité/504 GitHub API) ENV COMPOSER_ALLOW_SUPERUSER=1 \ COMPOSER_PROCESS_TIMEOUT=600 \ COMPOSER_MAX_PARALLEL_HTTP=6 RUN --mount=type=secret,id=composer_auth,env=COMPOSER_AUTH,required=false \ composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader --no-scripts \ || (sleep 5 && composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader --no-scripts) # Configuration des permissions pour cache, logs et uploads RUN mkdir -p var/cache var/log public/uploads/media/cache \ && chown -R www-data:www-data var public/uploads # Warmup du cache Symfony avec un environnement de build isolé RUN cp -n .env.example .env \ && APP_ENV=prod APP_DEBUG=0 DATABASE_URL="sqlite:///:memory:" php bin/console cache:warmup --env=prod EXPOSE 80 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]