Aller au contenu principal

Mises à jour et sauvegardes

Mettre à jour​

Téléchargez les nouvelles images et recréez les conteneurs. Les migrations s'exécutent au démarrage.

docker compose pull && docker compose up -d

Si vous utilisez le profil d'IA locale, reconstruisez l'image Laya après une mise à jour :

docker compose --profile ai build laya

Tâches d'arrière-plan et worker​

Le travail d'arrière-plan (la maintenance aujourd'hui, puis la synchronisation du courrier et le passage de l'IA à mesure qu'ils arrivent) s'exécute dans le même conteneur. L'image exécute campbooks-server all, c'est-à-dire l'API plus le worker de tâches. Les tâches vivent dans Postgres, donc rien n'est perdu au redémarrage.

Pour exécuter le worker séparément, ajoutez un second service avec la même image et le même environnement, et ces deux réglages :

  • command: ["worker"]
  • healthcheck: { disable: true }, car le contrôle de santé sonde l'API, qu'un worker ne sert pas.

Donnez ensuite command: ["api"] au premier service. Les réglages du worker forment le bloc CAMPBOOKS_JOBS__* dans Configuration.

Quoi sauvegarder​

Sauvegardez ces éléments ensemble, à peu près au même moment :

QuoiOùContient
Postgresvolume postgres-data (utilisez pg_dump)Tout sauf les fichiers et la clé secrète de l'instance : comptes, clés de connexion, autorisations
Fichiersvolume blobs-data, ou votre bucketMessages bruts, pièces jointes, documents
Clé secrète de l'instancevolume server-secretsLa clé qui ouvre les clés de connexion et les identifiants stockés dans Postgres

Gardez aussi une copie de votre .env et des fichiers de secret client de deploy/secrets/. Ils ne sont dans aucun volume.

:::warning Gardez une copie de la clé secrète de l'instance server-init génère la clé une seule fois, au premier démarrage. Elle protège les clés de connexion et les identifiants des comptes connectés. La clé est irrécupérable si vous la perdez : gardez-en une copie en lieu sûr, à part de vos sauvegardes.

Sans la bonne clé, le serveur refuse de démarrer. Si la clé est vraiment perdue, vous pouvez repartir avec une nouvelle :

  1. Supprimez les lignes de identity.signing_keys dans Postgres.
  2. Retirez la clé : docker compose run --rm server-init rm /secrets/secret-key.
  3. Lancez docker compose up -d && docker compose restart server.

Tout le monde se reconnecte, et les boîtes mail connectées affichent « autorisation à renouveler » jusqu'à ce que leur propriétaire les reconnecte. Le courrier et les documents déjà stockés ne sont pas perdus. :::

Restaurez Postgres et les fichiers au même instant. Un fichier absent du stockage alors que Postgres le liste encore ne peut pas être lu. Faites donc d'abord le dump de la base, puis copiez les fichiers : les fichiers ajoutés entre-temps ne sont que des surplus sans danger. Pour un bucket, activez le versionnement (et gardez les anciennes versions quelques jours) au lieu de copier.

Sauvegardez les volumes locaux avec un conteneur jetable. Pour les fichiers :

docker run --rm -v campbooks_blobs-data:/data -v "$PWD":/backup busybox:1.37.0-musl \
tar czf /backup/blobs-data.tgz -C /data .

Et pour la clé secrète de l'instance :

docker run --rm -v campbooks_server-secrets:/data -v "$PWD":/backup busybox:1.37.0-musl \
tar czf /backup/server-secrets.tgz -C /data .

L'archive contient la clé elle-même : rangez-la là où vous seul pouvez la lire.

Passer de la connexion Rauthy à la connexion intégrée​

Les versions précédentes livraient Rauthy comme fournisseur d'identité : les services idp, idp-init et idp-provision et le volume idp-data. Campbooks connecte désormais les gens lui-même, et le nouveau compose.yaml n'en contient aucun.

  1. Copiez le nouveau compose.yaml par-dessus le vôtre, puis supprimez les trois anciens conteneurs :

    docker compose up -d --remove-orphans

    Rien ne casse si vous laissez tourner les anciens services. Ils ne servent simplement plus.

  2. Les comptes qui existaient dans Rauthy ne sont pas repris. Ces personnes se reconnectent avec Google, Microsoft, Zoho ou une clé d'accès, et obtiennent un nouveau compte Campbooks.

  3. Reportez les anciens réglages de fournisseur CAMPBOOKS_IDP_* vers CAMPBOOKS_GOOGLE__*, CAMPBOOKS_MICROSOFT__* et CAMPBOOKS_ZOHO__*. Gardez chaque secret client dans deploy/secrets/<provider>-client-secret. Voir Connexion.

  4. Ajoutez ${CAMPBOOKS_PUBLIC_URL}/auth/callback/<provider> comme URI de redirection dans l'application OAuth de chaque fournisseur.

  5. Le volume idp-data reste en place. Quand vous êtes sûr de ne plus en avoir besoin, supprimez-le :

    docker volume rm <project>_idp-data

Supervision (facultatif)​

Campbooks écrit des journaux JSON sur la sortie standard et n'exporte rien par défaut.

docker compose logs server

Les réglages CAMPBOOKS_TELEMETRY__* activent une page Prometheus ou un export OTLP. Voir .env.example.