Pular para conteúdo

Deploy com Docker

Duas formas de rodar o bot: usando a imagem já publicada (mais rápido — não precisa clonar o repositório nem instalar Python) ou buildando localmente (útil pra customizar o código).

Opção 1 — imagem pronta (recomendado)

A cada release, uma imagem é publicada automaticamente em ghcr.io/riverfount/translate-bot.

1. Gere as chaves RSA do bot

Não precisa de Python/uv local, usa a própria imagem:

mkdir -p keys
docker run --rm -v "$(pwd)/keys:/app/keys" ghcr.io/riverfount/translate-bot:latest uv run --no-sync gen-keys

Isso cria keys/private.pem e keys/public.pem. A chave privada assina as atividades enviadas pelo bot — nunca a compartilhe.

2. Crie um banco vazio

O bot cria as tabelas automaticamente no primeiro start:

touch bot.db

3. Suba o container

Sobrescrevendo pelo menos o domínio via variável de ambiente:

docker run -d \
  --name translate-bot \
  -p 8000:8000 \
  -v "$(pwd)/keys:/app/keys" \
  -v "$(pwd)/bot.db:/app/bot.db" \
  -e ENV_FOR_DYNACONF=production \
  -e TRANSLATEBOT_DOMAIN=bot.seu-dominio.com \
  -e TRANSLATEBOT_BOT_USERNAME=translatebot \
  -e TRANSLATEBOT_TARGET_LANGUAGE=pt \
  -e TRANSLATEBOT_LIBRETRANSLATE_URL=https://sua-instancia-libretranslate.com \
  ghcr.io/riverfount/translate-bot:latest

Qualquer chave de settings.toml pode ser sobrescrita assim, com o prefixo TRANSLATEBOT_ (veja Configuração). Se a instância LibreTranslate exigir chave de API, monte um .secrets.toml também:

-v "$(pwd)/.secrets.toml:/app/.secrets.toml"

4. Confira os logs e o healthcheck

docker logs -f translate-bot
docker ps   # STATUS deve mostrar "(healthy)" depois de uns 10s

Pra usar uma versão específica em vez de latest, troque a tag (ex: ghcr.io/riverfount/translate-bot:v1.1.0) — veja as tags disponíveis e as releases.

Note

O container roda como usuário não-root e expõe /health pra orquestradores. Falta configurar HTTPS na frente — veja a seção HTTPS logo abaixo, é obrigatório pro ActivityPub funcionar.

Opção 2 — build local

Pra desenvolver ou customizar o código antes de buildar:

git clone https://github.com/Riverfount/translate-bot
cd translate-bot
make gen-keys
make docker-build
make docker-run

Para acompanhar os logs em tempo real:

make docker-logs

Para parar e remover o container:

make docker-stop

As variáveis IMAGE_NAME, IMAGE_TAG e PORT podem ser sobrescritas:

make docker-build IMAGE_NAME=meu-bot IMAGE_TAG=v1.0
make docker-run PORT=9000

HTTPS (obrigatório)

O protocolo ActivityPub exige HTTPS. Servidores Mastodon rejeitam conexões sem TLS.

A forma mais simples com Caddy:

# Caddyfile
bot.seu-dominio.com {
    reverse_proxy localhost:8000
}
caddy run

O Caddy obtém e renova o certificado Let's Encrypt automaticamente.