Sauvegardes et mises à niveau

Ce qu'il faut sauvegarder, comment le restaurer sur un nouvel hôte, comment effectuer une mise à niveau, et comment migrer un serveur Mattermost ou une seule communauté vers Antimatter.

Ce qu'il faut sauvegarder

ÉlémentAvec le fichier compose du siteAvec une archive de versionAvec le paquet .deb ou .rpm
La base de données : messages, utilisateurs, communautés, canaux et, avec le fichier compose du site, la configurationvolume antimatter_postgres, via pg_dumpvotre base de données PostgreSQLvotre base de données PostgreSQL
Fichiers, images et applications installées envoyésvolume antimatter_files (le stockage S3)FileSettings.Directory, ./data/ par défaut/var/lib/antimatter
Le fichier de configuration(dans la base de données)config/config.json/etc/antimatter/config/config.json
GIFs et autocollantsvolume antimatter_gifsle répertoire de données du service GIF/var/lib/gifs-server
Secrets.env (et compose.override.yaml)votre fichier d'environnement/etc/antimatter/antimatter.env, /etc/gifs-server
La clé de chiffrement IA, qui chiffre les clés des connexions aux modèlesAM_AI_ENCRYPTION_KEY dans .env (recommandé), ou le fichier ai-encryption.key dans le volume antimatter_dataAM_AI_ENCRYPTION_KEY, ou data/ai-encryption.keyAM_AI_ENCRYPTION_KEY dans antimatter.env, ou /var/lib/antimatter/data/ai-encryption.key

Sans la clé de chiffrement IA, un serveur restauré ne peut pas lire les clés API de ses connexions aux modèles, et chacune doit être ressaisie. Conservez une copie de la clé séparément des sauvegardes de la base de données, afin qu'une sauvegarde volée ne contienne pas les deux. Voir La clé de chiffrement.

La base de données et les fichiers vont de pair : sauvegardez-les en même temps et conservez des copies hors du serveur. Les noms de volumes commencent par le nom du projet compose, antimatter (docker volume ls les liste).

Sauvegarder

Depuis le répertoire de compose.yaml. Arrêter Antimatter d'abord fournit une copie entièrement cohérente ; une sauvegarde effectuée pendant son fonctionnement est généralement correcte, mais les fichiers envoyés pendant la sauvegarde peuvent en être absents.

stamp=$(date +%Y%m%d-%H%M%S)
mkdir -p backups
docker compose stop antimatter
# Database
docker compose exec -T postgres pg_dump -U antimatter -d antimatter -Fc \
    > "backups/antimatter-db-$stamp.dump"
# File storage, GIF service and the data directory (the AI key file)
for v in files gifs data; do
    docker run --rm -v "antimatter_$v:/data:ro" -v "$PWD/backups:/backup" \
        alpine tar -czf "/backup/antimatter-$v-$stamp.tar.gz" -C /data .
done
docker compose start antimatter
# Secrets
cp .env "backups/env-$stamp"

Si vous n'avez pas défini AM_AI_ENCRYPTION_KEY, le fichier de clé du serveur se trouve dans le volume data, que la boucle ci-dessus sauvegarde avec les fichiers. Mieux vaut placer son contenu dans .env, comme l'explique La clé de chiffrement, et en conserver une copie à part des sauvegardes de la base de données.

Lancez-le depuis cron pour des sauvegardes quotidiennes, et copiez le répertoire backups/ sur une autre machine. Gardez les copies de .env aussi en sécurité que le serveur : elles contiennent ses mots de passe.

Pour copier les fichiers téléversés objet par objet (par exemple vers un autre stockage S3), utilisez l'outil en ligne de commande AWS du service bucket :

docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
    "aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"

Avec une archive de version, sauvegardez la base de données avec pg_dump -Fc, ainsi que les répertoires data/ et config/ avec vos outils habituels (data/ contient le fichier de clé IA). Avec les paquets, sauvegardez la base de données de la même manière, ainsi que /etc/antimatter, /var/lib/antimatter, /etc/gifs-server et /var/lib/gifs-server.

Restauration sur un nouvel hôte

Placez compose.yaml, le .env sauvegardé et les sauvegardes dans un nouveau répertoire, puis :

stamp=20261016-030000          # the backup to restore
docker compose create           # creates the volumes, starts nothing
docker compose up -d postgres
docker compose exec -T postgres pg_restore -U antimatter -d antimatter --no-owner \
    < "backups/antimatter-db-$stamp.dump"
for v in files gifs data; do
    docker run --rm -v "antimatter_$v:/data" -v "$PWD/backups:/backup" \
        alpine tar -xzf "/backup/antimatter-$v-$stamp.tar.gz" -C /data
