Cópias de segurança e atualizações

O que fazer em cópia de segurança, como o restaurar num novo host, como atualizar e como migrar um servidor Mattermost ou uma única comunidade para o Antimatter.

O que fazer em cópia de segurança

O quêCom o ficheiro compose do siteCom um arquivo de libertaçãoCom o pacote .deb ou .rpm
A base de dados: mensagens, utilizadores, comunidades, canais e, com o ficheiro compose do site, a configuraçãovolume antimatter_postgres, através de pg_dumpa sua base de dados PostgreSQLa sua base de dados PostgreSQL
Ficheiros, imagens e aplicações instaladas enviadosvolume antimatter_files (o armazenamento S3)FileSettings.Directory, por omissão ./data//var/lib/antimatter
O ficheiro de configuração(na base de dados)config/config.json/etc/antimatter/config/config.json
GIFs e figurinhasvolume antimatter_gifso diretório de dados do serviço de GIFs/var/lib/gifs-server
Segredos.env (e compose.override.yaml)o seu ficheiro de ambiente/etc/antimatter/antimatter.env, /etc/gifs-server
A chave de criptografia de IA, que cifra as chaves das ligações aos modelosAM_AI_ENCRYPTION_KEY em .env (recomendado), ou o ficheiro ai-encryption.key no volume antimatter_dataAM_AI_ENCRYPTION_KEY, ou data/ai-encryption.keyAM_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 ligações aos modelos, e cada uma tem de ser introduzida novamente. Mantenha uma cópia da chave separada dos backups da base de dados, para que um backup roubado não contenha ambas. Consulte A chave de criptografia.

A base de dados e os ficheiros pertencem juntos: faça cópias de segurança 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 cópia de segurança

A partir do diretório de compose.yaml. Parar o Antimatter primeiro dá uma cópia totalmente consistente; uma cópia de segurança feita enquanto ele está a executar é geralmente suficiente, mas os ficheiros enviados durante a cópia de segurança podem estar ausentes dela.

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 não definiu AM_AI_ENCRYPTION_KEY, o ficheiro de chave do servidor está no volume data, que o ciclo acima guarda com os ficheiros. Melhor, coloque o seu conteúdo em .env, como A chave de criptografia explica, e mantenha uma cópia separada dos backups da base de dados.

Execute-a a partir do cron para cópias de segurança diárias e copie o diretório backups/ para outra máquina. Mantenha as cópias de .env tão seguras como o servidor: contêm as suas palavras-passe.

Para copiar os ficheiros enviados objeto a objeto (por exemplo, para outro armazenamento S3), utilize a ferramenta de linha de comandos 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 lançamento, faça backup da base de dados com pg_dump -Fc, e dos diretórios data/ e config/ com as suas ferramentas habituais (data/ contém o ficheiro da chave de IA). Com os pacotes, faça backup da base de dados da mesma forma, e de /etc/antimatter, /var/lib/antimatter, /etc/gifs-server e /var/lib/gifs-server.

Restaurar num novo host

Coloque compose.yaml, o .env guardado e as cópias de segurança num novo diretório, depois:

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 a base de dados devem manter as palavras-passe que tinham, e as ligações aos modelos precisam da mesma chave de criptografia de IA. Se o novo anfitrião tiver outro endereço, atualize SITE_URL (e DOMAIN).

Teste as suas cópias de segurança, restaurando-as de vez em quando, noutra máquina.

Atualizar

Os ficheiros Compose descarregados antes de 17 de outubro de 2026 não tinham um volume data: o ficheiro da chave de IA estava no contentor. Antes de usar o novo compose.yaml, e se .env não tiver AM_AI_ENCRYPTION_KEY, guarde 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 ficheiro, nenhuma ligação ao modelo guardou ainda uma chave.
  1. Faça uma cópia de segurança.
  2. Altere a etiqueta da imagem em .env (ANTIMATTER_IMAGE), se fixar uma, como recomendado.
  3. Obtenha e reinicie:
    docker compose pull
    docker compose up -d
    docker compose logs -f antimatter

Na arrancagem, o servidor atualiza o esquema da base de dados (pode acompanhá-lo no registo; num servidor grande, o processo pode demorar vários minutos) e instala as versões mais recentes das aplicações incluídas na imagem. No caso de um arquivo de lançamento: detenha o servidor, substitua tudo, exceto config/, data/, logs/, plugins/ e client/plugins/, pelo conteúdo do novo arquivo e inicie-o novamente. No caso do pacote .deb ou .rpm, instale o novo pacote, tal como explicado em Atualizar um pacote.

As atualizações só avançam. Uma vez que um servidor mais recente tenha atualizado a base de dados, uma versão anterior não a pode utilizar: para reverter, restaure a cópia de segurança efetuada antes da atualização. O mesmo se aplica à transição de antimatter-next para antimatter.

Versões

