Runbook de produção do Codiconomy: um único processo Bun, um único arquivo SQLite em volume persistente. O bot é single-guild, então os comandos continuam registrados na guild (atualização imediata).
- VPS ou container com Bun e volume persistente para o diretório de
SQLITE_DATABASE_PATH. - Variáveis:
DISCORD_TOKEN,DISCORD_CLIENT_ID,DISCORD_GUILD_IDeSQLITE_DATABASE_PATH(apontando para o volume). Injete-as pelo gerenciador de segredos da plataforma; nunca faça commit do.env. - Mantenha uma única instância em execução: o scheduler e as transações assumem um só processo escrevendo no SQLite.
- Gerenciador de processo com reinício automático (systemd, Docker
restart: unless-stopped). O bot trataSIGTERMeSIGINTcom encerramento limpo.
Convide com os scopes bot e applications.commands e dê ao bot, no canal de
anúncios: Ver canal, Enviar mensagens e Incorporar links. O bot usa
somente o intent Guilds (não privilegiado). DMs de soltura e vencimento
dependem de o membro aceitar mensagens do servidor; falhas são ignoradas e
registradas como discord.notifier.dm_failed.
git pull
bun install --frozen-lockfile
bun run check && bun test
bun run db:migrate # o bot não mantém backups: copie o arquivo antes, se precisar
# reinicie o processo (systemctl restart codiconomy / docker compose up -d)Confirme nos logs: discord.commands.registration.completed,
discord.login.completed, discord.client.ready e ledger.reconcile.ok.
- Pare o processo.
- Volte o código para a versão anterior (
git checkout <tag>). - Se a versão nova aplicou uma migration, restaure uma cópia do arquivo feita por você antes de migrar — migrations não têm down e o bot não cria backups.
- Suba o processo e confira os logs.
A cada hora o bot roda reconcile() e escreve ledger.reconcile.ok ou
ledger.reconcile.failed (com a lista problems). Se falhar: pare o bot,
copie o arquivo, rode a suíte de testes localmente contra uma cópia e não
corrija saldos manualmente — qualquer ajuste deve ser um lançamento pelo
postTransaction.
- A temporada 1 nasce no primeiro boot, com 14 dias.
- Ao fim do prazo o job
season.endencerra a temporada e anuncia o ranking no canal configurado. Nenhuma temporada nova começa sozinha. - Para iniciar a seguinte:
/admin temporada iniciar [duracao] [evento] [zerar_dinheiro] [zerar_habilidades] [zerar_risco]. Os padrões zeram o dinheiro e o risco e copiam as habilidades. - Encerrar antes do prazo:
/admin temporada encerrar. - Prêmios entre temporadas:
/admin cofre saldoe/admin cofre transferir(depois que a nova temporada começou, pois o prêmio vai para o banco da temporada ativa).
bun run db:migrateno volume de produção.- Suba o bot; no servidor,
/admin canal noticiasno canal de anúncios. - Revise
/admin parametro vere as manchetes (/admin noticia listar). - Crie as categorias e perguntas do quiz e publique.
- Acompanhe os primeiros dias e ajuste valores com
/admin parametro definir,/admin evento criare/admin dia duracao, sem deploy.