Files
cesizen-individuel/DEPLOIEMENT_COOLIFY.md
T

3.6 KiB

Déploiement CESIZen sur Coolify

Stack de production : PostgreSQL + API Laravel + Frontend Next.js (DSFR). Le mobile (Expo) n'est pas concerné (ce n'est pas une appli web).

Fichiers fournis :

  • backend/Dockerfile.prod — API Laravel (PHP 8.4, migrations + seed au démarrage)
  • frontend/Dockerfile.prod — Next.js en sortie standalone (image légère)
  • docker-compose.prod.yaml — orchestration des 3 services
  • backend/docker/entrypoint.sh — démarrage de l'API

Option recommandée : « Docker Compose » dans Coolify

  1. Créer une ressource → Docker Compose → connecter le dépôt GitHub AzmogEx/CesiZen, branche main.
  2. Compose file : docker-compose.prod.yaml.
  3. Renseigner les variables d'environnement (ci-dessous).
  4. Domaines : dans Coolify, mapper
    • le service frontend (port 3000) sur ton domaine principal (ex. cesizen.tondomaine.fr)
    • le service backend (port 8000) sur un sous-domaine API (ex. api.cesizen.tondomaine.fr)
  5. Déployer.

Le frontend lit l'API via NEXT_PUBLIC_API_URL, injectée au build → elle doit pointer vers l'URL publique du backend (pas l'URL interne Docker).


Variables d'environnement à définir dans Coolify

Variable Exemple Rôle
POSTGRES_DB cesizen Nom de la base
POSTGRES_USER cesizen Utilisateur base
POSTGRES_PASSWORD (mot de passe fort) Obligatoire
APP_KEY base64:... Clé Laravel — voir génération ci-dessous
JWT_SECRET (chaîne aléatoire) Secret JWT — voir génération
JWT_TTL 60 Durée de vie du token (min)
APP_URL https://api.cesizen.tondomaine.fr URL publique de l'API
FRONTEND_URL https://cesizen.tondomaine.fr Origine autorisée (CORS)
NEXT_PUBLIC_API_URL https://api.cesizen.tondomaine.fr/api/v1 URL publique de l'API côté navigateur

Générer les secrets (en local)

# APP_KEY
docker run --rm php:8.4-cli sh -c "php -r 'echo \"base64:\".base64_encode(random_bytes(32)).\"\n\";'"
# JWT_SECRET (64 caractères)
openssl rand -base64 48 | tr -d '\n='

Définis-les une fois dans Coolify pour qu'ils restent stables entre déploiements. Si tu ne les fournis pas, l'entrypoint en génère au démarrage — mais ils changeront à chaque redéploiement (déconnexion de tous les utilisateurs).


Notes

  • Migrations & seed : exécutés automatiquement au démarrage du backend. Les seeders sont idempotents (pas de doublons même au redémarrage). La base est peuplée avec les comptes de démo (admin@cesizen.fr / Admin123!, demo@cesizen.fr / Demo123!) et le référentiel d'émotions.
  • Cache/queue/session : en database (aucun Redis requis). Tu peux ajouter un service Redis et repasser ces variables sur redis si besoin.
  • HTTPS : géré par le proxy de Coolify (Traefik). Pense à passer APP_URL/FRONTEND_URL/NEXT_PUBLIC_API_URL en https://.
  • Serveur PHP : l'API tourne via php artisan serve (suffisant pour ce projet). Pour une charge réelle, on passerait à php-fpm+nginx ou FrankenPHP/Octane.

Déploiement par services séparés (alternative)

Si tu préfères 3 ressources distinctes dans Coolify :

  1. PostgreSQL : ressource « Database » Coolify (récupère host/user/password).
  2. Backend : ressource « Dockerfile », dossier backend, fichier Dockerfile.prod, port 8000, + les variables APP_*, DB_*, JWT_*, FRONTEND_URL.
  3. Frontend : ressource « Dockerfile », dossier frontend, fichier Dockerfile.prod, port 3000, build arg NEXT_PUBLIC_API_URL.