Como Configurar uma Instância Mastodon para Um Único Usuário com VPS Barato
🔍 WiseChecker

Como Configurar uma Instância Mastodon para Um Único Usuário com VPS Barato

Ter sua própria instância do Mastodon dá controle total sobre sua presença nas redes sociais e seus dados. Para um único usuário, um VPS barato de provedores como DigitalOcean, Linode ou Vultr é suficiente para hospedar uma instância funcional. A principal restrição é que o Mastodon exige pelo menos 2 GB de RAM e um nome de domínio dedicado. Este artigo mostra como provisionar um VPS, instalar o Mastodon com Docker e configurar a instância para uma pessoa.

Principais Pontos: Mastodon para Um Usuário em VPS Econômico

  • VPS com 2 GB de RAM e 2 vCPUs: Hardware mínimo para rodar o Mastodon sem travamentos ou uso de swap.
  • Implantação com Docker Compose: Simplifica a instalação e as atualizações usando contêineres pré-construídos.
  • DNS e proxy SSL do Cloudflare: Fornece terminação TLS gratuita e proteção DDoS para a instância.

ADVERTISEMENT

O que o Mastodon Exige para uma Instância de Único Usuário

O Mastodon é uma aplicação Rails que usa PostgreSQL para armazenamento de dados e Redis para filas de tarefas em segundo plano. Mesmo com um único usuário, o servidor de aplicação, o servidor de banco de dados e os workers em segundo plano rodam simultaneamente. A documentação oficial recomenda 2 GB de RAM como o mínimo absoluto para uma instância de produção. Uma instância de único usuário com uso leve pode rodar em um VPS de $6 a $12 por mês, se você escolher um provedor que ofereça 2 GB de RAM nessa faixa de preço.

Os requisitos de armazenamento são modestos. O banco de dados e os arquivos de mídia para um usuário ativo raramente ultrapassam 10 GB no primeiro ano. Você pode começar com um disco de 25 GB e expandir depois. O nome de domínio deve ser um domínio registrado onde você possa configurar registros DNS. Um subdomínio como social.exemplo.com é comum.

Dependências de Software

A pilha do Mastodon inclui:

  • Ruby on Rails (servidor de aplicação)
  • PostgreSQL 12 ou superior (banco de dados)
  • Redis 6 ou superior (cache e filas)
  • Node.js 16+ (compilação de assets)
  • Nginx ou Caddy (proxy reverso)

Instalar tudo manualmente em um VPS barato é possível, mas sujeito a erros. O método com Docker Compose empacota todas as dependências em contêineres, o que reduz erros de configuração e simplifica as atualizações.

Instruções Passo a Passo para Implantar o Mastodon com Docker em um VPS

Passo 1: Provisionar o VPS e Configurar Acesso SSH

  1. Crie um VPS com 2 GB de RAM e Ubuntu 22.04
    Acesse o painel do seu provedor de VPS. Selecione o plano mais barato que ofereça 2 GB de RAM e pelo menos 25 GB de armazenamento SSD. Escolha Ubuntu 22.04 LTS como sistema operacional. Anote o endereço IP público após a criação.
  2. Conecte-se via SSH e atualize os pacotes
    Abra um terminal. Execute ssh root@seu-ip-vps. Após conectar, execute apt update && apt upgrade -y para instalar todas as correções de segurança disponíveis.
  3. Defina o hostname para seu domínio
    Execute hostnamectl set-hostname social.exemplo.com e substitua o domínio pelo seu. Edite /etc/hosts para adicionar uma linha: 127.0.0.1 social.exemplo.com.

Passo 2: Instalar Docker e Docker Compose

  1. Instale o Docker a partir do repositório oficial
    Execute os seguintes comandos em sequência:
    apt install -y ca-certificates curl gnupg lsb-release
    mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    apt update
    apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  2. Verifique a instalação
    Execute docker --version e docker compose version. Ambos os comandos devem retornar números de versão sem erros.

Passo 3: Baixar o Mastodon e Configurar Variáveis de Ambiente

  1. Clone o repositório do Mastodon
    Execute git clone https://github.com/mastodon/mastodon.git e depois cd mastodon.
  2. Copie o arquivo de ambiente de exemplo
    Execute cp .env.production.sample .env.production.
  3. Gere uma chave secreta e segredos OTP
    Execute openssl rand -hex 64 e copie a saída. Abra .env.production com um editor de texto. Defina SECRET_KEY_BASE com esse valor. Execute openssl rand -hex 64 novamente e defina OTP_SECRET. Execute head -c 64 /dev/urandom | base64 e defina VAPID_PRIVATE_KEY. Em seguida, execute openssl ecparam -name prime256v1 -genkey -noout -out /dev/stdout | base64 | tr -d '\n' e defina VAPID_PUBLIC_KEY.
  4. Defina o domínio e as credenciais do banco de dados
    No mesmo arquivo, edite estas linhas:
    LOCAL_DOMAIN=social.exemplo.com
    DB_HOST=db
    DB_USER=postgres
    DB_NAME=postgres
    DB_PASS=
    REDIS_HOST=redis
    Deixe DB_PASS vazio por enquanto. O arquivo Docker Compose usa o usuário PostgreSQL padrão sem senha.

