feat(deploy): Dockerfiles de production + compose + guide Coolify
- frontend/Dockerfile.prod : Next.js standalone (294 Mo), régénère les assets DSFR, injecte NEXT_PUBLIC_API_URL au build (npm ci --ignore-scripts pour le postinstall) - backend/Dockerfile.prod + docker/entrypoint.sh : API Laravel, migrations + seed idempotent + serveur, génération de secrets en fallback - docker-compose.prod.yml : Postgres + API + Front pour déploiement Coolify - next.config.ts : output standalone ; .dockerignore back/front - DEPLOIEMENT_COOLIFY.md : guide + variables d'environnement Images de prod testées (build + smoke-test DSFR OK). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+11
-1
@@ -1,4 +1,14 @@
|
||||
vendor
|
||||
node_modules
|
||||
storage/logs/*.log
|
||||
.git
|
||||
.gitignore
|
||||
.env
|
||||
.env.backup
|
||||
.env.production
|
||||
storage/logs/*.log
|
||||
storage/framework/cache/data/*
|
||||
storage/framework/sessions/*
|
||||
storage/framework/views/*
|
||||
.phpunit.result.cache
|
||||
Dockerfile*
|
||||
.dockerignore
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# Image de production de l'API Laravel (CESIZen).
|
||||
FROM php:8.4-cli
|
||||
|
||||
# Extensions PHP nécessaires (PostgreSQL, bcmath, redis)
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libpq-dev \
|
||||
unzip \
|
||||
git \
|
||||
&& docker-php-ext-install pdo pdo_pgsql bcmath \
|
||||
&& pecl install redis && docker-php-ext-enable redis \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Dépendances PHP de production uniquement (cache Docker)
|
||||
COPY composer.json composer.lock ./
|
||||
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist --no-interaction
|
||||
|
||||
# Code source
|
||||
COPY . .
|
||||
RUN composer dump-autoload --optimize --no-dev
|
||||
|
||||
# Script de démarrage (migrations + seed idempotent + serveur)
|
||||
COPY docker/entrypoint.sh /usr/local/bin/entrypoint
|
||||
RUN chmod +x /usr/local/bin/entrypoint \
|
||||
&& chmod -R ug+rw storage bootstrap/cache
|
||||
|
||||
EXPOSE 8000
|
||||
CMD ["entrypoint"]
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
cd /app
|
||||
|
||||
# Laravel a besoin d'un fichier .env (les variables d'env du conteneur,
|
||||
# définies par Coolify, ont la priorité sur ce fichier).
|
||||
[ -f .env ] || cp .env.example .env
|
||||
|
||||
# Clés générées au démarrage si absentes (À DÉFINIR EN PROD via Coolify :
|
||||
# APP_KEY et JWT_SECRET, pour qu'elles restent stables entre déploiements).
|
||||
if [ -z "$APP_KEY" ]; then
|
||||
echo "[entrypoint] APP_KEY absent — génération (pensez à la fixer dans Coolify)."
|
||||
php artisan key:generate --force
|
||||
fi
|
||||
if [ -z "$JWT_SECRET" ]; then
|
||||
echo "[entrypoint] JWT_SECRET absent — génération (pensez à le fixer dans Coolify)."
|
||||
php artisan jwt:secret --force
|
||||
fi
|
||||
|
||||
# Base de données : migrations + seed (les seeders sont idempotents).
|
||||
echo "[entrypoint] Migrations..."
|
||||
php artisan migrate --force
|
||||
echo "[entrypoint] Seed (idempotent)..."
|
||||
php artisan db:seed --force || true
|
||||
|
||||
# Optimisation (les routes ne dépendent pas de l'env ; on évite config:cache
|
||||
# pour ne pas figer des variables d'environnement par erreur).
|
||||
php artisan route:cache || true
|
||||
php artisan view:cache || true
|
||||
|
||||
echo "[entrypoint] Démarrage de l'API sur le port 8000."
|
||||
exec php artisan serve --host=0.0.0.0 --port=8000
|
||||
Reference in New Issue
Block a user