done
docker compose up -d

Utilisez le même .env : le stockage et la base de données doivent conserver les mots de passe qu'ils avaient, et les connexions aux modèles ont besoin de la même clé de chiffrement IA. Si le nouvel hôte a une autre adresse, mettez à jour SITE_URL (et DOMAIN).

Testez vos sauvegardes en les restaurant sur une autre machine de temps en temps.

Mise à niveau

Les fichiers Compose téléchargés avant le 17 octobre 2026 n'avaient pas de volume data : le fichier de clé IA était dans le conteneur. Avant d'utiliser le nouveau compose.yaml, et si .env ne contient pas AM_AI_ENCRYPTION_KEY, sauvegardez la clé créée par le serveur : echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Si la commande ne trouve pas de fichier, aucune connexion de modèle n'a encore enregistré de clé.
  1. Faites une sauvegarde.
  2. Modifiez l'étiquette de l'image dans .env (ANTIMATTER_IMAGE), si vous en fixez une, comme recommandé.
  3. Téléchargez et redémarrez :
    docker compose pull
    docker compose up -d
    docker compose logs -f antimatter

Au démarrage, le serveur met à jour le schéma de la base de données (suivez l’opération dans le journal ; sur un serveur volumineux, elle peut prendre plusieurs minutes) et installe les versions plus récentes des applications intégrées à l’image. Avec une archive de version : arrêtez le serveur, remplacez tout sauf config/, data/, logs/, plugins/ et client/plugins/ par le contenu de la nouvelle archive, puis redémarrez-le. Avec le paquet .deb ou .rpm, installez le nouveau paquet comme l’explique Mettre à jour un paquet.

Les mises à jour ne se font que vers l’avant. Une fois la base de données mise à jour par un serveur plus récent, une version antérieure ne peut plus l’utiliser : pour revenir en arrière, restaurez la sauvegarde effectuée avant la mise à jour. Il en va de même pour passer de antimatter-next à antimatter.

Versions

Le serveur Antimatter indique la version de la ligne Mattermost sur laquelle il est basé (actuellement 12.0.0). Les publications sur GitHub, avec leurs archives et leurs paquets, ont leurs propres numéros de version, dans la série 0.9.0 pendant la bêta : antimatter version l’affiche sous Numéro de compilation. Les images sont reconstruites à partir des branches main : antimatter-next chaque nuit (étiquettes nightly-<YYYYMMDD>) et les deux images à chaque modification (étiquettes sha-<commit>). Fixez l’une de ces étiquettes, effectuez les mises à niveau de manière intentionnelle et notez l’étiquette précédente pour savoir à quelle sauvegarde elle correspond.

Versions majeures de PostgreSQL

Le fichier compose utilise postgres:17-alpine. Antimatter nécessite PostgreSQL 15 ou une version plus récente. Une nouvelle version majeure de PostgreSQL ne peut pas lire le répertoire de données de la version précédente : pour passer à une nouvelle version, effectuez une décharge de la base de données, démarrez la nouvelle version sur un nouveau volume et restaurez la décharge dans celle-ci.

Mise à niveau vers 0.9.0

Le premier démarrage de la version 0.9.0 (ou d’une image construite à partir du 17 octobre 2026) effectue quelques modifications ponctuelles des données. Chacune s’exécute une seule fois et est consignée dans la base de données. Elles ramènent ce qui restait à une valeur par défaut ancienne à la nouvelle, et laissent intact ce qu’un administrateur a choisi. Suivez-les dans le journal.

