Backup e aggiornamenti

Cosa fare in backup, come ripristinarlo su un nuovo host, come aggiornare e come migrare un server Mattermost o una singola community ad Antimatter.

Cosa fare in backup

ElementoCon il file compose del sitoCon un archivio di rilascioCon il pacchetto .deb o .rpm
Il database: messaggi, utenti, community, canali e, con il file compose del sito, la configurazionevolume antimatter_postgres, tramite pg_dumpil tuo database PostgreSQLil tuo database PostgreSQL
File caricati, immagini e app installatevolume antimatter_files (lo storage S3)FileSettings.Directory, di default ./data//var/lib/antimatter
Il file di configurazione(nel database)config/config.json/etc/antimatter/config/config.json
GIF e stickervolume antimatter_gifsla directory dati del servizio GIF/var/lib/gifs-server
Segreti.env (e compose.override.yaml)il tuo file di ambiente/etc/antimatter/antimatter.env, /etc/gifs-server
La chiave di crittografia AI, che crittografa le chiavi delle connessioni ai modelliAM_AI_ENCRYPTION_KEY in .env (consigliato), oppure il file ai-encryption.key nel volume antimatter_dataAM_AI_ENCRYPTION_KEY, oppure data/ai-encryption.keyAM_AI_ENCRYPTION_KEY in antimatter.env, oppure /var/lib/antimatter/data/ai-encryption.key

Senza la chiave di crittografia AI, un server ripristinato non può leggere le chiavi API delle sue connessioni ai modelli e ciascuna di esse deve essere inserita di nuovo. Conserva una copia della chiave separatamente dai backup del database, in modo che un backup rubato non contenga entrambe. Consulta La chiave di crittografia.

Il database e i file vanno insieme: esegui il backup di entrambi nello stesso momento e conserva copie fuori dal server. I nomi dei volumi iniziano con il nome del progetto compose, antimatter (docker volume ls li elenca).

Backup

Dalla directory di compose.yaml. Arrestare Antimatter prima garantisce una copia completamente coerente; un backup eseguito durante il funzionamento è generalmente accettabile, ma i file caricati durante il backup potrebbero non esservi inclusi.

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"

Se non hai impostato AM_AI_ENCRYPTION_KEY, il file della chiave del server si trova nel volume data, che il ciclo precedente salva insieme agli altri file. Meglio, metti il suo contenuto in .env come spiegato in La chiave di crittografia, e conservane una copia separatamente dai backup del database.

Eseguilo da cron per backup giornalieri e copia la directory backups/ su un altro computer. Conserva le copie di .env con la stessa sicurezza del server: contengono le sue password.

Per copiare i file caricati oggetto per oggetto (ad esempio su un altro storage S3), usa il tool da riga di comando AWS del servizio bucket:

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

Con un archivio di rilascio, esegui il backup del database con pg_dump -Fc, e delle directory data/ e config/ con i tuoi strumenti abituali (data/ contiene il file della chiave AI). Con i pacchetti, esegui il backup del database nello stesso modo, e di /etc/antimatter, /var/lib/antimatter, /etc/gifs-server e /var/lib/gifs-server.

Ripristino su un nuovo host

Posiziona compose.yaml, il .env salvato e i backup in una nuova directory, poi:

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

Usa lo stesso .env: lo storage e il database devono mantenere le password che avevano, e le connessioni ai modelli necessitano della stessa chiave di crittografia AI. Se l'host nuovo ha un indirizzo diverso, aggiorna SITE_URL (e DOMAIN).

Testa i tuoi backup ripristinandoli periodicamente su un altro computer.

Aggiornamento

I file Compose scaricati prima del 17 ottobre 2026 non avevano un volume data: il file della chiave AI era nel contenitore. Prima di usare il nuovo compose.yaml, e se .env non ha AM_AI_ENCRYPTION_KEY, salva la chiave creata dal server: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Se il comando non trova il file, nessuna connessione al modello ha ancora salvato una chiave.
  1. Esegui un backup.
  2. Modifica il tag dell'immagine in .env (ANTIMATTER_IMAGE), se ne fissi uno, come raccomandato.
  3. Scarica e riavvia:
    docker compose pull
    docker compose up -d
    docker compose logs -f antimatter

