Backups e atualizações
O que fazer backup, como restaurá-lo em um novo host, como atualizar e como migrar um servidor Mattermost ou uma única comunidade para o Antimatter.
O que fazer backup
| O quê | Com o arquivo compose do site | Com um arquivo de release | Com o pacote .deb ou .rpm |
|---|---|---|---|
| O banco de dados: mensagens, usuários, comunidades, canais e, com o arquivo compose do site, a configuração | volume antimatter_postgres, por meio de pg_dump | seu banco de dados PostgreSQL | seu banco de dados PostgreSQL |
| Arquivos enviados, imagens e aplicativos instalados | volume antimatter_files (o armazenamento S3) | FileSettings.Directory, ./data/ por padrão | /var/lib/antimatter |
| O arquivo de configuração | (no banco de dados) | config/config.json | /etc/antimatter/config/config.json |
| GIFs e figurinhas | volume antimatter_gifs | o diretório de dados do serviço de GIFs | /var/lib/gifs-server |
| Segredos | .env (e compose.override.yaml) | seu arquivo de ambiente | /etc/antimatter/antimatter.env, /etc/gifs-server |
| A chave de criptografia de IA, que criptografa as chaves das conexões de modelos | AM_AI_ENCRYPTION_KEY em .env (recomendado), ou o arquivo ai-encryption.key no volume antimatter_data | AM_AI_ENCRYPTION_KEY, ou data/ai-encryption.key | AM_AI_ENCRYPTION_KEY em antimatter.env, ou /var/lib/antimatter/data/ai-encryption.key |
Sem a chave de criptografia de IA, um servidor restaurado não consegue ler as chaves de API das suas conexões de modelos, e cada uma delas precisa ser digitada novamente. Mantenha uma cópia da chave separada dos backups do banco de dados, para que um backup roubado não contenha ambos. Veja A chave de criptografia.
O banco de dados e os arquivos pertencem juntos: faça backup deles ao mesmo tempo e mantenha cópias fora do servidor. Os nomes dos volumes começam com o nome do projeto compose, antimatter (docker volume ls lista-os).
Fazer backup
A partir do diretório de compose.yaml. Parar o Antimatter primeiro garante uma cópia totalmente consistente; um backup feito enquanto ele está em execução geralmente é suficiente, mas os arquivos enviados durante o backup podem estar ausentes dele.
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 você não configurou AM_AI_ENCRYPTION_KEY, o arquivo de chave do servidor está no volume data, que o loop acima salva com os arquivos. Melhor, coloque seu conteúdo em .env como A chave de criptografia explica, e mantenha uma cópia dele separada dos backups do banco de dados.
Execute-o via cron para backups diários e copie o diretório backups/ para outra máquina. Mantenha as cópias de .env tão seguras quanto o servidor: elas contêm suas senhas.
Para copiar os arquivos enviados objeto por objeto (por exemplo, para outro armazenamento S3), use a ferramenta de linha de comando da AWS do serviço bucket:
docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
"aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"
Com um arquivo de versão, faça o backup do banco de dados com pg_dump -Fc, e dos diretórios data/ e config/ com suas ferramentas habituais (data/ contém o arquivo de chave de IA). Com os pacotes, faça o backup do banco de dados da mesma forma, e de /etc/antimatter, /var/lib/antimatter, /etc/gifs-server e /var/lib/gifs-server.
Restaurar em um novo host
Coloque compose.yaml, o .env salvo e os backups em um novo diretório, então:
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
Use o mesmo .env: o armazenamento e o banco de dados devem manter as senhas que tinham, e as conexões de modelos precisam da mesma chave de criptografia de IA. Se o novo host tiver outro endereço, atualize SITE_URL (e DOMAIN).
Teste seus backups restaurando-os em outra máquina de tempos em tempos.
Atualizar
data: o arquivo de chave de IA estava no contêiner. Antes de usar o novo compose.yaml, e se .env não tiver AM_AI_ENCRYPTION_KEY, salve a chave que o servidor criou: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Se o comando não encontrar o arquivo, nenhuma conexão de modelo salvou uma chave ainda.- Faça um backup.
- Altere a tag da imagem em
.env(ANTIMATTER_IMAGE), se você fixar uma, como recomendado. - Baixe e reinicie:
docker compose pull docker compose up -d docker compose logs -f antimatter
Na inicialização, o servidor atualiza o esquema do banco de dados (acompanhe no log; um servidor grande pode levar vários minutos) e instala as versões mais recentes dos aplicativos incluídos na imagem. Com um arquivo de liberação: pare o servidor, substitua tudo, exceto config/, data/, logs/, plugins/ e client/plugins/, pelo conteúdo do novo arquivo e inicie-o novamente. Com o pacote .deb ou .rpm, instale o novo pacote conforme explicado em Atualizar um pacote.
antimatter-next de volta para antimatter.Versões
O servidor do Antimatter relata a versão da linha Mattermost em que se baseia (atualmente 12.0.0). As liberações no GitHub, com seus arquivos e pacotes, têm seus próprios números de versão, na série 0.9.0 durante o beta: antimatter version o exibe como Número de Compilação. As imagens são reconstruídas a partir dos ramos main: antimatter-next todas as noites (tags nightly-<YYYYMMDD>) e ambas as imagens a cada alteração (tags sha-<commit>). Fixe uma dessas tags, atualize intencionalmente e mantenha a tag anterior anotada para saber com qual backup ela corresponde.
Versões principais do PostgreSQL
O arquivo compose usa postgres:17-alpine. O Antimatter requer PostgreSQL 15 ou mais recente. Uma nova versão principal do PostgreSQL não consegue ler o diretório de dados da versão anterior: para migrar, faça um despejo (dump) do banco de dados, inicie a nova versão em um novo volume e restaure o despejo nele.
Atualização para a 0.9.0
A primeira inicialização da versão 0.9.0 (ou de uma imagem construída a partir de 17 de outubro de 2026) faz algumas alterações únicas nos dados. Cada uma é executada uma vez e registrada no banco de dados. Elas trazem o que ficou com um padrão antigo para o novo e deixam intacto o que um administrador escolheu. Acompanhe-as no log.
AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. A atualização atribui a cada comunidade o tipo que esta configuração possui naquele momento, e as chamadas ficam desativadas por padrão nos canais de comunidades do tipo Comunidade. Consulte Ambiente de trabalho ou comunidade.| O quê | A alteração |
|---|---|
| Tipos de comunidade | Cada comunidade recebe um tipo, Comunidade ou Ambiente de trabalho: o valor de Tipo de novas comunidades (TeamSettings.DefaultCommunityKind) na primeira inicialização. Um tipo já definido é mantido. Os administradores da comunidade podem alterar o tipo da sua comunidade posteriormente, em Configurações da equipe › Canais › Tipo de comunidade. |
| Quem arquiva canais | Os membros dos canais não arquivam mais os canais nos quais estão: os administradores da comunidade fazem isso. Em um ambiente de trabalho, os administradores do canal (quem o criou e aqueles que foram promovidos a administradores) também o arquivam. Isso altera as funções do esquema do sistema; os esquemas de permissão criados por um administrador do sistema para algumas comunidades permanecem inalterados. |
| A função Moderadores dos modelos de layout | A função Moderadores que as comunidades obtiveram de um modelo de layout recebe Remover pessoas, o que é necessário para suspender e remover usuários. Apenas as funções que permanecem exatamente como o modelo as criou são alteradas; uma função editada por alguém permanece intacta. |
| Funções com Administrador | Uma função de comunidade com a opção Administrador ativada agora possui todas as capacidades que os administradores da comunidade podem executar, conforme indicado pela opção, e não apenas as configurações da comunidade. |
| O limite de membros | Membros máximos por comunidade (TeamSettings.MaxUsersPerTeam) muda de 50, o padrão anterior, para 0 (sem limite). Qualquer outro valor é mantido, assim como um limite definido com AM_TEAMSETTINGS_MAXUSERSPERTEAM. |
| Conexões de modelos | Os administradores do sistema obtêm a gestão das conexões de modelos, e os administradores da comunidade (e funções com Administrador) a gestão das conexões de modelos da própria comunidade. Os serviços de IA do aplicativo Agents se tornam conexões de modelos em nível de servidor, veja abaixo. |
| Town Square se torna General | O canal padrão de cada comunidade é renomeado de town-square (Town Square) para general (General). Ele mantém seu ID, membros, mensagens e configurações, bem como um nome de exibição escolhido pelos administradores. Links antigos e pesquisas por town-square ainda o levam a ele. Uma comunidade que já possui um canal chamado general, mesmo arquivado, mantém seu town-square como canal padrão, assim como uma comunidade cujo town-square está arquivado: o log os nomeia, e seus administradores podem renomear os canais. |
| Favoritos | A categoria de barra lateral Favoritos de todos é renomeada para Favoritos, conforme agora indica a interface. As categorias criadas por pessoas com esse nome permanecem inalteradas. |
Os serviços do aplicativo Agents
A atualização copia cada serviço de IA do aplicativo Agents para uma conexão de modelo em nível de servidor, compartilhada com todas as comunidades e disponível para todos, exceto convidados (ative Também para convidados para permitir o uso por eles). As chaves são criptografadas durante o processo, portanto o servidor precisa da sua chave de criptografia de IA: em um cluster com arquivos no S3, defina primeiro AM_AI_ENCRYPTION_KEY, ou a cópia ficará pendente até a próxima inicialização. Em seguida, verifique em Console do Sistema › IA › Conexões de modelos:
- Cada conexão mantém o ID do seu serviço, de modo que os agentes do aplicativo e uma configuração de tradução automática vinculada a um serviço do Agents continuam a encontrá-lo.
- Serviços do OpenAI, compatíveis com OpenAI, Anthropic, Mistral, Cohere e Gemini se tornam conexões com seus endpoints compatíveis com OpenAI (ou Anthropic). Um serviço do Azure se torna uma conexão com o endpoint compatível com OpenAI do recurso: teste-o.
- Serviços do AWS Bedrock, Google Vertex AI e Cohere North, bem como tipos desconhecidos, são marcados como Requer atenção, com o motivo. As credenciais de nuvem não são copiadas: aponte-os para o endpoint compatível com OpenAI do provedor ou para um gateway como LiteLLM e, em seguida, salve.
- O serviço de incorporação (embedding) se torna o modelo Incorporações da conexão com o mesmo endereço e chave, ou uma conexão própria. O serviço de transcrição recebe o modelo
whisper-1. - Quando a reescrita e os resumos ainda não têm conexão, eles recebem o serviço e o modelo do agente padrão do aplicativo.
As configurações e os dados próprios do aplicativo Agents permanecem como estavam: seus agentes continuam usando seus serviços.
Outras alterações nos padrões
- Chamadas: o Modo de teste está desativado e o Ativar vídeo está ativado por padrão. Uma escolha salva na configuração é mantida. As chamadas também seguem o tipo de comunidade (veja Chamadas e voz).
- Fixar mensagens no topo é permitido para administradores do canal, administradores e moderadores da comunidade (com Gerenciar mensagens); membros de uma mensagem direta ou de grupo ainda podem fazê-lo.
- Canais arquivados podem receber novos membros, que leem o histórico. Ninguém publica, reage ou altera nada neles.
Migração do Mattermost
O Antimatter usa o esquema de banco de dados do Mattermost e adiciona suas próprias tabelas, podendo assim assumir o banco de dados PostgreSQL e os arquivos de um servidor Mattermost. Tente primeiro em uma cópia:
- Faça backup do banco de dados do Mattermost, do armazenamento de arquivos (
data/ou bucket S3) e doconfig.json, e então pare o Mattermost. - Restaure o banco de dados no PostgreSQL do Antimatter, ou aponte o Antimatter para uma cópia dele (
AM_SQLSETTINGS_DATASOURCE). - Copie os arquivos para o armazenamento do Antimatter, mantendo seus caminhos: para o bucket
antimattercom uma ferramenta S3, ou paradata/com um arquivo de release. - Reutilize suas configurações: copie o
config.jsonou mova-o para o banco de dados comamctl --local config migrate(veja Configurações). Suas variáveis de ambienteMM_continuam funcionando; renomeie-as paraAM_quando for conveniente. - Inicie o Antimatter e acompanhe o log enquanto ele atualiza o banco de dados. Em seguida, verifique Console do Sistema › Plugins › Gerenciamento de Plugins. O Antimatter instala suas próprias versões de Chamadas, Playbooks, Kanban (Quadros), Agentes e integrações quando estas são mais novas que a versão instalada. Se o Mattermost tiver uma versão mais nova de um deles, remova esse aplicativo e reinicie o Antimatter, para que sua própria versão seja instalada.
- Configure as notificações push novamente, com seu próprio proxy de push: o Antimatter nunca envia notificações para os serviços de push do Mattermost, de teste ou hospedados, que só entregam às aplicações próprias do Mattermost. Até que você altere o Servidor de Notificação Push, o servidor não envia notificações push (veja Notificações push).
O Antimatter não contata nenhum serviço operado pela Mattermost, Inc. (veja Conexões com serviços externos), mesmo quando sua configuração ainda menciona um:
- um servidor de notificação push da Mattermost é mantido nas configurações, mas nunca é usado;
- os endereços da Mattermost para o marketplace de aplicativos (URL do Marketplace) e para avisos de produto são esvaziados;
- os links de download do aplicativo que eram os padrões do Mattermost (Link para a página de download de aplicativos Antimatter, Link para download do aplicativo Android e Link para download do aplicativo para iOS) são substituídos pelas páginas de download dos aplicativos do Antimatter no GitHub; links definidos por você são mantidos;
- o aplicativo de Chamadas usa o servidor STUN público da Cloudflare em vez do da Mattermost, sem alterar a configuração salva (veja Chamadas);
- a verificação de atualizações de segurança e o relatório de falhas foram removidos, assim como suas configurações no Console do Sistema (Ativar Alertas de Segurança, Ativar Diagnóstico e Relatório de Erros) e a página Avisos.
O socket do modo local agora é /var/tmp/antimatter_local.socket; o amctl também tenta o antigo /var/tmp/mattermost_local.socket. O Mattermost só suporta PostgreSQL em suas versões recentes, e o Antimatter também: primeiro, migre um banco de dados MySQL para PostgreSQL. Voltar ao Mattermost após o Antimatter ter atualizado o banco de dados significa restaurar seu backup do Mattermost.
Exportar e importar dados
O formato de exportação em lote move dados entre servidores: o servidor inteiro, algumas comunidades ou alguns canais, com anexos, fotos de perfil e emojis personalizados, se você quiser.
# 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
Acompanhe as tarefas com amctl export job list e amctl import job list. Para uma exportação de comunidade ou canal, --imported-users é obrigatório: active quando as pessoas se mudam para este servidor, inactive quando importando para um servidor onde elas já têm contas, para que as contas criadas a partir de correspondências incertas permaneçam desativadas até que um administrador as verifique. --destination-team-name importa para uma comunidade existente. As exportações e importações são mantidas no armazenamento do servidor (ExportSettings.Directory, ImportSettings.Directory) por 30 dias por padrão.
No próprio servidor, antimatter export bulk e antimatter import bulk --apply fazem o mesmo a partir de arquivos, sem a API.