Guida alle tecnologie

Rexfile: configurare server Database e Web

5 min read DevOps Aggiornato 18 Sep 2025
Rexfile: configurare database e web server
Rexfile: configurare database e web server

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)

  1. Definisci i moduli condivisi e pubblitali in un repository comune.
  2. Imposta svn:externals per sincronizzare i moduli condivisi.
  3. Crea Rexfile con credenziali sicure e include dei moduli.
  4. Definisci i gruppi di server (srvdb, srvweb, ecc.).
  5. Implementa task “prepare” per installare/configurare servizi.
  6. 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:
    1. Ripristina il backup dell’archivio precedente in /var/www.
    2. Riporta i permessi corretti: chown -R www-data:www-data /var/www.
    3. 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.

Autore
Redazione

Materiali simili

Monitorare e gestire Apache Tomcat
Monitoraggio

Monitorare e gestire Apache Tomcat

Disney Plus non funziona? Guida rapida di risoluzione
Supporto streaming

Disney Plus non funziona? Guida rapida di risoluzione

Pianificare script Python con Task Scheduler
Automazione

Pianificare script Python con Task Scheduler

Revoca app Google, Drive e dispositivi
Sicurezza Account

Revoca app Google, Drive e dispositivi

Protezione dal riciclo dei numeri di telefono
Sicurezza

Protezione dal riciclo dei numeri di telefono

Installare Tomato su router economico
Networking

Installare Tomato su router economico