Sikkerhedskopiering og opgradering
Hvad der skal sikkerhedskopieres, hvordan det gendannes på en ny vært, hvordan der opgraderes og hvordan en Mattermost-server eller et enkelt community flyttes til Antimatter.
Hvad der skal sikkerhedskopieres
| Hvad | Med sitets compose-fil | Med et release-arkiv | Med .deb- eller .rpm-pakken |
|---|---|---|---|
| Databasen: beskeder, brugere, communities, kanaler og, med sitets compose-fil, konfigurationen | volumen antimatter_postgres, via pg_dump | din PostgreSQL-database | din PostgreSQL-database |
| Uploadede filer, billeder og installerede apps | volumen antimatter_files (S3-opbevaringen) | FileSettings.Directory, ./data/ som standard | /var/lib/antimatter |
| Konfigurationsfilen | (i databasen) | config/config.json | /etc/antimatter/config/config.json |
| GIF'er og stickers | volumen antimatter_gifs | GIF-tjenestens datamappe | /var/lib/gifs-server |
| Hemmeligheder | .env (og compose.override.yaml) | din miljøfil | /etc/antimatter/antimatter.env, /etc/gifs-server |
| AI-krypteringsnøglen, som krypterer nøglerne for modelforbindelser | AM_AI_ENCRYPTION_KEY i .env (anbefalet), eller filen ai-encryption.key i volumen antimatter_data | AM_AI_ENCRYPTION_KEY eller data/ai-encryption.key | AM_AI_ENCRYPTION_KEY i antimatter.env eller /var/lib/antimatter/data/ai-encryption.key |
Uden AI-krypteringsnøglen kan en gendannet server ikke læse API-nøglerne for dens modelforbindelser, og hver nøgle skal indtastes igen. Gem en kopi af nøglen adskilt fra databasebackups, så en stjålet backup ikke indeholder begge dele. Se Krypteringsnøglen.
Databasen og filerne hører sammen: sikkerhedskopiér dem på samme tidspunkt, og opbevar kopierne på en anden plads end serveren. Volumennavne starter med compose-projektets navn, antimatter (docker volume ls viser dem).
Sikkerhedskopiér
Fra mappen med compose.yaml. Hvis du stopper Antimatter først, får du en fuldt konsistent kopi; en sikkerhedskopi taget, mens det kører, er normalt i orden, men filer uploadet under sikkerhedskopieringen kan mangle.
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"
Hvis du ikke har angivet AM_AI_ENCRYPTION_KEY, findes serverens nøgelfil i data-volumen, som loopet ovenfor gemmer sammen med filerne. Det er bedre at indsætte indholdet i .env, som Krypteringsnøglen forklarer, og gemme en kopi af det adskilt fra databasebackups.
Kør det fra cron til daglige sikkerhedskopier, og kopiér backups/-mappen til en anden maskine. Opbevar kopierne af .env lige så sikkert som serveren: de indeholder dens adgangskoder.
Hvis du i stedet vil kopiere de uploadede filer objekt for objekt (f.eks. til en anden S3-opbevaring), skal du bruge AWS-kommandolinjeværktøjet for bucket-tjenesten:
docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
"aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"
Med et release-arkiv, så back up databasen med pg_dump -Fc, og data/- og config/-mapparne med dine sædvanlige værktøjer (data/ indeholder AI-nøgelfilen). Med pakkerne, så back up databasen på samme måde, og /etc/antimatter, /var/lib/antimatter, /etc/gifs-server og /var/lib/gifs-server.
Gendan på en ny vært
Læg compose.yaml, den gemte .env og sikkerhedskopiene i en ny mappe, og derefter:
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
Brug den samme .env: opbevaringen og databasen skal beholde de adgangskoder, de havde, og modelforbindelserne har brug for den samme AI-krypteringsnøgle. Hvis den nye vært har en anden adresse, så opdater SITE_URL (og DOMAIN).
Test dine sikkerhedskopier ved at gendanne dem på en anden maskine fra tid til anden.
Opgrader
data-volumen: AI-nøgelfilen var i containeren. Før du bruger den nye compose.yaml, og hvis .env ikke har AM_AI_ENCRYPTION_KEY, så gem den nøgle, serveren har oprettet: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Hvis kommandoen ikke finder nogen fil, har ingen modelforbindelse gemt en nøgle endnu.- Tag en sikkerhedskopi.
- Skift billedtaget i
.env(ANTIMATTER_IMAGE), hvis du fastlåser et, som anbefalet. - Træk og genstart:
docker compose pull docker compose up -d docker compose logs -f antimatter
Ved start opgraderer serveren databaseens schema (du kan følge med i loggen; en stor server kan tage flere minutter) og installerer de nyere versioner af de medfølgende apps fra billedet. Med et release-arkiv: stop serveren, udskift alt undtagen config/, data/, logs/, plugins/ og client/plugins/ med det nye arkivs indhold, og start den igen. Med .deb- eller .rpm-pakken, installer den nye pakke, som Opgradering af en pakke forklarer.
antimatter-next tilbage til antimatter.Versioner
Antimatters server rapporterer versionen af Mattermost-linjen, den er baseret på (i øjeblikket 12.0.0). Releases på GitHub, med deres arkiver og pakker, har deres egne versionsnumre, i 0.9.0-serien under beta: antimatter version viser det som Bygnummer. Billederne genopbygges fra main-grene: antimatter-next hver nat (tags nightly-<YYYYMMDD>), og begge billeder ved hver ændring (tags sha-<commit>). Fastgør ét af disse tags, opgrader bevidst, og hold det forrige tag noteret, så du ved, hvilken backup der hører til det.
PostgreSQL-hovedversioner
Compose-filen bruger postgres:17-alpine. Antimatter kræver PostgreSQL 15 eller nyere. En ny hovedversion af PostgreSQL kan ikke læse den forrige versions datamappe: for at skifte til en ny version skal du dumpe databasen, starte den nye version på et nyt volumen og gendanne dumpen i den.
Opgradering til 0.9.0
Den første start af version 0.9.0 (eller af et billede bygget fra 17. oktober 2026) foretager nogle engangsændringer i dataene. Hver køres én gang og registreres i databasen. De bringer det, der blev efterladt med et gammelt standardværdi, til den nye, og rører ikke det, en administrator valgte. Følg dem i loggen.
AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. Opgraderingen tildeler hvert fællesskab den type, denne indstilling har på det tidspunkt, og opkald er som standard slået fra i kanaler i fællesskaber af typen Guild. Se Guild eller arbejdsområde.| Hvad | Ændringen |
|---|---|
| Typer af fællesskab | Hvert fællesskab får en type, Guild eller Arbejdsområde: værdien af Type af nye fællesskaber (TeamSettings.DefaultCommunityKind) ved første opstart. En allerede angivet type bevares. Administratorer for fællesskaber kan ændre deres fællesskabs type bagefter under Teamindstillinger › Generelt. |
| Hvem arkiverer kanaler | Kanalmedlemmer arkiverer ikke længere de kanaler, de er i; det gør administratorer for fællesskaber. I et arbejdsområde kan kanalens administratorer (den, der oprettede den, og dem, de har gjort til administratorer) også arkivere den. Dette ændrer rollerne i systemskemaet; de tilladelsesskemaer, som en systemadministrator har oprettet for visse fællesskaber, lades være, som de er. |
| Rollen Moderatorer i layoutforudindstillingerne | Rollen Moderatorer, som teams har fået fra en layoutforudindstilling, får Fjern personer, som er nødvendigt for at udelukke og fjerne personer. Kun roller, der stadig er præcis som forudindstillingen oprettede dem, ændres; en rolle, som nogen har redigeret, forbliver uændret. |
| Roller med Administrator | En teamrolle med Administrator-indstillingen aktiveret indeholder nu alt det, som teamets administratorer kan gøre, som indstillingen angiver, og ikke kun teamets indstillinger. |
| Begrænsning for medlemmer | Maks. medlemmer pr. team (TeamSettings.MaxUsersPerTeam) ændres fra 50, den gamle standardværdi, til 0 (ingen begrænsning). Eventuelle andre værdier bevares, ligesom en begrænsning, der er sat med AM_TEAMSETTINGS_MAXUSERSPERTEAM. |
| Modelforbindelser | Systemadministratorer får styring af modelforbindelser, og teamadministratorer (og roller med Administrator) får styring af deres teams egne. AI-tjenesterne i Agents-appen bliver serveromfattende modelforbindelser, se nedenfor. |
| Town Square bliver General | Hver teams standardkanal omdøbes fra town-square (Town Square) til general (General). Den beholder sin ID, medlemmer, beskeder og indstillinger, samt et visningsnavn, som administratorer har valgt. Gamle links og opslag med town-square fører stadig til den. Et team, der allerede har en kanal med navnet general, også hvis den er arkiveret, beholder sin town-square som standardkanal, ligesom et team, hvis town-square er arkiveret: Loggen nævner dem, og deres administratorer kan omdøbe kanalerne. |
| Favoritter | Alle brugeres sidebjælkekategori Favorites omdøbes til Favourites, da grænsefladen nu viser det. Kategorier, som brugere har oprettet med det navn, forbliver uændrede. |
Agents-appens tjenester
Opgraderingen kopierer hver AI-tjeneste fra Agents-appen til en serverdækkende modelforbindelse, som deles med alle fællesskaber og kan bruges af alle undtagen gæster (aktiver Gæster også for at give dem adgang). Nøglerne krypteres undervejs, så serveren skal bruge sin AI-krypteringsnøgle: på en klynge, hvor filerne er i S3, skal du angive AM_AI_ENCRYPTION_KEY først, ellers venter kopieringen til næste opstart. Tjek derefter Systemkonsol › AI › Modelforbindelser:
- Hver forbindelse beholder ID'et for sin tjeneste, så appens agenter og en automatisk oversættelse, der er sat til en Agents-tjeneste, stadig kan finde den.
- OpenAI-, OpenAI-kompatible, Anthropic-, Mistral-, Cohere- og Gemini-tjenester bliver til forbindelser til deres OpenAI-kompatible (eller Anthropic) endepunkt. En Azure-tjeneste bliver til en forbindelse til ressourcens OpenAI-kompatible endepunkt: test den.
- AWS Bedrock-, Google Vertex AI- og Cohere North-tjenester samt ukendte typer markeres som Krav om opmærksomhed med årsagen. Deres cloud-kredentiaaler kopieres ikke: peg dem på leverandørens OpenAI-kompatible endepunkt eller en gateway som LiteLLM, og gem derefter.
- Embedding-tjenesten bliver til Embeddings-modellen for forbindelsen med samme adresse og nøgle, eller en forbindelse i sig selv. Transkriptionstjenesten får
whisper-1-modellen. - Når omskrivning og resuméer endnu ikke har en forbindelse, får de appens standardagents tjeneste og model.
Agenterne i Agents-appen
Efter tjenesterne omdanner opgraderingen hver agent i Agents-appen (nu AI-chat-appen) til en serverdækkende agent på den samme konto: dens forbindelse (den, der blev kopieret fra dens tjeneste), model, instruktioner, ræsonnement, værktøjsrundeh og hvem der må bruge den. Serveren besvarer derefter disse agenter. Hvis appen begrænsede en agent på en måde, som serverens agenter ikke udtrykker (de kanaler, hvor den svarede, bloklister, attributbaseret adgang), indsnævres agenten til medlemmerne af disse kanaler, eller til ingen, og markeres som kræver opmærksomhed, ligesom en agent, hvis tjeneste ikke blev til en forbindelse. Tjek dem under Systemkonsol › AI › Modelforbindelser. Appens øvrige indstillinger lades være, som de var.
Andre ændringer af standardindstillinger
- Opkald: Testtilstand er slukket, og Aktivér video er tændt som standard. Et valg, der er gemt i konfigurationen, bevares. Opkald følger også fællesskabets type (se Opkald og lyd).
- At fastgøre beskeder er for kanalens administratorer, fællesskabets administratorer og moderatorer (med Administrer beskeder); medlemmer af en direkte eller gruppebesked kan stadig.
- Arkiverede kanaler kan få nye medlemmer, der læser deres historik. Ingen poster, reagerer eller ændrer noget i dem.
Flytning fra Mattermost
Antimatter bruger Mattermosts databasemodel og tilføjer sine egne tabeller, så det kan overtage en Mattermost-servers PostgreSQL-database og filer. Prøv det først på en kopi:
- Tag backup af Mattermost-databasen, dens filopbevaring (
data/eller S3-bucket) ogconfig.json, og stop derefter Mattermost. - Gendan databasen i Antimatters PostgreSQL, eller peger Antimatter på en kopi af den (
AM_SQLSETTINGS_DATASOURCE). - Kopiér filerne til Antimatters opbevaring, mens du bevarer deres stier: til
antimatter-bucketen med et S3-værktøj, eller tildata/med et release-arkiv. - Genbrug dine indstillinger: kopiér
config.json, eller flyt den til databasen medamctl --local config migrate(se Indstillinger). DineMM_-miljøvariabler fortsætter med at fungere; omdøb dem tilAM_, når det passer. - Start Antimatter, og følg loggen, mens den opgraderer databasen. Tjek derefter Systemkonsol › Plugins › Plugin-håndtering. Antimatter installerer sine egne builds af Calls, AI chat og integrationerne, når de er nyere end den installerede version, samt af Playbooks og Kanban (Boards), hvis Mattermost-serveren allerede havde en af dem installeret (ingen af dem er længere bundtet på en ny server: se Bundled apps). Hvis Mattermost havde en nyere version af en af dem, skal du fjerne den app og genstarte Antimatter, så dens egen build bliver installeret.
- Opsæt push-notifikationer igen med din egen push-proxy: Antimatter sender aldrig notifikationer til Mattermosts push-tjenester, uanset om de er test- eller hostede, da de kun leveres til Mattermosts egne apps. Indtil du ændrer Push-notifikationsserver, sender serveren ingen push-notifikationer (se Push-notifikationer).
Antimatter kontakter ingen tjenester drevet af Mattermost, Inc. (se Forbindelser til eksterne tjenester), selvom din konfiguration stadig nævner én:
- en push-notifikationsserver hos Mattermost opbevares i indstillingerne, men bruges aldrig;
- Mattermosts adresser til app-markedet (Marketplace-URL) og til produktmeddelelser er tomme;
- downloadlinks til apps, der var Mattermosts standardværdier (Antimatter Apps Download Page Link, Android-app downloadlink og iOS-app downloadlink), er erstattet af downloadsiderne for Antimatters apps på GitHub; links, du har sat selv, beholdes;
- Calls-appen bruger Cloudflares offentlige STUN-server i stedet for Mattermosts, uden at ændre den gemte indstilling (se Calls);
- sikkerhedsopdateringskontrol og crashrapportering er fjernet, og deres Systemkonsol-indstillinger (Enable Security Alerts, Enable Diagnostics and Error Reporting) samt Meddelelser-siden er også fjernet.
Sokkelen for lokal tilstand er nu /var/tmp/antimatter_local.socket; amctl forsøger også den gamle /var/tmp/mattermost_local.socket. Mattermost understøtter kun PostgreSQL i sine nyere versioner, og det samme gør Antimatter: flyt en MySQL-database til PostgreSQL først. At vende tilbage til Mattermost, efter at Antimatter har opgraderet databasen, betyder, at du skal gendanne dit Mattermost-backup.
Eksportér og importér data
Formatet for masseeksport flytter data mellem servere: hele serveren, nogle fællesskaber eller nogle kanaler, med vedhæftninger, profilbilleder og brugerdefinerede emoji, hvis du ønsker det.
# 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
Følg jobbene med amctl export job list og amctl import job list. For en eksport af et community eller en kanal er --imported-users påkrævet: active, når personerne flyttes til denne server, og inactive, når der importeres til en server, hvor de allerede har konti, så konti oprettet fra usikre match forbliver deaktiveret, indtil en administrator har kontrolleret dem. --destination-team-name importerer til et eksisterende community. Eksport- og importfiler opbevares på serverens lager (ExportSettings.Directory, ImportSettings.Directory) i 30 dage som standard.
På selve serveren udfører antimatter export bulk og antimatter import bulk --apply det samme fra filer, uden at bruge API'et.
En kanals linje i eksporten indeholder dens type og indstillinger (am_type, am_mode, am_root_posts og, for fora, am_forum_view); en linje uden disse importeres som en almindelig tekstbaseret Chat-kanal. En linje for et rodopslag i en forumkanal kræver props.am_thread_title, som er titlen på dens emne; uden en titel fejler importen på den linje.