All'avvio, il server aggiorna lo schema del database (è possibile seguirne il progresso nei log; per un server di grandi dimensioni l'operazione può richiedere diversi minuti) e installa le versioni più recenti delle app incluse nell'immagine. In caso di archivio di rilascio: arrestare il server, sostituire tutto tranne config/, data/, logs/, plugins/ e client/plugins/ con il contenuto del nuovo archivio, quindi riavviarlo. In caso di pacchetto .deb o .rpm, installare il nuovo pacchetto come spiegato in Aggiornamento di un pacchetto.

Gli aggiornamenti avvengono solo in avanti. Una volta che un server più recente ha aggiornato il database, una versione precedente non può più utilizzarlo: per tornare indietro, ripristina il backup effettuato prima dell'aggiornamento. Lo stesso vale per il passaggio da antimatter-next a antimatter.

Versioni

Il server di Antimatter riporta la versione della linea Mattermost su cui si basa (attualmente 12.0.0). I rilasci su GitHub, con i relativi archivi e pacchetti, hanno i propri numeri di versione, nella serie 0.9.0 durante la fase beta: antimatter version lo mostra come Numero di compilazione. Le immagini vengono ricostruite dai rami main: antimatter-next ogni notte (tag nightly-<YYYYMMDD>) e entrambe le immagini a ogni modifica (tag sha-<commit>). Fissare uno di questi tag, aggiornare intenzionalmente e annotare il tag precedente per sapere a quale backup corrisponde.

Versioni principali di PostgreSQL

Il file compose utilizza postgres:17-alpine. Antimatter richiede PostgreSQL 15 o versioni successive. Una nuova versione principale di PostgreSQL non può leggere la directory dati della versione precedente: per passare a una nuova versione, esegui un dump del database, avvia la nuova versione su un nuovo volume e ripristina il dump in essa.

Aggiornamento alla versione 0.9.0

