Déployer avec Coolify
This content is not available in your language yet.
Coolify est le parcours recommandé pour auto-héberger Cenaclo. C’est un PaaS
open source que vous installez sur votre propre serveur : il porte le reverse
proxy, les certificats TLS Let’s Encrypt, la génération des secrets, le
redéploiement et les tâches planifiées. Vous n’avez donc ni fichier .env à
remplir, ni proxy à configurer à la main.
Si vous préférez piloter Docker vous-même, le parcours Docker Compose reste entièrement supporté.
Ce que Coolify prend en charge, et ce qu’il ne prend pas
Section intitulée « Ce que Coolify prend en charge, et ce qu’il ne prend pas »| Pris en charge par Coolify | À votre charge |
|---|---|
| Reverse proxy Traefik et TLS Let’s Encrypt | Enregistrements DNS du domaine |
Génération et stockage des secrets SERVICE_PASSWORD_* |
Conservation hors serveur de la passphrase de backup |
| Redéploiement, rollback, historique des déploiements | Choix de la version applicative à déployer |
| Tâches planifiées (backup, purge de rétention) | Sauvegarde des archives hors du serveur |
| Journaux et état de santé des conteneurs | Ouverture du firewall pour le média LiveKit |
Coolify ne remplace pas la sauvegarde applicative Cenaclo : ses sauvegardes Postgres natives ne chiffrent pas avec la passphrase de l’installation et ne couvrent pas les volumes de stockage objet. Voir Sauvegardes self-hosting.
Prérequis
Section intitulée « Prérequis »- Une instance Coolify fonctionnelle. L’installation de Coolify elle-même suit la procédure officielle du projet Coolify et sort du périmètre de cette documentation.
- Un domaine dont les enregistrements DNS pointent vers le serveur Coolify. Prévoyez un enregistrement A (ou AAAA) par service exposé : l’application web, l’API et le serveur LiveKit.
- Un serveur suffisamment dimensionné. Coolify tourne sur la même machine que Cenaclo : additionnez les deux empreintes. Voir Dimensionner le serveur.
- Un accès au registre Docker Hub privé
zerosspendant la phase de préversion. Les images de distribution ne sont pas encore publiques ; ajoutez le registre dans Coolify avec un jeton en lecture seule. Cette étape disparaîtra quand les images seront publiées.
1. Créer la ressource
Section intitulée « 1. Créer la ressource »- Créez un projet dans Coolify, puis ajoutez une ressource de type Docker Compose Empty.
- Collez le contenu de
infra/coolify/docker-compose.yamldu dépôt Cenaclo. - Laissez le déploiement en mode Compose géré par Coolify. N’activez pas le mode raw.
Le template est autonome : il ne clone pas le dépôt, ne construit aucune image
et ne dépend d’aucun fichier relatif. Il tire les images versionnées
zeross/cenaclo:backend-<version> et zeross/cenaclo:web-<version>, ainsi que
les images amont des services d’infrastructure.
2. Assigner les domaines
Section intitulée « 2. Assigner les domaines »Après le chargement du Compose, Coolify détecte trois services déployables :
web, backend et livekit. Assignez un domaine à chacun dans l’interface
Coolify, en précisant le port du conteneur.
| Service | Domaine à saisir dans Coolify | Port conteneur |
|---|---|---|
web |
https://app.example.com |
80 |
backend |
https://api.example.com:3000 |
3000 |
livekit |
https://live.example.com:7880 |
7880 |
Coolify injecte alors les variables suffixées par le port, puis expose les alias publics sans suffixe :
SERVICE_URL_WEB_80=https://app.example.comSERVICE_FQDN_WEB_80=app.example.comSERVICE_URL_WEB=https://app.example.comSERVICE_FQDN_WEB=app.example.comSERVICE_URL_BACKEND_3000=https://api.example.comSERVICE_FQDN_BACKEND_3000=api.example.comSERVICE_URL_BACKEND=https://api.example.comSERVICE_FQDN_BACKEND=api.example.comSERVICE_URL_LIVEKIT_7880=https://live.example.comSERVICE_FQDN_LIVEKIT_7880=live.example.comSERVICE_URL_LIVEKIT=https://live.example.comSERVICE_FQDN_LIVEKIT=live.example.comLes variables suffixées existent pour que Coolify connaisse le port cible. Les
applications ne consomment que les alias sans suffixe : le port du conteneur
ne doit jamais apparaître dans une URL envoyée au navigateur. Le template
transmet SERVICE_FQDN_BACKEND au backend afin que le wizard d’installation
préremplisse le bon domaine public, et CENACLO_API_BASE_URL=${SERVICE_URL_BACKEND}
au service web pour que la SPA appelle l’API sur son domaine dédié.
Ports média LiveKit
Section intitulée « Ports média LiveKit »Le média WebRTC ne passe pas par le proxy HTTP. Ouvrez aussi sur le firewall du serveur :
| Protocole | Port par défaut | Variable de surcharge |
|---|---|---|
| TCP | 7881 |
LIVEKIT_RTC_TCP_PORT |
| UDP | 7882 |
LIVEKIT_RTC_UDP_PORT |
Le template utilise le mode UDP multiplexé sur un port unique plutôt que la plage LiveKit historique. Si vous déployez deux stacks Cenaclo sur le même serveur, donnez à la seconde une autre paire de ports via les deux variables ci-dessus.
3. Secrets et variables
Section intitulée « 3. Secrets et variables »Le premier déploiement ne demande aucun collage manuel dans l’écran Environment Variables.
- Les variables
SERVICE_PASSWORD_*,SERVICE_PASSWORD_64_*etSERVICE_URL_*sont générées par Coolify et réutilisées par les services. JWT_PRIVATE_KEY,JWT_PUBLIC_KEY,VAPID_PUBLIC_KEY,VAPID_PRIVATE_KEY,AUTH_IP_SALT,EMAIL_HASH_PEPPER,STORAGE_LOCAL_SIGNING_SECRETetCENACLO_MASTER_KEY_SECRETsont générés au premier démarrage du backend, puis persistés dans un volume propre à la ressource.LISTMONK_SEED_SMTP_MODEvautskippar défaut pour que le premier déploiement soit autonome. Vous configurerez le SMTP plus tard, dans l’interface Listmonk ou via les variablesLISTMONK_SMTP_*. Voir Configurer les emails.infra/coolify/.env.coolify.examplene liste que des surcharges avancées et des variables de migration. Ce n’est pas un fichier à recopier.- Le replay vidéo fonctionne sans réglage : le conteneur Egress charge la page
de composition sur le service
webinterne et rejoint LiveKit parws://livekit:7880, hôte déjà déclaré dansCENACLO_LIVE_EGRESS_ALLOWED_HOSTS. Si vous branchez un LiveKit externe, surchargez les deux ensemble : une liste qui ne contient pas l’hôte réellement joint par l’Egress fait refuser la page, donc aucun replay.
Ne collez jamais un secret réel dans un fichier versionné du dépôt.
4. Déployer
Section intitulée « 4. Déployer »- Cliquez sur Deploy.
- Attendez que les huit services permanents passent à l’état sain :
postgres,redis,seaweedfs,livekit,livekit-egress,listmonk,backendetweb. - Vérifiez que les trois exécutions ponctuelles se terminent bien :
listmonk-db-init,listmonk-seedetlivekit-egress-configsont des jobs one-shot qui doivent atteindre le statut completed. - Ouvrez
https://app.example.com/install.
Le backend applique ses migrations de schéma pendant son démarrage. Aucune commande de migration n’est à lancer manuellement.
5. Terminer le wizard d’installation
Section intitulée « 5. Terminer le wizard d’installation »Le wizard /install est de la logique applicative Cenaclo : il est identique
quel que soit le mode de déploiement. Il comporte six étapes.