O servidor do Antimatter indica a versão da linha Mattermost em que se baseia (atualmente 12.0.0). Os lançamentos no GitHub, com os respetivos arquivos e pacotes, têm os seus próprios números de versão, na série 0.9.0 durante a beta: antimatter version mostra-a como Número de compilação. As imagens são reconstruídas a partir dos ramos main: antimatter-next todas as noites (etiquetas nightly-<YYYYMMDD>) e ambas as imagens a cada alteração (etiquetas sha-<commit>). Fixe uma destas etiquetas, atualize de forma intencional e anote a etiqueta anterior para saber com que cópia de segurança corresponde.

Versões principais do PostgreSQL

O ficheiro compose utiliza 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, exporte a base de dados, inicie a nova versão num volume novo e restaure a exportação nela.

Atualização para a 0.9.0

A primeira arrancagem da versão 0.9.0 (ou de uma imagem construída a partir de 17 de outubro de 2026) efetua algumas alterações únicas aos dados. Cada uma executa-se apenas uma vez e fica registada na base de dados. Estas alterações passam o que estava com um valor predefinido antigo para o novo, mantendo intacto o que um administrador escolheu. Pode acompanhá-las no registo.

Se o Antimatter for para uma empresa ou organização, defina Tipo de novas comunidades como Local de trabalho antes de atualizar: AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. A atualização atribui a cada comunidade o tipo definido por esta configuração nesse momento, e as chamadas ficam desativadas por predefinição nos canais das comunidades do tipo Comunidade. Consulte Local de trabalho ou comunidade.
O quêA alteração
Tipos de comunidadeCada comunidade recebe um tipo, Comunidade ou Local de trabalho: o valor de Tipo de novas comunidades (TeamSettings.DefaultCommunityKind) na primeira arrancagem. Um tipo já definido é mantido. Os administradores da comunidade podem alterar o tipo da respetiva comunidade posteriormente, em Definições da equipa › Canais › Tipo de comunidade.
Quem arquiva os canaisOs membros dos canais já não arquivam os canais em que estão: são os administradores da comunidade que o fazem. Num ambiente de trabalho, os administradores do canal (quem o criou e aqueles a quem concedeu essa função) também o arquivam. Esta alteração afeta as funções do esquema do sistema; os esquemas de permissões criados por um administrador do sistema para algumas comunidades permanecem inalterados.
A função Moderadores dos predefinições de layoutA função Moderadores que as comunidades obtiveram de uma predefinição de layout passa a ter a permissão Remover pessoas, necessária para suspender e remover utilizadores. Apenas as funções que permanecem exatamente como as criou a predefinição são alteradas; uma função editada por alguém é deixada como está.
Funções com AdministradorUma função de comunidade com a opção Administrador ativada passa a ter todas as capacidades que os administradores da comunidade podem exercer, conforme indicado pela opção, e não apenas as definições da comunidade.
O limite de membrosMáx. de membros por comunidade (TeamSettings.MaxUsersPerTeam) passa de 50, o valor predefinido anterior, para 0 (sem limite). Qualquer outro valor é mantido, tal como um limite definido com AM_TEAMSETTINGS_MAXUSERSPERTEAM.
Ligações de modelosOs administradores do sistema passam a gerir as ligações de modelos, e os administradores da comunidade (e as funções com Administrador) as ligações de modelos da respetiva comunidade. Os serviços de IA da aplicação Agents passam a ser ligações de modelos em todo o servidor, conforme descrito abaixo.
Town Square passa a GeneralO canal predefinido de cada comunidade é renomeado de town-square (Town Square) para general (General). Mantém o seu ID, membros, mensagens e definições, bem como o nome de apresentação escolhido pelos administradores. Os links antigos e as pesquisas por town-square continuam a apontar para ele. Uma comunidade que já tenha um canal chamado general, mesmo que arquivado, mantém o seu town-square como canal predefinido, tal como uma comunidade cujo town-square esteja arquivado: o registo identifica-as, e os respetivos administradores podem renomear os canais.
FavoritosA categoria da barra lateral Favoritos de todos os utilizadores é renomeada para Favoritos, conforme agora indicado na interface. As categorias criadas por utilizadores com esse nome permanecem inalteradas.

Os serviços da aplicação Agents

A atualização copia cada serviço de IA da aplicação Agents para uma ligação de modelo de âmbito do servidor, partilhada com todas as comunidades e utilizável por todos, exceto convidados (ative Também convidados para o permitir). As chaves são criptografadas durante o processo, pelo que o servidor necessita da sua chave de criptografia de IA: num cluster cujos ficheiros estão no S3, defina primeiro AM_AI_ENCRYPTION_KEY, ou a cópia ficará pendente até à próxima arrancagem. Em seguida, verifique Consola do sistema › IA › Ligações de modelos:

  • Cada ligação mantém o ID do respetivo serviço, pelo que os agentes da aplicação e uma configuração de tradução automática definida para um serviço de Agents continuam a encontrá-lo.
  • Serviços OpenAI, compatíveis com OpenAI, Anthropic, Mistral, Cohere e Gemini tornam-se ligações ao respetivo endpoint compatível com OpenAI (ou Anthropic). Um serviço Azure torna-se uma ligação ao endpoint compatível com OpenAI do recurso: teste-o.
  • Serviços AWS Bedrock, Google Vertex AI e Cohere North, bem como tipos desconhecidos, são marcados como Necessita de atenção, com o respetivo motivo. As credenciais de cloud não são copiadas: aponte-os para o endpoint compatível com OpenAI do provedor ou para um gateway como o LiteLLM e, em seguida, guarde.
  • O serviço de incorporação (embedding) torna-se o modelo Incorporações (Embeddings) da ligação com o mesmo endereço e chave, ou uma ligaçã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 ligação, recebem o serviço e o modelo do agente predefinido da aplicação.