Il primo avvio della versione 0.9.0 (o di un'immagine costruita a partire dal 17 ottobre 2026) apporta alcune modifiche una tantum ai dati. Ogni modifica viene eseguita una sola volta e viene registrata nel database. Queste modifiche portano i valori rimasti impostati su un'impostazione predefinita obsoleta al nuovo valore predefinito, lasciando invariati quelli scelti da un amministratore. È possibile seguirne il progresso nei log.

Se Antimatter è destinato a un'azienda o a un'organizzazione, impostare Tipo di nuove comunità su Ambiente di lavoro prima dell'aggiornamento: AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. L'aggiornamento assegna a ogni comunità il tipo impostato in questo momento e le chiamate sono disabilitate di default nei canali delle comunità di tipo Comunità. Vedere Ambiente di lavoro o comunità.
ElementoLa modifica
Tipi di comunitàOgni comunità riceve un tipo, Comunità o Ambiente di lavoro: il valore di Tipo di nuove comunità (TeamSettings.DefaultCommunityKind) al primo avvio. Un tipo già impostato viene mantenuto. Gli amministratori della comunità possono successivamente modificare il tipo della propria comunità in Impostazioni del team › Canali › Tipo di comunità.
Chi archivia i canaliI membri dei canali non archiviano più i canali in cui sono presenti: lo fanno gli amministratori della community. In un'area di lavoro, lo fanno anche gli amministratori del canale (chi lo ha creato e chi ha promosso ad amministratore). Questa modifica cambia i ruoli dello schema di sistema; gli schemi di autorizzazione creati da un amministratore di sistema per alcune community restano invariati.
Il ruolo Moderatori dei preset di layoutIl ruolo Moderatori che le community hanno ottenuto da un preset di layout riceve Rimuovi persone, necessario per sospendere e rimuovere gli utenti. Vengono modificati solo i ruoli che restano esattamente come li ha creati il preset; un ruolo modificato da qualcuno viene lasciato invariato.
Ruoli con AmministratoreUn ruolo di community con l'interruttore Amministratore attivo ora possiede tutte le capacità degli amministratori della community, come indicato dall'interruttore, e non solo le impostazioni della community.
Il limite di membriNumero massimo di membri per community (TeamSettings.MaxUsersPerTeam) passa da 50, il valore predefinito precedente, a 0 (nessun limite). Qualsiasi altro valore viene mantenuto, così come un limite impostato con AM_TEAMSETTINGS_MAXUSERSPERTEAM.
Connessioni ai modelliGli amministratori di sistema ottengono la gestione delle connessioni ai modelli, mentre gli amministratori di community (e i ruoli con Amministratore) gestiscono quelle della propria community. I servizi AI dell'app Agenti diventano connessioni ai modelli a livello di server, come illustrato di seguito.
Town Square diventa GeneralIl canale predefinito di ogni community viene rinominato da town-square (Town Square) a general (General). Mantiene il proprio ID, i membri, i messaggi e le impostazioni, nonché il nome visualizzato scelto dagli amministratori. I vecchi collegamenti e le ricerche tramite town-square continuano a portarvi. Una community che ha già un canale denominato general, anche se archiviato, mantiene town-square come canale predefinito, così come una community il cui town-square è archiviato: il log li elenca e i loro amministratori possono rinominare i canali.
PreferitiLa categoria della barra laterale Preferiti di tutti viene rinominata in Preferiti, come ora indicato dall'interfaccia. Le categorie create dagli utenti con quel nome vengono lasciate invariate.

I servizi dell'app Agenti

L'aggiornamento copia ogni servizio AI dell'app Agents in una connessione al modello a livello di server, condivisa con tutte le community e utilizzabile da tutti tranne gli ospiti (attiva Anche gli ospiti per consentirlo). Le chiavi vengono crittografate durante il trasferimento, quindi il server necessita della chiave di crittografia AI: in un cluster i cui file sono in S3, impostare prima AM_AI_ENCRYPTION_KEY, altrimenti la copia attende l'avvio successivo. Quindi verificare in Console di Sistema › AI › Connessioni ai modelli:

  • Ogni connessione mantiene l'ID del proprio servizio, in modo che gli agenti dell'app e un'impostazione di traduzione automatica collegata a un servizio Agents possano ancora trovarlo.
  • I servizi OpenAI, compatibili con OpenAI, Anthropic, Mistral, Cohere e Gemini diventano connessioni al loro endpoint compatibile con OpenAI (o Anthropic). Un servizio Azure diventa una connessione all'endpoint compatibile con OpenAI della risorsa: testalo.
  • I servizi AWS Bedrock, Google Vertex AI e Cohere North, nonché i tipi sconosciuti, vengono contrassegnati come Richiedono attenzione, con il relativo motivo. Le credenziali cloud non vengono copiate: indirizzali verso l'endpoint compatibile con OpenAI del provider o verso un gateway come LiteLLM, quindi salva.
  • Il servizio di embedding diventa il modello Embeddings della connessione con lo stesso indirizzo e la stessa chiave, oppure una connessione dedicata. Il servizio di trascrizione ottiene il modello whisper-1.
  • Quando la riscrittura e i riepiloghi non hanno ancora una connessione, ottengono il servizio e il modello dell'agente predefinito dell'app.

Le impostazioni e i dati propri dell'app Agents restano invariati: i suoi agenti continuano a utilizzare i suoi servizi.

Altre modifiche alle impostazioni predefinite

  • Chiamate: la Modalità di prova è disattivata e Abilita video è attivata per impostazione predefinita. Una scelta salvata nella configurazione viene mantenuta. Le chiamate seguono anche il tipo di community (vedi Chiamate e voce).
  • Il fissaggio dei messaggi in cima è riservato agli amministratori del canale, agli amministratori e ai moderatori della community (con Gestisci messaggi); i membri di un messaggio diretto o di gruppo possono ancora farlo.
  • I canali archiviati possono accogliere nuovi membri, che possono leggerne lo storico. Nessuno può pubblicare, reagire o modificarne il contenuto.

Passaggio da Mattermost

Antimatter utilizza lo schema del database di Mattermost e aggiunge le proprie tabelle, quindi può assumere il controllo del database PostgreSQL e dei file di un server Mattermost. Provalo prima su una copia:

  1. Effettua un backup del database Mattermost, del suo archivio file (data/ o bucket S3) e di config.json, quindi arresta Mattermost.
  2. Ripristina il database nel PostgreSQL di Antimatter, oppure punta Antimatter a una copia di esso (AM_SQLSETTINGS_DATASOURCE).
  3. Copia i file nell'archivio di Antimatter, mantenendone i percorsi: nel bucket antimatter con uno strumento S3, oppure in data/ con un archivio di rilascio.
  4. Riutilizza le tue impostazioni: copia config.json oppure spostalo nel database con amctl --local config migrate (vedi Configurazione). Le tue variabili di ambiente MM_ continuano a funzionare; rinominali in AM_ quando è opportuno.
  5. Avvia Antimatter e monitora il log durante l'aggiornamento del database. Successivamente, controlla Console di Sistema › Plugins › Gestione plugin. Antimatter installa le proprie versioni di Calls, Playbooks, Kanban (Boards), Agents e delle integrazioni quando sono più recenti rispetto alla versione installata. Se Mattermost disponeva di una versione più recente di uno di questi elementi, rimuovi quell'app e riavvia Antimatter, in modo che venga installata la sua versione.
  6. Configura nuovamente le notifiche push, utilizzando il tuo proxy push: Antimatter non invia mai notifiche ai servizi push di Mattermost, sia di test che gestiti, che consegnano solo alle app di Mattermost. Finché non modifichi Server notifiche push, il server non invia notifiche push (vedi Notifiche push).

Antimatter non contatta alcun servizio gestito da Mattermost, Inc. (vedi Connessioni a servizi esterni), anche se la tua configurazione ne indica ancora uno:

  • un server di notifiche push presso Mattermost è mantenuto nelle impostazioni ma non viene mai utilizzato;
  • gli indirizzi di Mattermost per il marketplace delle app (URL marketplace) e per gli avvisi di prodotto vengono svuotati;
  • i collegamenti per il download delle app che erano i predefiniti di Mattermost (Antimatter Apps Download Page Link, Collegamento per scaricare l'app Android e Collegamento per scaricare l'app iOS) vengono sostituiti dalle pagine di download delle app di Antimatter su GitHub; i collegamenti impostati manualmente vengono mantenuti;
  • l'app Calls utilizza il server STUN pubblico di Cloudflare invece di quello di Mattermost, senza modificare l'impostazione salvata (vedi Calls);
  • la verifica degli aggiornamenti di sicurezza e la segnalazione dei crash sono stati rimossi, insieme alle relative impostazioni della Console di Sistema (Attiva avvisi di sicurezza, Attiva diagnostica e segnalazione errori) e alla pagina Avvisi.

Il socket della modalità locale è ora /var/tmp/antimatter_local.socket; amctl tenta anche il vecchio /var/tmp/mattermost_local.socket. Mattermost supporta solo PostgreSQL nelle sue versioni recenti, e lo stesso vale per Antimatter: sposta prima un database MySQL su PostgreSQL. Tornare a Mattermost dopo che Antimatter ha aggiornato il database significa ripristinare il tuo backup di Mattermost.

Esporta e importa dati

Il formato di esportazione in blocco sposta i dati tra i server: l'intero server, alcune community o alcuni canali, con allegati, foto del profilo ed emoji personalizzate, se lo desideri.

# 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

Monitora i lavori con amctl export job list e amctl import job list. Per un'export di una community o di un canale, è obbligatorio specificare --imported-users: active se le persone si trasferiscono a questo server, inactive se l'import viene effettuato in un server in cui hanno già un account, in modo che gli account creati da corrispondenze incerte restino disattivati finché un amministratore non li verifica. --destination-team-name importa in una community esistente. Le esportazioni e le importazioni vengono conservate nello storage del server (ExportSettings.Directory, ImportSettings.Directory) per 30 giorni di default.

Sul server stesso, antimatter export bulk e antimatter import bulk --apply eseguono le stesse operazioni da file, senza l'API.