- 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)
3.4 KiB
3.4 KiB
Migration de PDFMonkey vers Gotenberg
Résumé des changements
Le bouton "Créer PDF" sur la page staff/contrats/[id] utilise désormais Gotenberg (auto-hébergé sur le VPS) au lieu de PDFMonkey.
Fichiers modifiés
1. API Route
- Fichier:
app/api/contrats/[id]/generate-pdf/route.ts - Changements:
- Remplacement de l'appel à PDFMonkey par Gotenberg
- Utilisation de templates Handlebars au lieu de Liquid
- Suppression de la fonction de polling
- Génération PDF instantanée
2. Nouveaux fichiers créés
Template Handlebars
- Fichier:
lib/templates/contract.hbs - Description: Template HTML/CSS pour générer les contrats de travail
- Format: Handlebars (conversion depuis Liquid)
Helpers Handlebars
- Fichier:
lib/handlebars-helpers.ts(déjà existant, mis à jour) - Description: Helpers personnalisés pour les conditions et transformations
Formateur de données
- Fichier:
lib/contract-data-formatter.ts - Description: Prépare et formate les données du contrat avant génération
Scripts
- Fichier:
tunnel-gotenberg.sh - Description: Script pour créer un tunnel SSH vers Gotenberg (dev local)
Dépendances ajoutées
npm install handlebars
npm install --save-dev @types/handlebars
Configuration
Variables d'environnement
Développement local (.env.local)
GOTENBERG_URL=http://localhost:3001
Production (Coolify / VPS)
GOTENBERG_URL=http://gotenberg:3000
Note
: En production, l'app Next.js et Gotenberg sont sur le même réseau Docker
coolify, doncgotenberg:3000fonctionne directement.
Utilisation en développement
-
Créer un tunnel SSH vers Gotenberg:
./tunnel-gotenberg.shOu manuellement :
ssh -L 3001:gotenberg:3000 renaud@144.91.113.70 -N -
Lancer le serveur Next.js:
npm run dev -
Tester la génération:
- Aller sur
staff/contrats/[id] - Cliquer sur "Créer PDF"
- Le PDF est généré via Gotenberg et uploadé sur S3
- Aller sur
Flux de génération
- Frontend : Clic sur "Créer PDF"
- API Route : Récupère les données du contrat depuis Supabase
- Formatter : Formate les données pour le template
- Template : Compile le template Handlebars avec les données
- Gotenberg : Convertit le HTML en PDF
- S3 : Upload du PDF généré
- Supabase : Mise à jour du contrat avec l'URL du PDF
Avantages
- Souveraineté des données : Aucune donnée ne sort du VPS
- Performance : Génération locale, pas de latence réseau
- Coût : 0€ (vs abonnement PDFMonkey)
- Sécurité : Gotenberg n'est pas exposé publiquement
Déploiement
Le code s'auto-déploie sur Coolify lors d'un push. En production :
GOTENBERG_URL=http://gotenberg:3000est déjà configuré- Pas besoin de tunnel, tout communique via le réseau Docker interne
Rollback (si nécessaire)
Pour revenir à PDFMonkey en cas de problème :
- Restaurer
app/api/contrats/[id]/generate-pdf/route.tsdepuis le commit précédent - Remettre
PDFMONKEY_URLetPDFMONKEY_API_KEYdans les variables d'environnement
Support
- Guide complet : Voir
gotenberg-integration-guide.md - Documentation Gotenberg : https://gotenberg.dev/
- Logs Gotenberg :
sudo docker logs gotenberg(sur le VPS)
Date de migration : 27 décembre 2025