GiBiLamp 6 – script di gestione

Continuiamo la nostra serie dedicata a GiBiLamp mostrando come realizzare degli script che possano automatizzare la creazione e cancellazione dei nostri virtual host.


L’atto della generazione di un sito comporta numerose operazioni. Vediamo tutti i passi necessari per la creazione di un sito all’interno del struttura fin qua disegnata:

  1. Creazione dell’utente di sistema proprietario del sito e della relativa password
  2. Creazione della cartella root del sito, associandovi i permessi corretti
  3. Creazione di due database associati al sito
  4. Creazione dell’utente di database proprietario dei due database creati
  5. Creazione del virtual host che permetterà la visualizzazione dei nostri due siti (ricordo che per noi un sito è composto sempre da una sezione ufficiale e da una dimostrativa)
  6. Creazione dei file di log su cui verranno salvate le informazioni sulla navigabilità e gli eventuali errori del nostro sito
  7. Tracciare tutti questi dati per inviarli al proprietario del sito

Un’operazione di questa portata potrebbe togliere ad un sistemista cinque / dieci minuti; con uno script di creazione automatica si risolverebbe il problema nell’arco di qualche secondo.

Script di creazione

Senza entrare nel dettaglio del codice dello script, ne analizzerò i passi da compiere al fine di ottenere il risultato descritto nell’elenco precedente.

Lo script può essere generato con un qualsiasi linguaggio di programmazione interpretabile dal sistema, nel nostro caso PHP cade a fagiolo, e grazie al modulo PHP-cli (PHP command line interface) saremo in grado di eseguire i comandi di creazione/cancellazione di un sito.

Innanzitutto lo script prevede due modalità:

  • la modalità automatica, che ha bisogno di un solo parametro per generare l’intero sito, ovviamente facendo delle scelte standard sulla creazione di determinate configurazioni
  • la modalità personalizzata, che invece lascia la scelta all’utente su quasi tutti i parametri.

Ora passeremo ad analizzare il flusso di esecuzione di tutte e due queste modalità, mettendole a confronto.

Si lancia il comando di creazione da terminale con i permessi di root. Tali permessi servono perché alcune operazioni che andremo ad effettuare hanno bisogno del livello di autorizzazione massima disponibile. Il comando può essere:

  • “creasito” per la modalità personalizzata
  • “creasito nomeutente” per la modalità automatica

Una volta lanciato il comando viene richiesto il nome utente da associare al dominio se siamo nella fase interattiva, altrimenti abbiamo già inserito il nome utente durante la fase di avvio del programma. Lo script controlla che il nome scelto o passato non sia già presente, altrimenti sarà richiesto un nuovo inserimento.

Per convenienza utilizzeremo lo stesso nome utente per l’accesso al filesystem che per l’accesso al database, quindi sarà necessario controllare la presenza dell’utente non solo a livello di sistema ma anche a livello di database Mysql nel nostro caso.

Lo step successivo è la password, che può essere anche generata automaticamente (cosa che accade sia in assenza di input da parte dell’utente che durante la procedura di creazione automatica). Qui è bene porre alcuni vincoli sulla creazione della stringa segreta come:

  • lunghezza di almeno 10 caratteri
  • variabilità dei caratteri: misto fra lettere e numeri

Viene poi richiesto il gruppo di riferimento per l’utente di sistema che deve essere creato, in questo caso lo si può scegliere fra uno già esistente o creare ex-novo. Anche in questo caso deve esistere una scelta di default (un gruppo già esistente) per permettere l’associazione nome utente – gruppo.

La richiesta successiva riguarda il nome da dare alla cartella dove verrà poi ospitata la root del sito. In questo caso si parte da una locazione definita (solitamente la classica /var/www) e l’input richiesto all’utente è concerne alla nuova cartella da creare in questo spazio. Nel caso in cui non c’è input o si è nella modalità automatica viene usato come nome cartella il nome utente. Se la cartella in questione esiste già la procedura richiede all’utente di digitare un nome cartella diverso.

Viene poi richiesto il nome dominio, che di default viene proposto uguale al nome utente. Il “www” viene sostituito con “demo” per la versione dimostrativa del sito. Ovviamente l’utente può scegliere il nome dominio che vuole, a meno che si sia nella fase di creazione automatica. In questo caso il nome dominio rispecchierà le scelte standard.

Siamo ora alla fase di creazione database, infatti viene richiesto il nome del database principale, che normalmente è uguale al nome utente, salvo diversa scelta. Nel caso in cui il database esista già viene forzata la scelta di un nuovo database principale.

