Executar uma instância do Mastodon em bare metal oferece controle total, mas frequentemente leva a conflitos de dependência e procedimentos de atualização manuais. Migrar para a conteinerização com Docker padroniza o ambiente, simplifica as atualizações e reduz o risco de desvios de configuração. Este guia mostra as etapas exatas para exportar seus dados existentes do Mastodon, configurar uma instância baseada em Docker e importar seu banco de dados e arquivos sem perder postagens ou contas de usuário.
Principais Pontos: Migrando Mastodon do Bare Metal para Docker
- pg_dump e pg_restore: Exporte e importe o banco de dados PostgreSQL preservando todas as contas, postagens e relacionamentos.
- rsync do diretório system: Copie os arquivos de mídia enviados e emojis personalizados do servidor antigo para o novo volume Docker.
- Configuração do docker-compose.yml: Espelhe as variáveis de ambiente originais para segredos, credenciais do banco de dados e nome de domínio.
- Executar db:migrate após a importação: Aplique quaisquer alterações de esquema pendentes para que a instância Docker corresponda à estrutura atual do banco de dados.
Entendendo o Processo de Migração do Bare Metal para Docker
O Mastodon armazena seus dados em dois locais principais: um banco de dados PostgreSQL e um diretório do sistema de arquivos para mídias enviadas. O banco de dados contém tudo, desde contas de usuário e postagens até relacionamentos de seguidores e denúncias. O sistema de arquivos contém avatares, cabeçalhos, emojis personalizados e anexos de mídia. Migrar para Docker significa que você deve transferir ambos os componentes mantendo o mesmo nome de domínio e chaves secretas.
A instalação em bare metal normalmente usa um gerenciador de pacotes do sistema como apt ou yum, com o Mastodon rodando diretamente no servidor. Uma instalação Docker usa contêineres definidos em um arquivo docker-compose.yml. O aplicativo principal do Mastodon, os workers background do Sidekiq e a API de streaming rodam em contêineres separados. A migração não altera o formato subjacente dos dados, portanto uma exportação e importação diretas funcionam.
Antes de começar, confirme que seu novo host Docker atende aos requisitos mínimos: pelo menos 2 núcleos de CPU, 4 GB de RAM e espaço em disco suficiente para armazenar seus arquivos de mídia. Você também precisa ter o Docker Engine e o Docker Compose instalados na máquina de destino. Se você usa um proxy reverso como Nginx ou Caddy no servidor bare metal, planeje reconfigurá-lo para a configuração Docker ou execute o proxy dentro de um contêiner separado.
Passos para Migrar o Mastodon do Bare Metal para Docker
- Pare os serviços do Mastodon no servidor bare metal
Executesystemctl stop mastodon-para parar os serviços web, sidekiq e streaming. Isso impede que novos dados sejam gravados durante a exportação. Verifique se todos os processos foram parados comsystemctl status mastodon-. - Exporte o banco de dados PostgreSQL
Usepg_dump -Fc mastodon_production > mastodon_production.dumpcomo o usuário do banco de dados do Mastodon. O formato customizado (-Fc) compacta o dump e permite restauração paralela posteriormente. Transfira o arquivo de dump para o host Docker usando scp ou rsync. - Copie os arquivos de mídia e sistema
No servidor bare metal, localize o diretório system do Mastodon (geralmente/home/mastodon/live/public/system). Executersync -avz /home/mastodon/live/public/system/ usuario@novo-servidor:/caminho/para/volume-docker/system/. Inclua o arquivo.env.productiondo servidor bare metal para chaves secretas e variáveis de ambiente. - Configure o ambiente Docker
No novo servidor, crie um diretório para o Mastodon e coloque odocker-compose.ymloficial do repositório do Mastodon. Copie seu arquivo.env.productionpara este diretório. Edite odocker-compose.ymlpara mapear o volume de mídia para o caminho onde você colocou os arquivos sincronizados. Por exemplo, adicione./system:/mastodon/public/systemnos serviços web e sidekiq. - Inicie apenas o contêiner do banco de dados
Executedocker compose up -d dbpara iniciar apenas o contêiner PostgreSQL. Aguarde 10 segundos para o banco de dados inicializar. Em seguida, restaure o dump usandodocker compose exec -T db pg_restore -U postgres -d mastodon_production < mastodon_production.dump. A flag-Tsuprime a saída de progresso e acelera a operação. - Execute as migrações do banco de dados
Após a restauração ser concluída, inicie todos os contêineres comdocker compose up -d. Executedocker compose exec web bundle exec rails db:migratepara aplicar quaisquer alterações de esquema que a versão Docker espera. Esta etapa garante que a estrutura do banco de dados corresponda ao código atual do Mastodon. - Regenere o pipeline de assets e o cache
Executedocker compose exec web bundle exec rails assets:precompilepara compilar CSS e JavaScript. Em seguida, executedocker compose exec web bundle exec rails tmp:cache:clearpara limpar quaisquer dados em cache que referenciem os caminhos de arquivo antigos. - Atualize o DNS e o proxy reverso
Aponte seu nome de domínio para o endereço IP do novo servidor. Configure seu proxy reverso para encaminhar o tráfego para o contêiner web do Mastodon (porta 3000 por padrão). Se você usa Nginx, a documentação oficial do Mastodon fornece uma configuração de exemplo. Aguarde a propagação do DNS (geralmente de 5 a 30 minutos). - Verifique a migração
Abra sua instância do Mastodon em um navegador. Faça login com uma conta existente e verifique se sua foto de perfil, postagens e seguidores aparecem corretamente. Publique um novo toot e confirme se ele aparece na linha do tempo pública. Monitore os logs do Docker comdocker compose logs -fpara quaisquer erros.
Problemas Comuns Após Migrar o Mastodon para Docker
A restauração do banco de dados falha com role does not exist
O comando pg_restore pode falhar se o contêiner PostgreSQL usar um usuário de banco de dados diferente do servidor bare metal. Crie a role correta manualmente antes de restaurar. Conecte-se ao contêiner do banco de dados com docker compose exec db psql -U postgres e execute CREATE ROLE mastodon WITH LOGIN SUPERUSER;. Em seguida, tente a restauração novamente.
Arquivos de mídia aparecem quebrados ou ausentes
Se avatares ou anexos aparecerem como imagens quebradas, o caminho do volume no docker-compose.yml provavelmente não corresponde ao destino do rsync. Verifique se o diretório system está montado em /mastodon/public/system dentro dos contêineres web e sidekiq. Execute docker compose exec web ls /mastodon/public/system para confirmar que os arquivos estão visíveis.
Workers do Sidekiq acumulam e nunca processam
Quando o Sidekiq não consegue se conectar ao Redis ou ao banco de dados, os jobs se acumulam. Verifique se o contêiner Redis está em execução com docker compose ps. Confirme se as variáveis de ambiente REDIS_URL e DB_HOST em seu arquivo .env.production apontam para os nomes dos serviços Docker (por exemplo, redis e db) em vez de endereços IP ou localhost.
O login falha com chave secreta inválida
As chaves SECRET_KEY_BASE, OTP_SECRET e VAPID_PRIVATE_KEY devem corresponder aos valores originais do bare metal. Copie o arquivo .env.production inteiro do servidor antigo. Se alguma chave estiver faltando, gere novas com docker compose exec web bundle exec rake secret, mas isso invalidará todas as sessões de usuário existentes.
| Item | Bare Metal | Docker |
|---|---|---|
| Gerenciamento de dependências | Instalação manual de pacotes via apt ou yum | Imagens de contêiner automáticas com versões fixas |
| Método de backup do banco de dados | pg_dump e script cron manual | docker compose exec db pg_dump ou snapshots de volume automatizados |
| Procedimento de atualização | Parar serviços, puxar git, bundle install, executar migrações | docker compose pull && docker compose up -d |
| Localização do sistema de arquivos | /home/mastodon/live/public/system | Volume Docker montado em /mastodon/public/system |
| Arquivo de configuração | .env.production no diretório home do usuário Mastodon | .env.production no diretório do projeto, lido pelos contêineres |
Após concluir a migração, sua instância do Mastodon roda inteiramente em contêineres Docker. As atualizações agora exigem apenas puxar novas imagens e reiniciar os serviços. Agende backups regulares do banco de dados usando docker compose exec db pg_dump -U postgres mastodon_production e armazene o dump fora do servidor. Para maior segurança, teste a migração em um servidor de staging primeiro para identificar quaisquer problemas específicos do ambiente antes de tocar na instância de produção.