Dockerfile
Rama main · réplica de lectura del repositorio original.
# 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"]