- 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)
4.6 KiB
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
- Créer un nouveau projet dans Coolify
- Source: Git Repository
- Repository URL:
https://git.odnt.fr/renaud/espace-paie-odentas.git - Branche:
main - Build Type: Dockerfile
- 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 :
# 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
- Vérifier que toutes les variables d'environnement sont configurées
- Vérifier
NEXT_PUBLIC_SITE_URL=https://paie.odnt.fr(critique) - Vérifier les Redirect URLs dans Supabase Dashboard
- Tester l'accès à l'application
- Vérifier les logs dans Coolify
- 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
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