Post

Case: biblioteca Ansible para estações, servidores e deploys Rails/Node

Case: biblioteca Ansible para estações, servidores e deploys Rails/Node

Contexto

Havia dezenas de apps e engines Rails/Node para vários clientes. Onboarding dev era demorado, servidores tinham configurações divergentes e deploys exigiam checklists manuais. Precisávamos padronizar tudo com um único conjunto de playbooks/roles.

O que a biblioteca entrega

  • Workstation pronta: zsh/oh-my-zsh, dotfiles, pastas de projetos e clones por cliente/engine, hosts preconfigurados.
  • Servidores consistentes: roles para nginx/puma/sidekiq/redis/postgres/mysql, certificados, users/keys, ajustes de permissões e serviços.
  • Deploys Rails/Node: bundle/yarn, migrations, assets, crontab (whenever), restart de clusters puma, healthcheck via socket, notificações (Teams) de erro/sucesso.
  • Automação adicional: scripts auxiliares (install.sh, roundhousekick.sh), inventories por ambiente e tarefas para limpar logs/tmp, sincronizar configs e gerenciar upgrades.

Arquitetura (simplificada)

flowchart LR
  Inv[Inventories/vars] --> PlayDev[Playbooks workstation]
  Inv --> PlayOps[Playbooks servidores]
  Inv --> PlayDeploy[Playbooks deploy]

  PlayDev --> RolesDev[roles/development/*<br/>zsh, dotfiles, clones]
  PlayOps --> RolesOps[roles/nginx-puma, redis-server,<br/>postgresql/mysql, ssl, ssh-keys]
  PlayDeploy --> RolesDeploy[roles/deploy, fastdeploy,<br/>puma, sidekiq, services]

  RolesDeploy --> HC[Healthcheck + retries + notify]

Operação e rastreabilidade

  • Healthchecks pós-restart (via socket/puma), retries e notificações Teams para falhas/sucesso de deploy.
  • Roles focadas: workstation, app servers, DB/cache, deploy. Inventários/vars por cliente/ambiente.
  • Scripts rápidos (roundhousekick.sh, install.sh) para rodar playbooks sem decorar comandos.

Impacto (anonimizado)

  • Onboarding dev caiu para poucas horas: estação vem com shell, dotfiles e repositórios clonados.
  • Deploys mais previsíveis: validações de saúde e notificações reduzem reprocesso e incidentes pós-release.
  • Configuração de servidores mais homogênea (nginx/puma/sidekiq/redis/DB) mesmo com múltiplos clientes e apps.

O que você pode reutilizar

  • Separar roles por domínio (workstation, app server, deploy) e manter inventories por cliente/ambiente.
  • Healthcheck + retries após restart de serviços antes de notificar sucesso.
  • Scripts wrapper para reduzir fricção de quem executa playbooks.
Esta postagem está licenciada sob CC BY 4.0 pelo autor.