Viene poi richiesto il nome del database secondario, che acquisirà il nome nome_utente_demo in caso di procedura automatica. Ovviamente si applicano le medesime opzioni del punto precedente.

Può essere richiesto una dimensione massima per il dominio in questione, espresso in MB o GB, nel caso di assenza di input si sceglie un valore standard.

L’ultima operazione pre-esecuzione è la richiesta di generazione automatica del contenuto del sito, ad esempio copiandolo da un modello esistente.

Fino a questo punto il nostro script non ha eseguito alcun comando, ha solo immagazzinato dati pronto ad eseguirli. Ecco come procederà l’esecuzione dello script:

  • viene generata la root del sito, in cui vengono inclusi la cartella che conterrà il sito ufficiale e quella che conterrà il sito dimostrativo
  • viene creato l’utente di sistema (e la relativa password) la cui home directory sarà la root del sito specificata
  • viene associato l’utente in questione al gruppo prescelto e verranno compilati i permessi di accesso sulla propria home directory
  • viene creato l’utente MySQL (e la relativa password) corrispondente all’utente di sistema, così come i due database di riferimento
  • vengono associati i permessi di lettura/scrittura per il nuovo utente sui due database appena creati
  • viene preparato il virtual host di riferimento per il nuovo sito (/etc/apache2/sites-available/nomeutente), sostituendo in un apposito modello i seguenti dettagli:
    • nome dominio ufficiale
    • locazione corretta all’interno del file system
    • voci standard di configurazione
    • file di log (percorso /var/log/apache2/nomeutente)
      Per riferimento potete controllare il dettaglio del file di configurazione del virtual host presentato nell’articolo precedente della serie.
  • vengono immessi i dati nella cartella del sito (modello sito)
  • viene lanciato il comando di controllo della sintassi di apache: apache2ctl configtest
    L’output viene reso visibile all’utente prima delle ultime due voci di configurazione, al fine di visualizzare eventuali errori durante la fase di generazione del sito.
  • viene chiesto se il programma debba riavviare apache in modo leggero (comando: apache2ctl graceful). Per leggero si intende che le richieste pendenti vengono concluse prima che il riavvio abbia effetto. Ora questo passo lo si compierà solo nel caso in cui il punto precedente abbia dato esito positivo.
  • viene chiesto se debba essere inviata una e-mail riepilogativa dei dettagli del sito appena creato.

A questo punto abbiamo un sito raggiungibile via FTP, con due database di riferimento, completamente gestibile dal cliente, senza che però quest’ultimo possa modificare e/o leggere dati relativi ad altri siti sul server.

Script di cancellazione

Una procedura simile può essere utilizzata per la cancellazione di un sito. In questo caso all’utente sarà richiesto il nome utente di riferimento e se vuole cancellare di conseguenza:

  • VirtualHost di riferimento
  • database, sia dimostrativo che ufficiale
  • utente MySQL e relativi privilegi
  • contenuto del sito
  • file di log del sito
  • utente di sistema.

Una volta approvata l’operazione tutti i dati utili vengono compressi e salvati all’interno di una cartella sempre utilizzabile in caso di ripristino, dopodichè vengono cancellati e Apache riavviato in modo leggero.

Serie GiBiLamp

< Vai all’articolo precedente nella serie GiBiLamp

Vai all’articolo successivo nella serie GiBiLamp >

Tag: ,

Commenti (4)

  • Ciao a tutti,
    complimenti per gli articoli.
    Potrei avere gli script citati nell’articolo, mi sarebbero molto utili?
    Grazie,
    Franca

  • @Franca
    un sistemista Linux può facilmente creartene di più adatti al tuo sistema; a noi interessava più che altro illustrare le necessità da tenere presente. Puoi anche dare un’occhiata a sistemi di gestione semplificati quali WebMin, cPanel, Plesk, e via dicendo.

  • Il mio scopo, dato che insegno in una scuola superiore, era di creare un server “didattico” con un server web virtuale a disposizione per ogni studente in cui esercitarsi con php, mysql, …., joomla.
    Dato che non sono una sistemista, pensavo proprio di seguire questi articoli magari con l’aiuto di un script da seguire come esempio.
    (eventualmente potresti inviarmelo via mail?)

  • @Franca:
    certo, sarò felice di aiutarti per quanto posso, clicca in alto su questo blog sul pulsante “Contatti” e poi scrivici direttamente il tuo indirizzo e-mail, così creiamo un contatto diretto.

I commenti sono chiusi.