Si Antimatter est destiné à une entreprise ou à une organisation, définissez Type de nouvelles communautés sur Entreprise avant de mettre à jour : AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. La mise à jour attribue à chaque communauté le type défini par ce paramètre au moment de l’opération, et les appels sont désactivés par défaut dans les canaux des communautés de type Communauté. Consultez Entreprise ou communauté.
ÉlémentLa modification
Types de communautéChaque communauté reçoit un type, Communauté ou Entreprise : la valeur de Type de nouvelles communautés (TeamSettings.DefaultCommunityKind) au premier démarrage. Un type déjà défini est conservé. Les administrateurs de communauté peuvent modifier le type de leur communauté ultérieurement, dans Paramètres de l’équipe › Canaux › Type de communauté.
Qui archive les canauxLes membres d’un canal n’archivent plus les canaux auxquels ils appartiennent : ce sont les administrateurs de la communauté qui le font. Dans une entreprise, les administrateurs du canal (celui qui l’a créé, ainsi que ceux qu’il a nommés administrateurs) peuvent également l’archiver. Cela modifie les rôles du schéma système ; les schémas de permissions créés par un administrateur système pour certaines communautés restent inchangés.
Le rôle Modérateurs des modèles de mise en pageLe rôle Modérateurs que les communautés ont reçu d’un modèle de mise en page obtient Retirer des personnes, ce qui est nécessaire pour suspendre et retirer des membres. Seuls les rôles restés exactement conformes au modèle sont modifiés ; un rôle modifié par un utilisateur est laissé tel quel.
Rôles avec AdministrateurUn rôle de communauté avec l’option Administrateur activée dispose désormais de toutes les actions que les administrateurs de la communauté peuvent effectuer, comme l’indique l’option, et non plus uniquement des paramètres de la communauté.
La limite de membresNombre maximum de membres par communauté (TeamSettings.MaxUsersPerTeam) passe de 50, l’ancienne valeur par défaut, à 0 (aucune limite). Toute autre valeur est conservée, de même qu’une limite définie avec AM_TEAMSETTINGS_MAXUSERSPERTEAM.
Connexions aux modèlesLes administrateurs système obtiennent la gestion des connexions aux modèles, et les administrateurs de communauté (ainsi que les rôles avec Administrateur) celle des connexions propres à leur communauté. Les services IA de l’application Agents deviennent des connexions aux modèles au niveau du serveur, voir ci-dessous.
Town Square devient GénéralLe canal par défaut de chaque communauté est renommé de town-square (Town Square) à general (Général). Il conserve son identifiant, ses membres, ses messages et ses paramètres, ainsi que le nom d'affichage choisi par les administrateurs. Les anciens liens et les recherches par town-square continuent d'y mener. Une communauté qui possède déjà un canal nommé general, même archivé, conserve son town-square en tant que canal par défaut, tout comme une communauté dont le town-square est archivé : le journal les nomme, et leurs administrateurs peuvent renommer les canaux.
FavorisLa catégorie de la barre latérale Favoris de tout le monde est renommée Favoris, comme l'indique désormais l'interface. Les catégories créées par les utilisateurs avec ce nom sont laissées telles quelles.

Les services de l'application Agents

La mise à niveau copie chaque service IA de l'application Agents dans une connexion de modèle à l'échelle du serveur, partagée avec toutes les communautés et utilisable par tous sauf les invités (activez Aussi les invités pour les y autoriser). Les clés sont chiffrées en cours de route, donc le serveur a besoin de sa clé de chiffrement IA : sur un cluster dont les fichiers sont dans S3, définissez d'abord AM_AI_ENCRYPTION_KEY, sinon la copie attend le prochain démarrage. Puis vérifiez Console système › IA › Connexions de modèles :

  • Chaque connexion conserve l'identifiant de son service, de sorte que les agents de l'application et une traduction automatique réglée sur un service Agents continuent de le trouver.
  • Les services OpenAI, compatibles OpenAI, Anthropic, Mistral, Cohere et Gemini deviennent des connexions à leur point de terminaison compatible OpenAI (ou Anthropic). Un service Azure devient une connexion au point de terminaison compatible OpenAI de la ressource : testez-le.
  • Les services AWS Bedrock, Google Vertex AI et Cohere North, ainsi que les types inconnus, sont marqués Nécessite une attention, avec la raison. Leurs identifiants cloud ne sont pas copiés : pointez-les vers le point de terminaison compatible OpenAI du fournisseur ou une passerelle telle que LiteLLM, puis enregistrez.
  • Le service d'incorporation devient le modèle Incarnations de la connexion avec la même adresse et la même clé, ou une connexion à part entière. Le service de transcription reçoit le modèle whisper-1.
  • Lorsque la réécriture et les résumés n'ont pas encore de connexion, ils reçoivent le service et le modèle de l'agent par défaut de l'application.

Les paramètres et les données propres à l'application Agents sont laissés tels qu'ils étaient : ses agents continuent d'utiliser ses services.

Autres modifications des valeurs par défaut

  • Appels : le Mode test est désactivé et Activer la vidéo est activé par défaut. Un choix enregistré dans la configuration est conservé. Les appels suivent également le type de communauté (voir Appels et voix).
  • Placer les messages en tête de liste est réservé aux administrateurs du canal, aux administrateurs et modérateurs de la communauté (avec Gérer les messages) ; les membres d'un message personnel ou de groupe peuvent toujours le faire.
  • Les canaux archivés peuvent accueillir de nouveaux membres, qui peuvent consulter leur historique. Personne ne peut y publier, réagir ou modifier quoi que ce soit.

Passer de Mattermost

