Coolify
Patrimo est conçu pour être auto-hébergé via Coolify, une plateforme open-source de déploiement.
Pré-requis
- Un serveur Coolify opérationnel
- Un domaine ou sous-domaine pointant vers votre serveur
- Le secret GitHub
COOLIFY_DEPLOY_WEBHOOKconfiguré dans le dépôt (voir section Déclenchement du déploiement)
Créer le service applicatif
- New Resource → Application → Docker Compose
- Sélectionnez votre dépôt GitHub, branche
main - Compose file :
docker-compose.prod.yaml
Coolify clone le dépôt depuis GitHub et build les images Docker directement depuis le code source — aucun registre d'images externe n'est nécessaire.
docker-compose.prod.yaml est un fichier standalone prod — il ne nécessite aucun fichier d'override.
docker-compose.yml (.yml) est réservé au dev local.
L'extension .yaml est détectée automatiquement par Coolify.
Variables d'environnement
Dans l'onglet Environment Variables de Coolify, configurez :
POSTGRES_DB=patrimo
POSTGRES_USER=patrimo
POSTGRES_PASSWORD=<mot_de_passe_fort>
DATABASE_URL=postgresql://patrimo:<password>@db:5432/patrimo
AUTH_SECRET=<openssl rand -base64 32>
AUTH_URL=https://patrimo.votre-domaine.com
AUTHENTIK_CLIENT_ID= # laisser vide si non utilisé
AUTHENTIK_CLIENT_SECRET= # laisser vide si non utilisé
AUTHENTIK_ISSUER= # laisser vide si non utilisé
GEMINI_API_KEY= # laisser vide si non utilisé
NODE_ENV=production est déjà défini dans l'image buildée — ne pas le redéfinir dans Coolify pour éviter les conflits.
En Coolify, le host de la base de données est le nom du service tel que défini dans Coolify (ex. patrimo-db), pas db comme en Docker Compose local. Ajustez DATABASE_URL en conséquence.
Domaine et SSL
- Onglet Domains → ajoutez
patrimo.votre-domaine.com - Coolify génère automatiquement un certificat Let's Encrypt
- Vérifiez que
AUTH_URLcorrespond exactement au domaine HTTPS configuré
Migrations au déploiement
Les migrations s'exécutent automatiquement via entrypoint.sh (prisma migrate deploy puis node server.js). Aucune configuration supplémentaire dans Coolify n'est nécessaire.
Créer le premier utilisateur
Via la console Coolify (terminal dans le container) :
# Générer le hash du mot de passe
node -e "require('bcryptjs').hash('votre_mot_de_passe', 12).then(console.log)"
# Insérer en base via psql ou Prisma Studio
Healthcheck
Coolify gère le healthcheck applicatif directement via sa configuration de service (GET /api/health). Ce healthcheck n'est pas défini dans docker-compose.prod.yaml — il est entièrement géré par Coolify.
La base de données dispose d'un healthcheck pg_isready défini dans docker-compose.prod.yaml, qui garantit que PostgreSQL est prêt avant le démarrage de l'application.
Déclenchement du déploiement
Le redéploiement est déclenché depuis la CI, non par surveillance de branche dans Coolify.
Flux :
- Un push sur
maindéclenche le pipeline GitHub Actions - Les jobs
e2eetdocss'exécutent et valident le build - Le job
deployappelle le webhook Coolify viacurl -fsSL -X GET "$COOLIFY_DEPLOY_WEBHOOK" - Coolify reçoit le webhook, clone le dépôt depuis GitHub, rebuild les images depuis le code source et redéploie les services
Configuration dans Coolify :
- Service → onglet Webhooks → copiez l'URL du webhook de déploiement
- Dans GitHub, ajoutez ce secret dans votre dépôt : Settings → Secrets and variables → Actions →
COOLIFY_DEPLOY_WEBHOOK= URL copiée
Site de documentation (optionnel)
Le service docs est inclus dans docker-compose.prod.yaml et se déploie avec l'app. Il expose le port 80 (servi par nginx) et est routé par Coolify via domaine.
Pour le déployer sur un domaine séparé, configurez dans Coolify un custom domain sur le service docs : docs.patrimo.votre-domaine.com.