Guia de tecnologias

Automatizando servidores com Rex: banco de dados e website

4 min read DevOps Atualizado 18 Sep 2025
Rex: automatizar DB e website com SVN externals
Rex: automatizar DB e website com SVN externals

Visão geral

Este guia mostra como configurar tarefas Rex para dois projetos separados — database e website — reutilizando módulos comuns mantidos como externals no Subversion (SVN). Você vai aprender a adicionar externals, escrever um Rexfile que inclui módulos Common::NTP e Service::MySQL/Service::Apache, definir grupos de servidores e criar tarefas para preparar e implantar serviços.

Preparar repositórios e arquivos

Mude para o repositório do database e crie um Rexfile.

wks01 Service# cd ../database  
wks01 database# touch Rexfile

Agora adicionamos dois repositórios comuns como externals do SVN. Isso permite compartilhar código (módulos) entre projetos.

wks01 database# svn propedit svn:externals .

No editor, acrescente as linhas a seguir, salve e feche:

lib/Common  http://svn01/svn/common
lib/Service http://svn01/svn/service

Depois de configurar os externals, execute um update e faça commit das novas configurações:

wks01 database# svn up  
wks01 database# svn ci -m "added external repositories"

Observação: após o svn up, o SVN buscará atualizações também nos repositórios externos. Se alguém adicionar novos serviços nesses repositórios, você os obterá com um novo svn up.

Criando o Rexfile para o servidor de banco de dados

A seguir está um exemplo de Rexfile que instala e configura MySQL junto com a sincronização de horário (NTP).

set user => "root";
set password => "f00b4r";
include qw/
   Common::NTP
   Service::MySQL
/;
set group => srvdb => "db01";
task "prepare", group => "srvdb", sub {
   
   # run the common ntp task "prepare"
   Common::NTP::prepare();
   # install mysql
   Service::MySQL::prepare();
   # configure mysql
   Service::MySQL::configure({
      key_buffer         => "32M",
      max_allowed_packet => "32M",
   });
   # restart mysql
   service mysql => "restart";
};

Breves explicações práticas:

  • Linhas 1–2: definem autenticação (usuário/senha) usada para acessar o host alvo. Você pode usar autenticação por chave se preferir.
  • include: traz os módulos Common::NTP e Service::MySQL. Cada task desses módulos vira uma função Perl que você pode chamar diretamente.
  • set group: define um grupo de servidores chamado srvdb com o host db01. Você pode adicionar vários hosts. Exemplos:
set group => srvdb => "db01", "db02", "db03";
set group => srvdb => "db[01..03]";
  • task “prepare”: executa em todos os servidores do grupo srvdb e realiza as ações de preparação, instalação, configuração e reinício do serviço MySQL.

Quando terminar, adicione o Rexfile ao repositório e faça commit:

wks01 database# svn add Rexfile  
wks01 database# svn ci -m "inital commit of Rexfile"

Para aplicar as tarefas em seus servidores, execute:

wks01 database# rex prepare

Para listar as tarefas disponíveis em um Rexfile:

wks01 database# rex -T

Criando as tarefas para o website

Mude para o diretório do projeto website e crie um Rexfile.

wks01 database# cd ../website  
wks01 website# touch Rexfile

Repita a definição de externals no repositório website (mesmas linhas usadas anteriormente):

wks01 website# svn propedit svn:externals .

Adicione as mesmas linhas abaixo no editor e salve:

lib/Common  http://svn01/svn/common
lib/Service http://svn01/svn/service

Execute update e commit:

wks01 database# svn up  
wks01 database# svn ci -m "added external repositories"

Exemplo de Rexfile para preparar um servidor web com Apache:

# Rexfile
set user => "root";
set password => "test";
include qw/
   Common::NTP
   Service::Apache
/;
set group => srvweb => "web01";
task "prepare", group => "srvweb", sub {
   
   # run the common ntp task "prepare"
   Common::NTP::prepare();
   # install apache
   Service::Apache::prepare();
   # configure apache
   Service::Apache::configure({
      timeout => 60,
   });
   # restart apache
   service apache2 => "restart";
};

Adicione e commit do Rexfile:

wks01 website# svn add Rexfile  
wks01 website# svn ci -m "initial Rexfile"

Execute a preparação do webserver:

wks01 website# rex prepare

Exemplo de tarefa de deploy de aplicação

Após os servidores estarem prontos, crie uma task de deploy que envie e extraia o pacote da aplicação no webserver.

task "deploy", group => "srvweb", sub {
   upload "your-web-application.tar.gz", "/tmp";
   extract "/tmp/your-web-application.tar.gz",
      owner => "www-data",
      group => "www-data",
      to    => "/var/www";
   rm "/tmp/your-web-application.tar.gz";
};

Checklist rápido antes de executar

  • Confirmar que os externals do SVN apontam para os repositórios corretos.
  • Garantir acesso SSH com credenciais ou chave para os hosts alvo.
  • Verificar que os módulos Common::NTP e Service::* existem nos externals.
  • Testar primeiro em ambiente de staging antes de produção.

Importante: nunca deixe credenciais em texto plano num repositório público. Use variáveis de ambiente ou um cofre de segredos sempre que possível.

Dicas práticas e quando isso pode falhar

  • Falha de svn up nos externals: verifique URL e permissões no servidor SVN.
  • Erros de autenticação no rex: valide usuário/senha e tente autenticação por chave.
  • Dependências ausentes em módulos Service: atualize os externals e rode svn up novamente.
  • Mudanças manuais no servidor podem causar drift; considere usar auditoria ou políticas de configuração.

Mini-metodologia para criar novas tasks Rex

  1. Identifique o recurso a automatizar (instalar, configurar, deploy).
  2. Verifique se existe um módulo reutilizável em lib/Common ou lib/Service.
  3. Se não houver, crie o módulo com funções idempotentes.
  4. Inclua o módulo no Rexfile e chame suas funções dentro de uma task.
  5. Teste localmente e em staging; versione e documente.

Glossário rápido

  • Rex: ferramenta de automação baseada em Perl para executar tarefas remotas.
  • Rexfile: arquivo que define tasks e grupos de servidores no formato usado pelo Rex.
  • externals (SVN): referência a outros repositórios que são checkouts dentro do seu projeto.

Resumo e próximos passos

  • Use externals para compartilhar módulos entre projetos.
  • Defina grupos de servidores e tasks no Rexfile para padronizar instalações e deploys.
  • Teste e versione seus Rexfiles no SVN.

Notas finais: mantenha seus módulos pequenos e idempotentes. Prefira autenticação por chave quando possível. Automatize primeiro em ambiente controlado e só depois em produção.

Autor
Edição

Materiais semelhantes

Instalar e usar Podman no Debian 11
Containers

Instalar e usar Podman no Debian 11

Apt‑pinning no Debian: guia prático
Administração de sistemas

Apt‑pinning no Debian: guia prático

Injete FSR 4 com OptiScaler em qualquer jogo
Tecnologia

Injete FSR 4 com OptiScaler em qualquer jogo

DansGuardian e Squid com NTLM no Debian Etch
Infraestrutura

DansGuardian e Squid com NTLM no Debian Etch

Corrigir erro de instalação no Android
Android

Corrigir erro de instalação no Android

KNetAttach: Pastas de Rede remota no KDE
KDE

KNetAttach: Pastas de Rede remota no KDE