- 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)
182 lines
4.6 KiB
Markdown
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
|