As definições e os dados próprios da aplicação Agents permanecem inalterados: os respetivos agentes continuam a utilizar os respetivos serviços.

Outras alterações de predefinições

  • Chamadas: o Modo de teste está desativado e o Ativar vídeo está ativado por predefinição. Uma escolha guardada na configuração é mantida. As chamadas seguem também o tipo de comunidade (ver Chamadas e voz).
  • Fixar mensagens no topo é uma função dos administradores do canal, dos administradores e moderadores da comunidade (com Gerir mensagens); os membros de uma mensagem direta ou de grupo continuam a poder fazê-lo.
  • Canais arquivados podem receber novos membros, que leem o respetivo histórico. Ninguém publica, reage ou altera nada neles.

Migração do Mattermost

O Antimatter utiliza o esquema de base de dados do Mattermost e adiciona as suas próprias tabelas, pelo que pode assumir a base de dados PostgreSQL e os ficheiros de um servidor Mattermost. Experimente primeiro numa cópia:

  1. Faça uma cópia de segurança da base de dados do Mattermost, do seu armazenamento de ficheiros (data/ ou balde S3) e do config.json, e depois detenha o Mattermost.
  2. Restaure a base de dados no PostgreSQL do Antimatter, ou aponte o Antimatter para uma cópia dela (AM_SQLSETTINGS_DATASOURCE).
  3. Copie os ficheiros para o armazenamento do Antimatter, mantendo os respetivos caminhos: para o balde antimatter com uma ferramenta S3, ou para data/ com um arquivo de lançamento.
  4. Reutilize as suas definições: copie o config.json ou mova-o para a base de dados com amctl --local config migrate (veja Definições). As suas variáveis de ambiente MM_ continuam a funcionar; renomeie-as para AM_ quando for conveniente.
  5. Inicie o Antimatter e acompanhe o registo enquanto atualiza a base de dados. Em seguida, verifique Consola do sistema › Plugins › Gestão de plugins. O Antimatter instala as suas próprias compilações de Chamadas, Playbooks, Kanban (Quadros), Agentes e integrações quando estas são mais recentes do que a versão instalada. Se o Mattermost tiver uma versão mais recente de uma delas, remova essa aplicação e reinicie o Antimatter, para que a sua própria compilação seja instalada.
  6. Configure novamente as notificações push, com o seu próprio proxy de notificações: o Antimatter nunca envia notificações para os serviços de push do Mattermost, de teste ou alojados, que apenas entregam às aplicações próprias do Mattermost. Até alterar o Servidor de notificações push, o servidor não envia notificações push (ver Notificações push).

O Antimatter não contacta nenhum serviço executado pela Mattermost, Inc. (ver Ligações a serviços externos), mesmo quando a sua configuração ainda nomeia um:

  • um servidor de notificações push no Mattermost é mantido nas definições, mas nunca é utilizado;
  • Os endereços do Mattermost para o marketplace de aplicações (URL do Marketplace) e para os avisos de produto ficam vazios;
  • os links de descarga de aplicações que eram as predefinições do Mattermost (Antimatter Apps Download Page Link, Link de descarga da aplicação Android e Link de descarga da aplicação iOS) são substituídos pelas páginas de descarga das aplicações do Antimatter no GitHub; os links que definiu por si próprio são mantidos;
  • a aplicação Chamadas utiliza o servidor STUN público da Cloudflare em vez do do Mattermost, sem alterar a definição guardada (ver Chamadas);
  • a verificação de atualizações de segurança e a notificação de falhas são removidas, bem como as respetivas definições da Consola do sistema (Ativar alertas de segurança, Ativar diagnóstico e notificação 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 apenas suporta PostgreSQL nas suas versões mais recentes, e o Antimatter também: transfira primeiro uma base de dados MySQL para PostgreSQL. Voltar ao Mattermost depois de o Antimatter ter atualizado a base de dados implica restaurar a sua cópia de segurança do Mattermost.

Exportar e importar dados

O formato de exportação em massa transfere dados entre servidores: o servidor inteiro, algumas comunidades ou alguns canais, com anexos, fotografias de perfil e emojis personalizados, se os pretender.

# 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 transferem para este servidor, inactive quando se importa para um servidor onde já têm contas, de modo a que as contas criadas a partir de correspondências incertas fiquem desativadas até um administrador as verificar. --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) durante 30 dias por omissão.

No próprio servidor, antimatter export bulk e antimatter import bulk --apply fazem o mesmo a partir de ficheiros, sem a API.