Antimatter utilise le schéma de base de données de Mattermost et y ajoute ses propres tables, ce qui lui permet de reprendre la base de données PostgreSQL et les fichiers d'un serveur Mattermost. Essayez d'abord sur une copie :

  1. Effectuez une sauvegarde de la base de données Mattermost, de son stockage de fichiers (data/ ou bucket S3) et de config.json, puis arrêtez Mattermost.
  2. Restaurez la base de données dans PostgreSQL d'Antimatter, ou pointez Antimatter vers une copie de celle-ci (AM_SQLSETTINGS_DATASOURCE).
  3. Copiez les fichiers dans le stockage d'Antimatter en conservant leurs chemins d'accès : vers le bucket antimatter avec un outil S3, ou vers data/ avec une archive de version.
  4. Réutilisez vos paramètres : copiez config.json, ou transférez-le dans la base de données avec amctl --local config migrate (voir Configuration). Vos variables d'environnement MM_ continuent de fonctionner ; renommez-les en AM_ si vous le souhaitez.
  5. Démarrez Antimatter et suivez le journal pendant la mise à niveau de la base de données. Vérifiez ensuite Console système › Plugins › Gestion des plugins. Antimatter installe ses propres versions des appels, des playbooks, des tableaux kanban, des agents et des intégrations lorsqu'elles sont plus récentes que la version installée. Si Mattermost disposait d'une version plus récente de l'une de ces applications, supprimez-la et redémarrez Antimatter afin que sa propre version soit installée.
  6. Reconfigurez les notifications push avec votre propre proxy push : Antimatter n'envoie jamais de notifications aux services push de Mattermost, qu'ils soient de test ou hébergés, car ceux-ci ne livrent que vers les applications de Mattermost. Tant que vous ne modifiez pas le Serveur de notifications push, le serveur n'envoie aucune notification push (voir Notifications push).

Antimatter ne contacte aucun service exploité par Mattermost, Inc. (voir Connexions aux services externes), même si votre configuration en mentionne encore un :

  • un serveur de notifications push chez Mattermost est conservé dans les paramètres mais n'est jamais utilisé ;
  • les adresses de Mattermost pour le marché d'applications (URL du marché) et pour les avis produit sont vidées ;
  • les liens de téléchargement de l'application qui étaient les valeurs par défaut de Mattermost (Antimatter Apps Download Page Link, Lien de téléchargement de l'application Android et Lien de téléchargement de l'application iOS) sont remplacés par les pages de téléchargement des applications Antimatter sur GitHub ; les liens que vous avez définis vous-même sont conservés ;
  • l'application Appels utilise le serveur STUN public de Cloudflare au lieu de celui de Mattermost, sans modifier le paramètre enregistré (voir Appels) ;
  • la vérification des mises à jour de sécurité et la télémétrie des pannes ont été supprimées, ainsi que leurs paramètres de la Console système (Enable Security Alerts, Enable Diagnostics and Error Reporting) et la page Notifications.

Le socket du mode local est désormais /var/tmp/antimatter_local.socket ; amctl tente également l'ancien /var/tmp/mattermost_local.socket. Mattermost ne prend en charge que PostgreSQL dans ses versions récentes, et il en va de même pour Antimatter : migrez d'abord une base de données MySQL vers PostgreSQL. Revenir à Mattermost après qu'Antimatter a mis à jour la base de données implique de restaurer votre sauvegarde Mattermost.

Exporter et importer des données

Le format d'exportation en masse permet de transférer des données entre serveurs : le serveur entier, certaines communautés ou certains canaux, avec les pièces jointes, les photos de profil et les emojis personnalisés si vous le souhaitez.

# on the source server
amctl export create --team-name design --include-profile-pictures
amctl export list
amctl export download <export file> design.zip
# on the destination server
amctl import upload design.zip
amctl import list available
amctl import process <uploaded file> --imported-users active

Surveillez les tâches avec amctl export job list et amctl import job list. Pour une exportation ou une importation de communauté ou de canal, --imported-users est requis : active lorsque les personnes se déplacent vers ce serveur, inactive lors d'une importation vers un serveur où elles ont déjà des comptes, afin que les comptes créés à partir d'associations incertaines restent inactifs jusqu'à ce qu'un administrateur les vérifie. --destination-team-name importe vers une communauté existante. Les exportations et importations sont conservées sur le stockage du serveur (ExportSettings.Directory, ImportSettings.Directory) pendant 30 jours par défaut.

Sur le serveur lui-même, antimatter export bulk et antimatter import bulk --apply effectuent les mêmes opérations à partir de fichiers, sans passer par l'API.