Sauvegardes self-hosting
cenaclo-backup.sh est le backup applicatif de reference pour une instance
Cenaclo auto-hebergee. Il produit une archive .tar.gz.age chiffree avec la
passphrase de l’installation, distincte des backups natifs Coolify ou Postgres.
Ces backups natifs restent utiles pour l’operateur, mais ils ne remplacent pas
l’archive Cenaclo : ils ne portent pas le meme chiffrement applicatif et ne
couvrent pas toute la strategie SeaweedFS. Cette page suit ADR-016 pour le
chiffrement age et ADR-019 pour le deploiement Coolify ou Docker Compose sans
script d’installation separe.
Archive complete
Section intitulée « Archive complete »Par defaut, le script inclut le dump Postgres, le snapshot de configuration et les objets SeaweedFS accessibles via l’endpoint S3-compatible configure pour l’instance. C’est le mode le plus simple pour les petites communautes ou les instances dont les attachments et replays restent modestes. Pour une communaute avec beaucoup de replays, ce mode copie tout le bucket localement avant chiffrement : verifie l’espace disque disponible ou utilise l’archive legere ci-dessous.
Dans Coolify, ajoute la passphrase comme secret du service backend, puis cree
une scheduled task quotidienne :
/usr/local/bin/cenaclo-backup.sh --output-dir /var/backups/cenacloDans un deploiement Docker Compose standalone, lance la meme commande depuis le
service backend :
docker compose --env-file infra/compose/.env -f infra/compose/docker-compose.yml exec -T backend \ /usr/local/bin/cenaclo-backup.sh --output-dir /var/backups/cenacloLa source recommandee est CENACLO_BACKUP_PASSPHRASE_FILE, qui pointe vers un
fichier hors Git monte en lecture seule, mode 0600, lisible uniquement par le
processus qui lance le backup. CENACLO_BACKUP_PASSPHRASE reste supporte pour
les environnements qui n’ont pas de montage de fichier, mais doit etre gere
comme un secret d’environnement, jamais comme une variable normale de tache
planifiee. Ne colle jamais la passphrase dans Git, dans une commande shell ou
dans les logs Coolify.
Archive legere et volumes externes
Section intitulée « Archive legere et volumes externes »Les replays video peuvent depasser 10 Go par communaute active. Dans ce cas, le mode recommande est de garder le backup applicatif quotidien pour Postgres et la configuration, puis de synchroniser les objets SeaweedFS vers un stockage S3 externe dedie.
Commande quotidienne pour l’archive legere :
/usr/local/bin/cenaclo-backup.sh --output-dir /var/backups/cenaclo --no-storage--no-storage exclut uniquement les objets SeaweedFS de l’archive. Le dump
Postgres, le snapshot de configuration et le chiffrement age restent actifs.
Ajoute ensuite une synchronisation hebdomadaire rclone vers un bucket externe
controle par l’operateur, par exemple Scaleway Object Storage, OVH Object
Storage ou Garage. Le remote source cenaclo_storage: doit etre configure dans
un rclone.conf hors depot, mode 0600, pointe via RCLONE_CONFIG au moment
de la tache planifiee. Ce remote pointe vers le gateway S3 SeaweedFS de
l’instance. Le bucket source doit correspondre a la valeur S3_BUCKET de
l’installation.
rclone sync supprime sur la destination les objets qui n’existent plus dans
SeaweedFS. Active le versioning/retention cote fournisseur quand c’est
disponible et garde un --backup-dir date pour les objets remplaces ou
supprimes :
rclone sync cenaclo_storage:<S3_BUCKET> scaleway:cenaclo-storage/prod \ --fast-list \ --checksum \ --backup-dir "scaleway:cenaclo-storage/deleted/$(date +%Y-%m-%d)" \ --transfers 8 \ --checkers 16Garde les credentials rclone dans les secrets Coolify ou dans un fichier de
configuration hors depot. Ne passe pas les secrets S3 dans la ligne de commande
et evite les variables d’environnement longues si un fichier rclone.conf
protege est possible.
Upload hors serveur
Section intitulée « Upload hors serveur »Le script peut aussi envoyer l’archive chiffree vers une destination rclone apres creation locale :
/usr/local/bin/cenaclo-backup.sh \ --output-dir /var/backups/cenaclo \ --rclone-remote cenaclo_backup_offsite:cenaclo-backups/prodCette option deplace l’archive .tar.gz.age, pas les objets SeaweedFS bruts. Pour
les grosses communautes, combine-la avec --no-storage et la synchronisation
hebdomadaire des objets.
Restaurer
Section intitulée « Restaurer »Restaure d’abord l’archive applicative avec la passphrase d’origine :
/usr/local/bin/cenaclo-restore.sh /var/backups/cenaclo/cenaclo-backup-YYYYMMDDTHHMMSSZ.tar.gz.ageSi les objets SeaweedFS ont ete conserves par rclone externe, restaure-les avec la commande inverse avant de rouvrir le trafic utilisateur :
rclone sync scaleway:cenaclo-storage/prod cenaclo_storage:<S3_BUCKET> \ --fast-list \ --checksum \ --transfers 8 \ --checkers 16Dans ce mode, lance le restore applicatif avec --skip-storage si l’archive ne
contient pas de repertoire storage/seaweedfs ou si tu veux laisser rclone
reprendre explicitement la restauration objet.