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 site | Com um arquivo de libertação | Com o pacote .deb ou .rpm |
|---|---|---|---|
| A base de dados: mensagens, utilizadores, comunidades, canais e, com o ficheiro compose do site, a configuração | volume antimatter_postgres, através de pg_dump | a sua base de dados PostgreSQL | a sua base de dados PostgreSQL |
| Ficheiros, imagens e aplicações instaladas enviados | volume 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 figurinhas | volume antimatter_gifs | o 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 modelos | AM_AI_ENCRYPTION_KEY em .env (recomendado), ou o ficheiro 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 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
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.- Faça uma cópia de segurança.
- Altere a etiqueta da imagem em
.env(ANTIMATTER_IMAGE), se fixar uma, como recomendado. - 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.
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.
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 comunidade | Cada 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 canais | Os 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 layout | A 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 Administrador | Uma 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 membros | Má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 modelos | Os 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 General | O 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. |
| Favoritos | A 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:
- Faça uma cópia de segurança da base de dados do Mattermost, do seu armazenamento de ficheiros (
data/ou balde S3) e doconfig.json, e depois detenha o Mattermost. - Restaure a base de dados no PostgreSQL do Antimatter, ou aponte o Antimatter para uma cópia dela (
AM_SQLSETTINGS_DATASOURCE). - Copie os ficheiros para o armazenamento do Antimatter, mantendo os respetivos caminhos: para o balde
antimattercom uma ferramenta S3, ou paradata/com um arquivo de lançamento. - Reutilize as suas definições: copie o
config.jsonou mova-o para a base de dados comamctl --local config migrate(veja Definições). As suas variáveis de ambienteMM_continuam a funcionar; renomeie-as paraAM_quando for conveniente. - 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.
- 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.