Kopie zapasowe i aktualizacje
Co należy skopiować, jak przywrócić dane na nowym hoście, jak wykonać aktualizację oraz jak przenieść serwer Mattermost lub pojedynczą społeczność do Antimatter.
Co należy skopiować
| Co | Z plikiem compose witryny | Z archiwum wydania | Z pakietem .deb lub .rpm |
|---|---|---|---|
| Baza danych: wiadomości, użytkownicy, społeczności, kanały oraz, w przypadku pliku compose witryny, konfiguracja | wolumen antimatter_postgres, za pomocą pg_dump | Twoja baza danych PostgreSQL | Twoja baza danych PostgreSQL |
| Przesłane pliki, obrazy i zainstalowane aplikacje | wolumen antimatter_files (magazyn S3) | FileSettings.Directory, domyślnie ./data/ | /var/lib/antimatter |
| Plik konfiguracyjny | (w bazie danych) | config/config.json | /etc/antimatter/config/config.json |
| GIF-y i naklejki | wolumen antimatter_gifs | katalog danych usługi GIF | /var/lib/gifs-server |
| Sekrety | .env (oraz compose.override.yaml) | Twój plik środowiskowy | /etc/antimatter/antimatter.env, /etc/gifs-server |
| Klucz szyfrowania AI, który szyfruje klucze połączeń z modelami | AM_AI_ENCRYPTION_KEY w .env (zalecane) lub plik ai-encryption.key w wolumenie antimatter_data | AM_AI_ENCRYPTION_KEY lub data/ai-encryption.key | AM_AI_ENCRYPTION_KEY w antimatter.env lub /var/lib/antimatter/data/ai-encryption.key |
Bez klucza szyfrowania AI przywrócony serwer nie może odczytać kluczy API jego połączeń z modelami, a każdy z nich trzeba wpisać ponownie. Przechowuj kopię klucza osobno od kopii zapasowych bazy danych, aby jedna skradziona kopia nie zawierała obu. Zobacz Klucz szyfrowania.
Baza danych i pliki są ze sobą powiązane: wykonuj ich kopie zapasowe jednocześnie i przechowuj kopie poza serwerem. Nazwy wolumenów zaczynają się od nazwy projektu compose, antimatter (listę wyświetla docker volume ls).
Kopia zapasowa
Z katalogu, w którym znajduje się compose.yaml. Najpierw zatrzymaj Antimatter, aby uzyskać w pełni spójną kopię; kopia wykonana podczas działania jest zwykle w porządku, ale pliki przesłane w trakcie tworzenia kopii mogą w niej brakować.
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"
Jeśli nie ustawiono AM_AI_ENCRYPTION_KEY, plik klucza serwera znajduje się w wolumenie data, który powyższa pętla zapisuje wraz z plikami. Lepiej jest umieścić jego zawartość w .env, jak wyjaśnia Klucz szyfrowania, i przechowywać jego kopię osobno od kopii zapasowych bazy danych.
Uruchamiaj ją z cron dla dziennych kopii zapasowych i kopiuj katalog backups/ na inny komputer. Przechowuj kopie .env tak bezpiecznie jak sam serwer: zawierają jego hasła.
Aby kopiować przesłane pliki obiekt po obiekcie (na przykład do innego magazynu S3), użyj narzędzia wiersza poleceń AWS usługi bucket:
docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
"aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"
W przypadku archiwum wydania, wykonaj kopię zapasową bazy danych za pomocą pg_dump -Fc, a katalogi data/ i config/ za pomocą standardowych narzędzi (data/ zawiera plik klucza AI). W przypadku pakietów wykonaj kopię zapasową bazy danych w ten sam sposób, a także /etc/antimatter, /var/lib/antimatter, /etc/gifs-server i /var/lib/gifs-server.
Przywracanie na nowym hoście
Umieść compose.yaml, zapisany .env i kopie zapasowe w nowym katalogu, a następnie:
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
Użyj tego samego .env: magazyn danych i baza danych muszą zachować swoje hasła, a połączenia z modelami wymagają tego samego klucza szyfrowania AI. Jeśli nowy host ma inny adres, zaktualizuj SITE_URL (oraz DOMAIN).
Testuj swoje kopie zapasowe, przywracając je od czasu do czasu na innym komputerze.
Aktualizacja
data: plik klucza AI znajdował się w kontenerze. Przed użyciem nowego compose.yaml, jeśli .env nie zawiera AM_AI_ENCRYPTION_KEY, zapisz klucz utworzony przez serwer: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Jeśli polecenie nie znajdzie pliku, żadne połączenie z modelem nie zapisało jeszcze klucza.- Wykonaj kopię zapasową.
- Zmień tag obrazu w
.env(ANTIMATTER_IMAGE), jeśli go przypinas, jak zalecane. - Pobierz i uruchom ponownie:
docker compose pull docker compose up -d docker compose logs -f antimatter
Po uruchomieniu serwer aktualizuje schemat bazy danych (można to śledzić w dzienniku; na dużym serwerze może to potrwać kilka minut) i instaluje nowsze wersje aplikacji dołączonych do obrazu. W przypadku archiwum wydania: zatrzymaj serwer, zastąp wszystko poza config/, data/, logs/, plugins/ i client/plugins/ zawartością nowego archiwum, a następnie uruchom serwer ponownie. W przypadku pakietu .deb lub .rpm zainstaluj nowy pakiet zgodnie z opisem w sekcji Aktualizacja pakietu.
antimatter-next z powrotem do antimatter.Wersje
Serwer Antimatter raportuje wersję linii Mattermost, na której jest oparty (obecnie 12.0.0). Wydania na GitHub, wraz z archiwami i pakietami, mają własne numery wersji, w serii 0.9.0 podczas beta: antimatter version wyświetla je jako Numer Kompilacji. Obrazy są odbudowywane z gałęzi main: antimatter-next co noc (etykiety nightly-<YYYYMMDD>), a oba obrazy przy każdej zmianie (etykiety sha-<commit>). Użyj jednej z tych etykiet, aktualizuj świadomie i zapisz poprzednią etykietę, aby wiedzieć, do której kopii zapasowej należy.
Główne wersje PostgreSQL
Plik compose używa postgres:17-alpine. Antimatter wymaga PostgreSQL 15 lub nowszego. Nowa główna wersja PostgreSQL nie może odczytać katalogu danych poprzedniej wersji: aby przejść na nową, wykonaj zrzut bazy danych, uruchom nową wersję na nowym wolumenie i przywróć zrzut do niej.
Aktualizacja do wersji 0.9.0
Pierwsze uruchomienie wersji 0.9.0 (lub obrazu zbudowanego od 17 października 2026 r.) wprowadza kilka jednorazowych zmian w danych. Każda z nich jest wykonywana tylko raz i zapisywana w bazie danych. Mają one na celu dostosowanie wartości pozostawionych na starych domyślnych do nowych, pozostawiając bez zmian te, które wybrał administrator. Możesz śledzić je w dzienniku.
AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. Aktualizacja nadaje każdej społeczności rodzaj, który ma to ustawienie w danym momencie, a rozmowy są domyślnie wyłączone w kanałach społeczności typu Społeczność. Zobacz Miejsce pracy lub społeczność.| Co | Zmiana |
|---|---|
| Rodzaje społeczności | Każda społeczność otrzymuje rodzaj, Społeczność lub Miejsce pracy: wartość Rodzaju nowych społeczności (TeamSettings.DefaultCommunityKind) przy pierwszym uruchomieniu. Już ustawiony rodzaj jest zachowywany. Administratorzy społeczności mogą później zmienić rodzaj swojej społeczności w Ustawienia zespołu › Kanały › Rodzaj społeczności. |
| Kto archiwizuje kanały | Członkowie kanałów nie archiwizują już kanałów, w których się znajdują – robią to administratorzy społeczności. W przypadku przestrzeni roboczej archiwizują je również administratorzy kanału (osoba, która go utworzyła, oraz te, którym nadano uprawnienia administratora). Zmienia to role schematu systemowego; schematy uprawnień utworzone przez administratora systemu dla niektórych społeczności pozostają bez zmian. |
| Rola Moderatorów w szablonach układu | Rola Moderators, którą społeczności otrzymały z szablonu układu, otrzymuje uprawnienie Usuwanie osób, którego potrzebują do czasowego blokowania i usuwania użytkowników. Zmieniają się tylko role, które pozostają dokładnie takie, jak je utworzył szablon; role edytowane przez użytkowników pozostają bez zmian. |
| Role z uprawnieniem Administrator | Rola społeczności z włączonym przełącznikiem Administrator ma teraz wszystkie uprawnienia, które mogą wykonywać administratorzy danej społeczności, zgodnie z opisem przełącznika, a nie tylko te dotyczące ustawień społeczności. |
| Limit członków | Wartość Maks. liczba członków na społeczność (TeamSettings.MaxUsersPerTeam) zmienia się z 50 (poprzednia wartość domyślna) na 0 (brak limitu). Inne wartości oraz limit ustawiony za pomocą zmiennej AM_TEAMSETTINGS_MAXUSERSPERTEAM pozostają bez zmian. |
| Połączenia z modelami | Administratorzy systemu otrzymują zarządzanie połączeniami z modelami, a administratorzy społeczności (oraz role z uprawnieniem Administrator) – zarządzanie połączeniami z modelami ich własnej społeczności. Usługi AI aplikacji Agents stają się ogólnosystemowymi połączeniami z modelami, szczegóły poniżej. |
| Town Square zmienia nazwę na General | Domyślny kanał każdej społeczności zmienia nazwę z town-square (Town Square) na general (General). Zachowuje on swój identyfikator, członków, wiadomości, ustawienia oraz nazwę wyświetlaną wybraną przez administratorów. Stare linki i wyszukiwania po nazwie town-square nadal prowadzą do tego kanału. Społeczność, która ma już kanał o nazwie general (nawet zarchiwizowany), zachowuje town-square jako kanał domyślny; podobnie jest w przypadku społeczności, której kanał town-square jest zarchiwizowany. Nazwy tych społeczności są wymieniane w logach, a ich administratorzy mogą zmienić nazwy kanałów. |
| Ulubione | Kategoria Ulubione w pasku bocznym każdego użytkownika zmienia nazwę na Favourites, zgodnie z nową nazwą w interfejsie. Kategorie utworzone przez użytkowników pod tą nazwą pozostają bez zmian. |
Usługi aplikacji Agents
Aktualizacja kopiuje każdy serwis AI z aplikacji Agents do połączenia z modelem na poziomie serwera, udostępnianego całej społeczności i dostępnego dla wszystkich, z wyjątkiem gości (włącz Również goście, aby im to umożliwić). Klucze są szyfrowane w trakcie transferu, więc serwer wymaga klucza szyfrowania AI: w klastrze, którego pliki znajdują się w S3, najpierw ustaw AM_AI_ENCRYPTION_KEY, w przeciwnym razie kopiowanie poczeka na kolejne uruchomienie. Następnie sprawdź Konsola systemu › AI › Połączenia z modelami:
- Każde połączenie zachowuje identyfikator swojego serwisu, dzięki czemu agenci aplikacji oraz automatyczne tłumaczenie ustawione na serwis Agents nadal go znajdują.
- Serwisy OpenAI, zgodne z OpenAI, Anthropic, Mistral, Cohere i Gemini stają się połączeniami z ich końcówkami zgodnymi z OpenAI (lub Anthropic). Serwis Azure staje się połączeniem z końcówką zgodną z OpenAI dla danego zasobu: przetestuj to.
- Serwisy AWS Bedrock, Google Vertex AI i Cohere North oraz nieznane typy są oznaczane jako Wymaga uwagi, z podaniem przyczyny. Ich dane uwierzytelniające chmury nie są kopiowane: wskaż je na końcówkę zgodną z OpenAI dostawcy lub na bramkę, taką jak LiteLLM, a następnie zapisz zmiany.
- Serwis embeddingów staje się modelem Embeddings połączenia o tym samym adresie i kluczu lub własnym połączeniem. Serwis transkrypcji otrzymuje model
whisper-1. - Gdy przepis i podsumowania nie mają jeszcze połączenia, otrzymują serwis i model domyślnego agenta aplikacji.
Własne ustawienia i dane aplikacji Agents pozostają bez zmian: jej agenci nadal korzystają z jej serwisów.
Inne zmiany wartości domyślnych
- Połączenia: Tryb testowy jest wyłączony, a Włącz wideo jest włączone domyślnie. Wybór zapisany w konfiguracji jest zachowywany. Połączenia podążają również za typem społeczności (patrz Połączenia i głos).
- Przypinanie wiadomości na górze jest dostępne dla administratorów kanału, administratorów i moderatorów społeczności (z uprawnieniem Zarządzanie wiadomościami); członkowie wiadomości bezpośredniej lub grupowej nadal mogą to robić.
- Archiwizowane kanały mogą przyjmować nowych członków, którzy czytają ich historię. Nikt nie może w nich publikować, reagować ani niczego zmieniać.
Przejście z Mattermost
Antimatter używa schematu bazy danych Mattermost i dodaje własne tabele, dzięki czemu może przejąć bazę danych PostgreSQL i pliki serwera Mattermost. Najpierw przetestuj to na kopii:
- Wykonaj kopię zapasową bazy danych Mattermost, jego magazynu plików (
data/lub bucket S3) orazconfig.json, a następnie zatrzymaj Mattermost. - Przywróć bazę danych do PostgreSQL Antimatter lub wskaż Antimatter na jej kopię (
AM_SQLSETTINGS_DATASOURCE). - Skopiuj pliki do magazynu Antimatter, zachowując ich ścieżki: do bucketa
antimatterza pomocą narzędzia S3 lub dodata/w przypadku archiwum wydania. - Wydaj użycie z ustawień: skopiuj
config.jsonlub przenieś go do bazy danych za pomocąamctl --local config migrate(patrz Konfiguracja). Twoje zmienne środowiskoweMM_nadal działają; zmień ich nazwę naAM_, gdy to wygodne. - Uruchom Antimatter i obserwuj dziennik podczas aktualizacji bazy danych. Następnie sprawdź Konsola systemu › Wtyczki › Zarządzanie wtyczkami. Antimatter instaluje własne wersje Rozmów, Playbooków, Tablic Kanban, Agentów oraz integracji, gdy są nowsze niż zainstalowana wersja. Jeśli Mattermost miał nowszą wersję jednej z nich, usuń tę aplikację i uruchom ponownie Antimatter, aby zainstalować jego własną wersję.
- Skonfiguruj ponownie powiadomienia push, używając własnego serwera pośredniczącego: Antimatter nigdy nie wysyła powiadomień do usług push Mattermost (testowych ani hostowanych), które dostarczają je wyłącznie do własnych aplikacji Mattermost. Dopóki nie zmienisz Serwera powiadomień Push, serwer nie wysyła żadnych powiadomień push (patrz Powiadomienia push).
Antimatter nie kontaktuje się z żadną usługą prowadzoną przez Mattermost, Inc. (zobacz Połączenia z zewnętrznymi usługami), nawet jeśli konfiguracja nadal wskazuje na taką usługę:
- serwer powiadomień push Mattermost jest przechowywany w ustawieniach, ale nigdy nie jest używany;
- Adresy Mattermost dla sklepu z aplikacjami (Adres URL sklepu z wtyczkami) oraz dla powiadomień produktowych są wyczyszczone;
- linki do pobierania aplikacji, które były wartościami domyślnymi Mattermost (Antimatter Apps Download Page Link, Link do pobrania aplikacji na Androida i Link do pobrania aplikacji iOS), są zastępowane stronami do pobierania aplikacji Antimatter na GitHub; linki ustawione samodzielnie są zachowane;
- aplikacja Rozmowy używa publicznego serwera STUN firmy Cloudflare zamiast serwera Mattermost, bez zmiany zapisanego ustawienia (zobacz Rozmowy);
- sprawdzanie aktualizacji bezpieczeństwa i raportowanie awarii zostały usunięte, wraz z ich ustawieniami w Konsoli systemu (Włącz alerty bezpieczeństwa, Włącz diagnostykę i raportowanie błędów) oraz stroną Powiadomienia.
Gniazdo trybu lokalnego to teraz /var/tmp/antimatter_local.socket; amctl próbuje również starego /var/tmp/mattermost_local.socket. Mattermost wspiera w ostatnich wersjach tylko PostgreSQL, podobnie jak Antimatter: najpierw przenieś bazę danych MySQL do PostgreSQL. Powrót do Mattermost po aktualizacji bazy danych przez Antimatter oznacza przywrócenie kopii zapasowej Mattermost.
Eksport i import danych
Format masowego eksportu przenosi dane między serwerami: cały serwer, niektóre społeczności lub niektóre kanały, wraz z załącznikami, zdjęciami profilowymi i niestandardowymi emoji, jeśli tego chcesz.
# 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
Obserwuj zadania za pomocą amctl export job list i amctl import job list. W przypadku eksportu przestrzeni roboczej lub kanału wymagana jest opcja --imported-users: active, gdy użytkownicy przechodzą na ten serwer, oraz inactive, gdy importujesz dane na serwer, na którym już posiadają konta, dzięki czemu konta utworzone z niepewnych dopasowań pozostaną nieaktywne, aż administrator je zweryfikuje. Opcja --destination-team-name umożliwia import do istniejącej przestrzeni roboczej. Eksporty i importy są przechowywane na dysku serwera (ExportSettings.Directory, ImportSettings.Directory) domyślnie przez 30 dni.
Bezpośrednio na serwerze polecenia antimatter export bulk i antimatter import bulk --apply wykonują te same operacje z plików, bez użycia API.