Zálohy a aktualizace
Co zálohovat, jak to obnovit na novém hostiteli, jak aktualizovat a jak převést server Mattermost nebo jednotlivou komunitu do Antimatter.
Co zálohovat
| Co | S compose souborem webu | S archívem vydání | S balíčkem .deb nebo .rpm |
|---|---|---|---|
| Databáze: zprávy, uživatelé, komunity, kanály a, s compose souborem webu, konfigurace | svazek antimatter_postgres, pomocí pg_dump | vaše databáze PostgreSQL | vaše databáze PostgreSQL |
| Nahraté soubory, obrázky a nainstalované aplikace | svazek antimatter_files (úložiště S3) | FileSettings.Directory, výchozí je ./data/ | /var/lib/antimatter |
| Konfigurační soubor | (v databázi) | config/config.json | /etc/antimatter/config/config.json |
| Gify a samolepky | svazek antimatter_gifs | adatový adresář služby GIF | /var/lib/gifs-server |
| Hesla | .env (a compose.override.yaml) | váš soubor prostředí | /etc/antimatter/antimatter.env, /etc/gifs-server |
| Klíč pro šifrování AI, který šifruje klíče připojení k modelům | AM_AI_ENCRYPTION_KEY v .env (doporučeno), nebo soubor ai-encryption.key v objemu antimatter_data | AM_AI_ENCRYPTION_KEY nebo data/ai-encryption.key | AM_AI_ENCRYPTION_KEY v antimatter.env nebo /var/lib/antimatter/data/ai-encryption.key |
Bez klíče pro šifrování AI nemůže obnovený server přečíst API klíče připojení k modelům a každý z nich je potřeba znovu zadat. Klíč si uložte na jiném místě než zálohy databáze, aby v jednom ukradeném záložním souboru nebyly obojí. Viz Klíč pro šifrování.
Databáze a soubory spolu souvisí: zálohujte je ve stejný čas a uchovávejte kopie mimo server. Názvy svazků začínají názvem compose projektu, antimatter (vypíše je docker volume ls).
Zálohování
Z adresáře souboru compose.yaml. Předem zastavení Antimatter zajistí plně konzistentní kopii; záloha pořízená za běhu je obvykle v pořádku, ale soubory nahraté během zálohování v ní mohou chybět.
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"
Pokud jste nenastavili AM_AI_ENCRYPTION_KEY, klíčový soubor serveru se nachází v objemu data, který výše uvedená smyčka ukládá spolu se soubory. Lepší je vložit jeho obsah do .env, jak vysvětluje Klíč pro šifrování, a mít jeho kopii na jiném místě než zálohy databáze.
Spouštějte to z cronu pro denní zálohy a kopírujte adresář backups/ na jiný stroj. Kopie souboru .env uchovávejte stejně bezpečně jako server: obsahují jeho hesla.
Pokud chcete nahraté soubory kopírovat objekt po objektu (například do jiného úložiště S3), použijte nástroj příkazového řádku AWS služby bucket:
docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
"aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"
Při použití archivu s vydáním zálohujte databázi pomocí pg_dump -Fc a adresáře data/ a config/ pomocí svých obvyklých nástrojů (v data/ se nachází klíčový soubor AI). Při použití balíčků zálohujte databázi stejným způsobem a také /etc/antimatter, /var/lib/antimatter, /etc/gifs-server a /var/lib/gifs-server.
Obnovení na novém hostiteli
Umístěte compose.yaml, uložený .env a zálohy do nového adresáře, pak:
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
Použijte stejný .env: úložiště i databáze musí si zachovat původní hesla a připojení k modelům potřebují stejný klíč pro šifrování AI. Pokud má nový host jinou adresu, aktualizujte SITE_URL (a DOMAIN).
Zálohy otestujte občas tím, že je obnovíte na jiném stroji.
Aktualizace
data: klíčový soubor AI byl v kontejneru. Než použijete nový compose.yaml a pokud .env neobsahuje AM_AI_ENCRYPTION_KEY, uložte klíč, který server vytvořil: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Pokud příkaz nenajde soubor, žádná připojení k modelům dosud neuložila klíč.- Pořiďte zálohu.
- Změňte štítek obrazu v
.env(ANTIMATTER_IMAGE), pokud ho fixujete, jak je doporučeno. - Stáhněte a restartujte:
docker compose pull docker compose up -d docker compose logs -f antimatter
Při spuštění server aktualizuje schéma databáze (postupujte podle záznamů v logu; u velkých serverů to může trvat několik minut) a nainstaluje novější verze aplikací zabudovaných do obrazu. V případě archivu vydání: zastavte server, nahraďte vše kromě config/, data/, logs/, plugins/ a client/plugins/ obsahem nového archivu a server znovu spusťte. V případě balíčku .deb nebo .rpm nainstalujte nový balíček tak, jak je vysvětleno v dokumentaci Aktualizace balíčku.
antimatter-next zpět na antimatter.Verze
Server Antimatter hlásí verzi řady Mattermost, na které je založen (v současnosti 12.0.0). Vydání na GitHubu, včetně jejich archivů a balíčků, mají vlastní čísla verzí, v řadě 0.9.0 během beta verze: příkaz antimatter version je zobrazuje jako Verze sestavení. Obrazy se přebudovávají z větví main: antimatter-next každou noc (štítky nightly-<YYYYMMDD>) a oba obrazy při každé změně (štítky sha-<commit>). Přejište jeden z těchto štítků, aktualizujte cíleně a zaznamenejte si předchozí štítek, abyste věděli, která záloha k němu patří.
Hlavní verze PostgreSQL
Soubor compose používá postgres:17-alpine. Antimatter vyžaduje PostgreSQL 15 nebo novější. Nová hlavní verze PostgreSQL nedokáže přečíst datový adresář předchozí verze: pokud se chcete přejít na novou, vyexportujte databázi, spusťte novou verzi na novém svazku a do ní export obnovte.
Aktualizace na verzi 0.9.0
První spuštění verze 0.9.0 (nebo obrazu sestaveného od 17. října 2026) provede několik jednorázových změn v datech. Každá se provede pouze jednou a je zaznamenána v databázi. Tyto změny přenášejí hodnoty, které zůstaly na starých výchozích nastaveních, na nové, a ponechávají bez změny to, co si administrátor explicitně zvolil. Postupujte podle záznamů v logu.
AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. Aktualizace přiřadí každé komunitě typ, který má toto nastavení v daném okamžiku, a hovory jsou v kanálech komunit typu Guild ve výchozím nastavení vypnuty. Viz Guild nebo pracovní prostor.| Co | Změna |
|---|---|
| Typy komunit | Každá komunita získá typ, Guild nebo Pracovní prostor: hodnotu Typ nových komunit (TeamSettings.DefaultCommunityKind) při prvním spuštění. Již nastavený typ se zachová. Administrátoři komunity mohou typ své komunity později změnit v Nastavení týmu › Obecné. |
| Kdo archivuje kanály | Členové kanálu již nearchivují kanály, ve kterých jsou; to dělají administrátoři komunity. V pracovním prostoru kanál archivují také jeho administrátoři (ten, kdo ho vytvořil, a ti, které administrátory udělil). Tím se změní role v systému schématu; schémata oprávnění, která vytvořil administrátor systému pro některé komunity, zůstávají beze změny. |
| Role Moderátorů ve šablonách rozvržení | Role Moderátorů, kterou komunity získaly ze šablony rozvržení, dostává oprávnění Odebírat lidi, které je potřeba pro vylučování a odstraňování lidí. Změní se jen role, které jsou přesně tak, jak je šablona vytvořila; roli, kterou někdo upravil, se nedotkne. |
| Role s Administrátorem | Role komunity s přepínačem Administrátor zapnutým nyní zahrnuje vše, co mohou dělat administrátoři dané komunity, jak přepínač naznačuje, a ne jen nastavení komunity. |
| Limit členů | Max. počet členů na komunitu (TeamSettings.MaxUsersPerTeam) se mění z 50, což bylo staré výchozí nastavení, na 0 (bez limitu). Jakákoliv jiná hodnota se zachová, stejně jako limit nastavený pomocí AM_TEAMSETTINGS_MAXUSERSPERTEAM. |
| Připojení k modelům | Systémoví administrátoři získávají správu připojení k modelům, administrátoři komunit (a role s Administrátorem) správu připojení k modelům jejich vlastní komunity. Služby AI aplikace Agenti se stávají serverově širokými připojeními k modelům, viz níže. |
| Town Square se stává General | Výchozí kanál každé komunity se přejmenuje z town-square (Town Square) na general (General). Zachová si svůj ID, členy, zprávy a nastavení, stejně jako zobrazené jméno, které si vybrali administrátoři. Staré odkazy a vyhledávání podle town-square stále vedou na tento kanál. Komunita, která už má kanál pojmenovaný general, i když je archivovaný, si ponechá town-square jako výchozí kanál; totéž platí pro komunitu, jejíž town-square je archivován: systémový deník je jmenuje a jejich administrátoři mohou kanály přejmenovat. |
| Oblíbené | Kategorie Oblíbené v bočním panelu každého uživatele se přejmenuje na Oblíbené, jak to nyní naznačuje rozhraní. Kategorie, které lidé vytvořili s tímto názvem, zůstávají beze změny. |
Služby aplikace Agenti
Aktualizace zkopíruje každou službu AI aplikace Agenti do celoserverového připojení k modelu, sdíleného se všemi komunitami a dostupného všem kromě hostů (zapněte Také hosté, aby ho mohli používat i oni). Klíče jsou při kopírování šifrovány, takže server potřebuje svůj klíč pro šifrování AI: v klastru, jehož soubory jsou v S3, nastavte nejprve AM_AI_ENCRYPTION_KEY, jinak kopírování počká na další spuštění. Poté zkontrolujte Systémová konzole › AI › Připojení k modelům:
- Každé připojení si zachovává ID své služby, takže agenti aplikace a automatický překlad nastavený na službu Agents ji nadále najdou.
- Služby OpenAI, OpenAI-kompatibilní, Anthropic, Mistral, Cohere a Gemini se stanou připojeními k jejich OpenAI-kompatibilnímu (nebo Anthropic) koncovému bodu. Služba Azure se stane připojením k OpenAI-kompatibilnímu koncovému bodu daného zdroje: otestujte ho.
- Služby AWS Bedrock, Google Vertex AI a Cohere North, stejně jako neznámé typy, jsou označeny jako Potřebuje pozornost s uvedením důvodu. Jejich cloudové přihlašovací údaje se nekopírují: namířte je na OpenAI-kompatibilní koncový bod poskytovatele nebo na bránu, například LiteLLM, a poté uložte.
- Služba pro embedding se stane modelem Embeddings připojení se stejnou adresou a klíčem, nebo vlastním připojením. Služba pro přepis získá model
whisper-1. - Pokud přepsání a shrnutí zatím nemají připojení, dostanou službu a model výchozího agenta aplikace.
Agenti aplikace Agenti
Po službách aktualizace převede každého agenta aplikace Agenti (nyní aplikace AI chat) na celoserverového agenta na stejném účtu: jeho připojení (to, které bylo zkopírováno ze služby), model, pokyny, uvažování, kola nástrojů a kdo ho může používat. Za tyto agenty pak odpovídá server. Pokud aplikace omezila agenta způsobem, který serveroví agenti nevyjadřují (kanály, kde odpovídal, seznamy blokovaných, přístup na základě atributů), je agent zúžen na členy těchto kanálů, nebo na nikoho, a označen jako vyžadující pozornost, stejně jako agent, jehož služba se nestala připojením. Zkontrolujte je v Systémová konzole › AI › Připojení k modelům. Ostatní nastavení aplikace zůstávají beze změny.
Další změny výchozích hodnot
- Hovory: Testovací režim je ve výchozím nastavení vypnutý a Povolit video zapnuté. Výběr uložený v konfiguraci se zachová. Hovory také respektují typ komunity (viz Hovory a hlas).
- Přesunutí zpráv na vrchol je v kompetenci administrátorů kanálu, administrátorů a moderátorů komunity (s oprávněním Spravovat zprávy); členové přímé nebo skupinové zprávy to mohou nadále dělat.
- Archivované kanály mohou přijímat nové členy, kteří si mohou přečíst jejich historii. Nikdo v nich nemůže psát, reagovat ani nic měnit.
Přechod z Mattermost
Antimatter používá schéma databáze Mattermost a přidává vlastní tabulky, takže může převzít databázi PostgreSQL a soubory serveru Mattermost. Nejprve to vyzkoušejte na kopii:
- Zálohujte databázi Mattermost, jeho úložiště souborů (
data/nebo S3 bucket) aconfig.json, poté Mattermost zastavte. - Obnovte databázi do PostgreSQL pro Antimatter, nebo Antimatter nasměrujte na její kopii (
AM_SQLSETTINGS_DATASOURCE). - Zkopírujte soubory do úložiště Antimatter, přičemž zachovejte jejich cesty: do bucketu
antimatterpomocí nástroje pro S3, nebo dodata/pomocí archivu vydání. - Znovu použijte svá nastavení: zkopírujte
config.json, nebo ho přeneste do databáze pomocíamctl --local config migrate(viz Nastavení). Vaše proměnné prostředíMM_nadále fungují; přejmenujte je naAM_, jak vám to vyhovuje. - Spusťte Antimatter a sledujte protokol, zatímco aktualizuje databázi. Poté zkontrolujte Systémová konzole › Pluginy › Správa pluginů. Antimatter nainstaluje vlastní sestavení funkcí Hovory, AI chat a integrace, pokud jsou novější než nainstalovaná verze, a také funkcí Playbooks a Kanban (Nástěnky), pokud byla některá z nich na serveru Mattermost již nainstalována (na novém serveru se žádná z nich již nenachází v základní instalaci: viz Aplikace v základní instalaci). Pokud měl Mattermost novější verzi některé z těchto aplikací, odeberte danou aplikaci a restartujte Antimatter, aby se nainstalovalo jeho vlastní sestavení.
- Nastavte push oznámení znovu, pomocí vlastního push proxy: Antimatter nikdy neposílá oznámení do push služeb Mattermost, ať už testovacích nebo hostovaných, protože ty doručují pouze do vlastních aplikací Mattermost. Dokud nezměníte Server push oznámení, server neposílá žádná push oznámení (viz Push oznámení).
Antimatter nekomunikuje s žádnou službou provozovanou společností Mattermost, Inc. (viz Připojení k externím službám), i když se v konfiguraci stále nachází odkaz na některou z nich:
- server push notifikací od Mattermost zůstává v nastaveních, ale nikdy se nepoužívá;
- adresy Mattermost pro tržiště aplikací (URL tržiště) a pro produktová oznámení jsou vyprázdněny;
- odkazy ke stažení aplikací, které byly výchozími odkazy Mattermost (Antimatter Apps Download Page Link, Odkaz ke stažení aplikace pro Android a Odkaz ke stažení aplikace pro iOS), jsou nahrazeny stránkami ke stažení aplikací Antimatter na GitHubu; odkazy, které jste nastavili sami, zůstávají beze změny;
- aplikace Hovory používá veřejný STUN server Cloudflare místo toho od Mattermost, aniž by se měnilo uložené nastavení (viz Hovory);
- kontrola bezpečnostních aktualizací a hlášení chyb byly odstraněny, stejně jako jejich nastavení v Systémové konzoli (Povolit bezpečnostní upozornění, Povolit diagnostiku a hlášení chyb) a stránka Oznámení.
Místní socket je nyní /var/tmp/antimatter_local.socket; amctl také zkouší starý /var/tmp/mattermost_local.socket. Mattermost v nedávných verzích podporuje pouze PostgreSQL, a to samé platí pro Antimatter: databázi MySQL je třeba nejprve přenést do PostgreSQL. Vratit se k Mattermostu poté, co Antimatter aktualizoval databázi, znamená obnovit zálohu Mattermost.
Export a import dat
Formát hromadného exportu slouží k přenosu dat mezi servery: celý server, některé komunity nebo některé kanály, včetně příloh, profilových fotografií a vlastních emoji, pokud je požadujete.
# 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
Postup exportu a importu sledujte pomocí příkazů amctl export job list a amctl import job list. Pro export komunity nebo kanálu je požadován parametr --imported-users: hodnota active se používá, když se lidé přesouvají na tento server, hodnota inactive se používá při importu do serveru, kde už mají účty, aby účty vytvořené z nejistých shod zůstaly neaktivní, dokud je administrátor neověří. Parametr --destination-team-name umožňuje import do existující komunity. Exporty a importy se na úložišti serveru (ExportSettings.Directory, ImportSettings.Directory) uchovávají výchozí po dobu 30 dnů.
Přímo na serveru příkazy antimatter export bulk a antimatter import bulk --apply provádějí stejnou operaci z souborů, aniž by využívaly API.
Řádek kanálu v exportu obsahuje jeho typ a nastavení (am_type, am_mode, am_root_posts a u fóra am_forum_view); řádek bez těchto údajů se importuje jako běžný textový kanál Chat. Řádek kořenového příspěvku ve fórovém kanálu vyžaduje props.am_thread_title, tedy název tématu; bez něj import na tomto řádku selže.