Passo 4: Configurar Nginx e SSL com Cloudflare

  1. Configure o DNS no Cloudflare
    No painel do Cloudflare, adicione um registro A para social apontando para o IP do seu VPS. Ative o ícone de nuvem laranja (proxy) para ativar o SSL do Cloudflare.
  2. Crie um arquivo de configuração do Nginx
    No VPS, crie /etc/nginx/sites-available/mastodon com o seguinte conteúdo:
    server {
        listen 80;
        server_name social.exemplo.com;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name social.exemplo.com;
    
        ssl_certificate /etc/ssl/certs/cloudflare.crt;
        ssl_certificate_key /etc/ssl/private/cloudflare.key;
    
        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
        location /api/v1/streaming {
            proxy_pass http://127.0.0.1:4000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
  3. Ative o site e reinicie o Nginx
    Execute ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/. Depois execute systemctl restart nginx.
  4. Faça upload do certificado de origem do Cloudflare
    No Cloudflare, vá em SSL/TLS > Servidor de Origem. Crie um certificado de origem que cubra seu domínio e todos os subdomínios. Copie o conteúdo do certificado e da chave para os arquivos referenciados na configuração do Nginx acima.

Passo 5: Construir e Iniciar os Contêineres do Mastodon

  1. Construa as imagens Docker
    A partir do diretório mastodon, execute docker compose build. Esta etapa compila os assets e pode levar de 10 a 15 minutos em um VPS barato.
  2. Execute as migrações do banco de dados
    Execute docker compose run --rm web rails db:migrate. Isso cria as tabelas do banco de dados.
  3. Crie a conta de administrador
    Execute docker compose run --rm web rails db:seed. Isso cria um usuário administrador padrão com email admin@example.com e senha mastodonadmin. Altere esses dados imediatamente após o primeiro login.
  4. Inicie todos os serviços
    Execute docker compose up -d. Isso inicia os contêineres web, streaming, sidekiq e banco de dados em modo destacado.

ADVERTISEMENT

Problemas Comuns Após a Implantação

VPS Fica sem Memória Durante a Construção

Se o processo de construção falhar com um processo morto ou erro OOM, seu VPS provavelmente tem menos de 2 GB de RAM. Adicione um arquivo de swap de 2 GB: fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile. Adicione /swapfile none swap sw 0 0 ao /etc/fstab para torná-lo permanente.

Não é Possível Enviar E-mails para Confirmação de Conta

O Mastodon requer um servidor SMTP para enviar e-mails de confirmação. Para uma instância de único usuário, você pode usar uma conta gratuita do SendGrid (100 e-mails por dia) ou um teste do Mailgun. Adicione estas variáveis ao .env.production: SMTP_SERVER=smtp.sendgrid.net, SMTP_PORT=587, SMTP_LOGIN=apikey, SMTP_PASSWORD=sua-chave-api-sendgrid, SMTP_FROM_ADDRESS=noreply@social.exemplo.com. Depois reinicie os contêineres com docker compose restart.

Interface Web do Mastodon Retorna 502 Bad Gateway

Isso geralmente significa que o Nginx não consegue alcançar os contêineres Docker. Verifique se os contêineres estão rodando com docker ps. Confirme que o contêiner web expõe a porta 3000 e o contêiner de streaming expõe a porta 4000. Verifique também se LOCAL_DOMAIN no .env.production corresponde ao server_name na configuração do Nginx.

Instância Mastodon para Um Usuário vs Plano Hospedado do Mastodon

Item Instância Auto-Hospedada para Um Usuário Plano Hospedado do Mastodon (Mastodon.social)
Custo mensal $6 a $12 (VPS) mais domínio ($1-2) Gratuito para conta básica
Controle Acesso total de administrador, regras de moderação personalizadas Sem configurações no nível do servidor
Manutenção Atualizações manuais, correções de segurança Atualizações automáticas pelo host
Propriedade dos dados Todos os dados no seu VPS Dados armazenados nos servidores do host
Escalabilidade Limitada pelos recursos do VPS Suporta muitos usuários

Após os contêineres estarem rodando, abra https://social.exemplo.com em um navegador. Faça login com a conta de administrador criada durante a configuração. Vá em Preferências > Administração > Configurações do Servidor para personalizar o nome da instância, descrição e e-mail de contato. Para uma instância de único usuário, desative o registro aberto em Preferências > Administração > Configurações do Servidor > Registros para impedir que outros entrem. Considere configurar backups automáticos semanais do banco de dados PostgreSQL usando docker compose exec db pg_dump -U postgres > backup.sql e armazenar o arquivo fora do servidor via rsync ou um bucket de armazenamento em nuvem.

ADVERTISEMENT