68 lines
3.6 KiB
Markdown
68 lines
3.6 KiB
Markdown
# 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)
|
|
```bash
|
|
# 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`.
|