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

Papéis de parede distintos por tela no Android
Android

Papéis de parede distintos por tela no Android

Como remover seus dados de corretores de dados
Privacidade

Como remover seus dados de corretores de dados

Papéis de parede por tela no Android
Tutoriais

Papéis de parede por tela no Android

Monitorar Apache Tomcat com Verax NMS
Monitoramento

Monitorar Apache Tomcat com Verax NMS

Como corrigir o app Disney Plus que não funciona
Streaming

Como corrigir o app Disney Plus que não funciona

Agendar scripts Python com o Agendador do Windows
Automação

Agendar scripts Python com o Agendador do Windows