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

4.6 KiB

Déploiement sur Coolify

🔧 Configuration

Repository Git

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 :

# 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

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