Capture prise sur un déploiement Coolify réel : les six étapes sont affichées en haut et la première arrive avec le domaine backend déjà rempli. Le domaine visible sur cette capture est celui de l’instance ayant servi à la validation ; le vôtre sera celui que vous avez assigné à la section précédente.
- Domaine — vérifiez que le domaine backend proposé correspond bien à
celui assigné dans Coolify. Il est prérempli depuis
SERVICE_FQDN_BACKEND. - Compte administrateur — email et mot de passe du premier administrateur.
- Passphrase de chiffrement — voir l’avertissement ci-dessous.
- Double authentification TOTP — obligatoire pour l’administrateur avant l’accès complet.
- Communauté — nom de la première communauté.
- Branding — logo et couleur primaire.
Cette passphrase de master key est également distincte de la passphrase de sauvegarde décrite à la section suivante. Ne confondez pas les deux.
6. Planifier les sauvegardes
Section intitulée « 6. Planifier les sauvegardes »Coolify génère automatiquement SERVICE_PASSWORD_64_BACKUP au premier
déploiement et l’injecte comme CENACLO_BACKUP_PASSPHRASE. Révélez cette
valeur dans la configuration du service, conservez-la dans un gestionnaire de
mots de passe hors du serveur, puis créez une tâche planifiée Coolify sur le
service backend :
/usr/local/bin/cenaclo-backup.sh --output-dir /var/backups/cenacloFréquence recommandée : tous les jours à 02:15, heure serveur. Le script
transmet la passphrase à age par descripteur de fichier et ne l’écrit pas
dans les journaux.
Pour une communauté dont les replays vidéo sont déjà synchronisés par un autre mécanisme, utilisez l’archive légère :
/usr/local/bin/cenaclo-backup.sh --output-dir /var/backups/cenaclo --no-storagePour envoyer l’archive hors du serveur, renseignez
CENACLO_BACKUP_RCLONE_REMOTE dans les secrets Coolify, par exemple
cenaclo_backup_offsite:cenaclo-backups/prod, puis les variables
RCLONE_CONFIG_CENACLO_BACKUP_OFFSITE_* de votre fournisseur S3, et gardez la
commande standard. Les stratégies de rétention et de synchronisation objet sont
détaillées dans Sauvegardes self-hosting, la
restauration dans Restaurer une instance.
Purge de rétention
Section intitulée « Purge de rétention »Ajoutez une seconde tâche planifiée quotidienne sur le service backend,
après la sauvegarde :
/usr/local/bin/cenaclo-purge.sh --directFréquence recommandée : tous les jours à 03:15, heure serveur. La purge
applique les durées de rétention configurées et trace chaque exécution dans le
journal d’audit.
7. Opérations courantes depuis Coolify
Section intitulée « 7. Opérations courantes depuis Coolify »Ouvrez un terminal Coolify sur le service backend pour les opérations
ponctuelles.
Export RGPD d’un utilisateur, par email ou par identifiant :
/usr/local/bin/cenaclo-export-user.sh --direct --user-email [email protected] --output /tmp/export.zip/usr/local/bin/cenaclo-export-user.sh --direct --user-id USER_ID --output /tmp/export.zipL’archive ZIP contient user.json, messages.json, attachments/ et
audit_log.json. Copiez-la hors du conteneur, puis supprimez-la.
La récupération d’un accès administrateur perdu suit une procédure dédiée : voir Récupération administrateur.
8. Mettre à jour et revenir en arrière
Section intitulée « 8. Mettre à jour et revenir en arrière »Deux parcours sont supportés :
- modifier
CENACLO_VERSIONvers un tag d’image publié, puis cliquer Deploy ; - cliquer Redeploy pour reprendre le tag courant et recréer les conteneurs.
Après le déploiement, contrôlez les deux sondes de santé :
curl -I https://api.example.com/healthzcurl -I https://app.example.com/healthzEn cas d’échec de migration ou de sonde de santé, Coolify conserve l’état de la ressource et affiche les journaux du service fautif.
Pour revenir en arrière, sélectionnez le dernier déploiement sain dans l’historique de la ressource et cliquez Rollback. Le rollback natif rejoue la révision précédente avec les mêmes secrets et les mêmes volumes.
Si une migration destructive est en cause, restaurez d’abord une sauvegarde avant de redéployer : voir Restaurer une instance.
Limites connues
Section intitulée « Limites connues »- Coturn n’est pas activé dans le template Coolify. Le relay TURN mutualisé est le chemin recommandé pour le live auto-hébergé. Un Coturn local reste possible en mode expert via le parcours Compose : voir Firewall self-hosting.
- Les certificats TLS publics, les domaines Coolify et les tâches planifiées exigent une instance Coolify réelle. Ils ne peuvent pas être validés sur une maquette locale.
- Les archives produites restent dans le volume Docker
backupsde la ressource tant qu’un envoi rclone externe n’est pas configuré. Une panne de serveur emporterait alors les sauvegardes avec l’instance.
En cas de problème au déploiement, la page Dépannage recense les pannes les plus fréquentes des deux parcours.