Rexfile: configurare server Database e Web
Introduzione
In questo documento vediamo come preparare due progetti separati (database e website) usando Rexfiles e SVN externals. Copriamo i comandi principali, la struttura del Rexfile, come includere moduli condivisi e come creare un task di deploy per un’applicazione web.
Nota: Rex è uno strumento di automazione basato su Perl. Un “task” è una funzione registrata che può essere eseguita sui nodi target.
Importante: mantieni le credenziali sicure. Evita di committare password in chiaro nei repository pubblici.
Prerequisiti
- Accesso al repository SVN (con permessi di modifica per svn:externals).
- Rex installato sulla macchina di controllo.
- Moduli Common e Service disponibili sui repository esterni indicati.
- Accesso SSH o credenziali root ai server target.
Creare i task per il Database
Cambia nella directory del repository database e crea un Rexfile:
wks01 Service# cd ../database
wks01 database# touch Rexfile
Aggiungi i due repository comuni come externals SVN:
wks01 database# svn propedit svn:externals .
Nel tuo editor, aggiungi le seguenti righe, salva e chiudi:
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Dopo aver impostato gli externals, esegui l’update e fai il commit delle nuove impostazioni:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"
Il comando svn up controllerà anche gli externals. Se qualcuno aggiunge nuovi servizi nei repository esterni, li riceverai con svn up. Ora puoi creare il Rexfile per impostare il server database.
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";
};
Spiegazione rapida delle parti principali:
- Linee 1–2: impostano le credenziali per comunicare con l’host target (db01). È possibile usare anche autenticazione tramite chiave.
- include: importa i moduli Common::NTP e Service::MySQL. Ogni task importato diventa anche una funzione Perl richiamabile.
- set group => srvdb: definisce un gruppo di server. Puoi aggiungere più host al gruppo, ad esempio:
set group => srvdb => "db01", "db02", "db03";
set group => srvdb => "db[01..03]";
- task “prepare”: eseguito su tutti i server del gruppo srvdb. Il task richiama le funzioni di setup dei moduli importati, configura MySQL e riavvia il servizio.
Aggiungi e fai il commit del Rexfile:
wks01 database# svn add Rexfile
wks01 database# svn ci -m "inital commit of Rexfile"
Per eseguire il task di preparazione sul gruppo:
wks01 database# rex prepare
Per elencare i task disponibili in un Rexfile:
wks01 database# rex -T
Creare i task per il Website
Spostati nella directory del progetto website e crea un Rexfile:
wks01 database# cd ../website
wks01 website# touch Rexfile
Imposta anche qui gli externals SVN:
wks01 website# svn propedit svn:externals .
Aggiungi le stesse righe dell’esempio precedente:
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Esegui update e commit:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"
Crea il Rexfile per il webserver:
# 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";
};
Aggiungi il file al repository e fai il commit:
wks01 website# svn add Rexfile
wks01 website# svn ci -m "initial Rexfile"
Esegui il task di preparazione per il webserver:
wks01 website# rex prepare
Deploy dell’applicazione web
Dopo aver configurato database e webserver, puoi aggiungere un task di deploy che carica un archivio ZIP/TAR e lo installa nella document root:
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";
};
Questo esempio usa comandi Rex generici: upload, extract e rm. Adatta i percorsi e i permessi in base alla tua distribuzione.
Best practice e sicurezza
- Non committare password in chiaro. Usa variabili d’ambiente, Vault o file .rexfile ignorati dal VCS.
- Controlla sempre gli externals prima di eseguire in produzione.
- Testa i task su ambienti di staging identici alla produzione.
- Limitare l’accesso SSH e monitorare i log dei deploy.
Alternative e quando Rex può non essere la scelta giusta
- Se la tua infrastruttura è già gestita con Ansible, Puppet o Chef, valuta di continuare con quegli strumenti per coerenza.
- Rex è ottimo per script procedurali e per chi usa Perl. Per team che preferiscono YAML e agentless puro, Ansible può essere più veloce da adottare.
- Se hai una piattaforma cloud nativa con provisioning e configurazione integrata, preferisci gli strumenti forniti dal cloud provider.
Metodo rapido: come procedere in 6 passi (mini-methodology)
- Definisci i moduli condivisi e pubblitali in un repository comune.
- Imposta svn:externals per sincronizzare i moduli condivisi.
- Crea Rexfile con credenziali sicure e include dei moduli.
- Definisci i gruppi di server (srvdb, srvweb, ecc.).
- Implementa task “prepare” per installare/configurare servizi.
- Aggiungi task di deploy e test automazione su staging.
Checklist per ruoli (DevOps, SRE, Developer)
- DevOps/System Administrator:
- Verificare che gli externals puntino alle revisioni corrette.
- Assicurarsi che i moduli Common/Service siano aggiornati.
- Proteggere le credenziali.
- SRE/Operazioni:
- Testare i task in staging.
- Monitorare i riavvii dei servizi.
- Documentare rollback.
- Developer:
- Fornire pacchetti di build coerenti (.tar.gz/.zip).
- Definire proprietario e permessi dei file web.
Decisione rapida: usare Rex oppure no? (diagramma)
flowchart TD
A[Hai già moduli Perl e team con esperienza Perl?] -->|Sì| B[Valuta Rex]
A -->|No| C[Valuta Ansible/Puppet]
B --> D{Hai bisogno di integrazione con SVN externals?}
D -->|Sì| E[Rex + svn:externals OK]
D -->|No| F[Rex resta valido per task locali]
C --> G[Ansible se preferisci YAML e ampia community]
Casi di errore comuni e come risolverli
- Errore: “svn:externals” non aggiornato. Soluzione: esegui svn propget svn:externals . e verifica URL.
- Errore: credenziali rifiutate. Soluzione: verifica user/password o chiave SSH, prova ssh -i
host. - Errore: permessi file web non corretti. Soluzione: controlla owner/group e correggi con chown/chmod nel task di deploy.
Criteri di accettazione
- Il task “prepare” eseguito con rex deve terminare senza errori sui nodi di staging.
- Il servizio MySQL/Apache deve risultare attivo e raggiungibile dopo il riavvio.
- L’applicazione deve servire contenuti statici correttamente nella directory /var/www.
Piccolo playbook/operazioni di rollback
- Rollback rapido di una release:
- Ripristina il backup dell’archivio precedente in /var/www.
- Riporta i permessi corretti: chown -R www-data:www-data /var/www.
- Riavvia il servizio web: service apache2 restart.
Glossario 1 linea
- Rexfile: file di configurazione che definisce task Rex.
- svn:externals: proprietà SVN che collega repository esterni.
- Task: unità eseguibile di lavoro in Rex.
Riepilogo
- Usando svn:externals puoi condividere moduli comuni tra progetti.
- Rexfile permette di automatizzare installazione, configurazione e deploy.
- Testa sempre in staging e proteggi le credenziali.
Spero che questa guida ti aiuti a creare Rexfile affidabili per i tuoi server database e web. Se vuoi, posso generare un modello di Rexfile personalizzato per la tua infrastruttura.
Materiali simili

Monitorare e gestire Apache Tomcat

Disney Plus non funziona? Guida rapida di risoluzione

Pianificare script Python con Task Scheduler

Revoca app Google, Drive e dispositivi

Protezione dal riciclo dei numeri di telefono
