Automatizando servidores com Rex: banco de dados e website
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 RexfileAgora 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 preparePara listar as tarefas disponíveis em um Rexfile:
wks01 database# rex -TCriando as tarefas para o website
Mude para o diretório do projeto website e crie um Rexfile.
wks01 database# cd ../website
wks01 website# touch RexfileRepita 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 prepareExemplo 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
- Identifique o recurso a automatizar (instalar, configurar, deploy).
- Verifique se existe um módulo reutilizável em lib/Common ou lib/Service.
- Se não houver, crie o módulo com funções idempotentes.
- Inclua o módulo no Rexfile e chame suas funções dentro de uma task.
- 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.
Materiais semelhantes
Instalar e usar Podman no Debian 11
Apt‑pinning no Debian: guia prático
Injete FSR 4 com OptiScaler em qualquer jogo
DansGuardian e Squid com NTLM no Debian Etch
Corrigir erro de instalação no Android