espace-paie-odentas/COOLIFY_DEPLOYMENT.md
odentas 04e9d54292 feat: Migrer génération PDF de PDFMonkey vers Gotenberg
- Remplacer PDFMonkey par Gotenberg (auto-hébergé sur VPS)
- Créer template Handlebars pour contrats (lib/templates/contract.hbs)
- Créer formateur de données (lib/contract-data-formatter.ts)
- Ajouter helpers Handlebars pour conditions et transformations
- Mettre à jour API route generate-pdf pour utiliser Gotenberg
- Ajouter GOTENBERG_URL dans .env.local (http://localhost:3001 pour dev)
- Créer script tunnel-gotenberg.sh pour dev local
- Ajouter documentation MIGRATION_GOTENBERG.md

Avantages:
- Souveraineté des données (pas d'API externe)
- Performance (génération locale)
- Coût (0€ vs abonnement PDFMonkey)
- Sécurité (Gotenberg non exposé publiquement)
2025-12-27 22:22:45 +01:00

182 lines
4.6 KiB
Markdown

# Déploiement sur Coolify
## 🔧 Configuration
### Repository Git
- **Forgejo**: https://git.odnt.fr/renaud/espace-paie-odentas
- **Branche**: main
- **GitHub (backup)**: https://github.com/odentas/Nouvel-Espace-Paie
### Dockerfile
Le projet utilise un Dockerfile multi-stage optimisé pour Next.js en mode standalone.
## 📋 Variables d'environnement requises
### Application (CRITIQUE)
```
NEXT_PUBLIC_SITE_URL=https://paie.odnt.fr
NODE_ENV=production
NEXT_TELEMETRY_DISABLED=1
```
**Important** : `NEXT_PUBLIC_SITE_URL` remplace `VERCEL_URL` et est utilisé pour :
- Génération des liens dans les emails
- Callbacks d'authentification Supabase
- Webhooks DocuSeal
- Tokens d'auto-déclaration
### Supabase
```
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
```
### AWS
```
AWS_REGION=eu-west-3
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_S3_BUCKET_NAME=
AWS_CLOUDFRONT_DOMAIN=
```
### Email (SES)
```
AWS_SES_FROM_EMAIL=
AWS_SES_FROM_NAME=
```
### DocuSeal
```
DOCUSEAL_API_KEY=
DOCUSEAL_BASE_URL=
NEXT_PUBLIC_DOCUSEAL_WEBHOOK_URL=
```
### PDFMonkey
```
PDFMONKEY_PRIVATE_KEY=
NEXT_PUBLIC_PDFMONKEY_TEMPLATE_ID=
```
### PostHog Analytics
```
NEXT_PUBLIC_POSTHOG_KEY=
NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com
```
### Lambda Functions
```
LAMBDA_SIGNATURE_SALARIE_URL=
LAMBDA_ODENTAS_PADES_SIGN_URL=
LAMBDA_TSA_STAMP_URL=
LAMBDA_PDF_CONVERTER_URL=
```
### Autres
```
JWT_SECRET=
ENCRYPTION_KEY=
```
## ⚙️ Configuration Supabase
**Important** : Ajouter les URLs de redirection dans Supabase Dashboard → Authentication → URL Configuration :
**Site URL** :
```
https://paie.odnt.fr
```
**Redirect URLs** (whitelist) :
```
https://paie.odnt.fr/**
https://paie.odnt.fr/auth/callback
https://paie.odnt.fr/auto-declaration/**
```
## 🚀 Configuration dans Coolify
1. **Créer un nouveau projet** dans Coolify
2. **Source**: Git Repository
3. **Repository URL**: `https://git.odnt.fr/renaud/espace-paie-odentas.git`
4. **Branche**: `main`
5. **Build Type**: Dockerfile
6. **Port**: 3000
### Build Settings
- **Dockerfile Path**: `/Dockerfile` (racine du projet)
- **Build Pack**: Dockerfile
- **Health Check Path**: `/api/health` (à créer si nécessaire)
### Déploiement
Le Dockerfile utilise le mode `standalone` de Next.js :
- Build optimisé avec cache des dépendances
- Image finale minimale basée sur Alpine
- Utilisateur non-root pour la sécurité
- Port 3000 exposé
## 🔄 Mise à jour du code
Pour déployer une nouvelle version :
```bash
# Depuis le répertoire du projet
git add .
git commit -m "Description des changements"
git push forgejo main # Push vers Forgejo
git push origin main # Backup vers GitHub
```
Coolify détectera automatiquement le changement et redéployera l'application.
## ✅ Vérifications post-déploiement
1. Vérifier que toutes les variables d'environnement sont configurées
2. **Vérifier `NEXT_PUBLIC_SITE_URL=https://paie.odnt.fr`** (critique)
3. Vérifier les Redirect URLs dans Supabase Dashboard
4. Tester l'accès à l'application
5. Vérifier les logs dans Coolify
6. Tester les fonctionnalités critiques :
- Authentification (connexion/déconnexion)
- Emails (OTP, invitations)
- Génération de contrats PDF
- Signature électronique (DocuSeal)
- Upload de documents (AWS S3)
- Auto-déclaration congés spectacles
## 🔧 Cron Jobs
Le cron défini dans `vercel.json` ne fonctionne pas sur Coolify. Configuration manuelle nécessaire :
**Option A** : Créer un service Coolify séparé
- Type : Scheduled Task
- Commande : `curl -f https://paie.odnt.fr/api/cron/send-csp-report`
- Schedule : `0 9 * * *` (tous les jours à 9h)
**Option B** : Utiliser cron système sur le serveur hôte
```bash
0 9 * * * curl -f https://paie.odnt.fr/api/cron/send-csp-report
```
## 📊 Différences Vercel vs Coolify
| Fonctionnalité | Vercel | Coolify |
|----------------|--------|---------|
| **Build** | Vercel Build System | Docker multi-stage |
| **Région** | cdg1 (Paris - `vercel.json`) | Votre serveur |
| **Crons** | `vercel.json` | Service séparé ou cron système |
| **Headers conditionnels** | `vercel.json` | `middleware.ts` (déjà géré) |
| **Edge Functions** | Oui | Non (Next.js standard) |
| **Serverless** | Oui | Non (conteneur permanent) |
| **Variables d'env** | `VERCEL_URL` (automatique) | `NEXT_PUBLIC_SITE_URL` (manuel) |
Le middleware Next.js gère déjà les headers et le mode démo, donc pas de régression fonctionnelle.
## 📝 Notes
- **Next.js Version**: 14.2.5
- **Node Version**: 18 (Alpine)
- **Output Mode**: standalone
- **Architecture**: Multi-stage Docker build