L’automazione dei server è un processo sicuro e affidabile per gestire e monitorare i server in modo efficace e tecnologicamente avanzato. A differenza dello stile tradizionale di gestione dei server nei data center controllati da un team dedicato di esperti, tutti i server vengono gestiti tramite l’automazione. Di conseguenza, gli errori umani sono ridotti al minimo.
Strumenti di gestione della configurazione come Ansible, Puppet, Terraform, solo per citarne alcuni, vengono tipicamente utilizzati per automatizzare i server. Questi strumenti configurano i server tramite l’automazione stabilendo procedure standard per i nuovi server ed eliminando i potenziali errori derivanti dalla configurazione manuale.
Ansible è un robusto progetto open-source. È flessibile, facile da usare e ha un’architettura estremamente semplificata. Non è richiesta alcuna competenza di programmazione per utilizzare i playbook di Ansible e non richiede l’installazione di software sui nodi. Soprattutto, è dotato di eccellenti funzionalità che consentono di scrivere script e ottimizzare l’automazione.
In questa guida, ti guideremo passo dopo passo nell’installazione e nella configurazione di LAMP su Ubuntu 20.04 con Ansible.
Prerequisiti
Per seguire questo tutorial, avrai bisogno di:
- Ubuntu installato sul tuo sistema.
- Uno o più host Ansible: Uno o più host Ansible remoti con l’ultima versione di Ubuntu devono essere configurati inizialmente. Segui il tutorial Automazione della configurazione del server tramite Ansible e Ubuntu 20.04 per la configurazione.
- Un nodo di controllo Ansible: Una macchina Ubuntu con Ansible installato, configurato e connesso ai tuoi host Ansible tramite chiavi SSH:
-
- Il nodo di controllo deve avere un utente con privilegi sudo e un firewall impostato su ATTIVO.
- Se hai bisogno di aiuto per configurare Ansible, consulta il tutorial su installazione e configurazione di Ansible su Ubuntu 20.04.
Qual è lo scopo del playbook Ansible?
Questo playbook Ansible è un modo alternativo per eseguire la procedura descritta nella nostra guida Configurazione dello stack LAMP – Linux Apache MySQL PHP.
L’esecuzione del playbook Ansible comporterà le seguenti azioni sui tuoi host Ansible:
-
Installare aptitude, un’alternativa al gestore di pacchetti apt preferito da Ansible.
-
Installare tutti i pacchetti LAMP necessari.
-
Creare un nuovo VirtualHost di Apache e configurare una document root dedicata.
-
Impostare su ATTIVO il nuovo VirtualHost.
-
Impostare su DISATTIVO il sito web predefinito di Apache, ovvero impostare la variabile disable_default su true.
-
Scegliere una password per l’utente root di MySQL.
-
Rimuovere gli account MySQL anonimi e il database di test.
-
Configurare UFW per consentire il traffico HTTP sulla porta configurata, dove il valore predefinito è 80.
-
Configurare uno script PHP di test.
Al termine dell’esecuzione del playbook Ansible, vedrai un ambiente web PHP in esecuzione su Apache in base alle configurazioni impostate.
Utilizzo del playbook Ansible
Innanzitutto, ottieni il playbook LAMP e le sue dipendenze dal repository do-community/ansible-playbooks. Successivamente, clona il repository con il playbook LAMP in una cartella locale all’interno del nodo di controllo Ansible.
Esegui il comando git pull per assicurarti di avere accesso al contenuto corretto che utilizzeremo in questo tutorial:
|
1 2 |
cd ~/ansible-playbooks git pull |
Se stai utilizzando il repository do-community/ansible-playbooks per la prima volta, considera di clonare il repository nella tua cartella home:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Vai alla cartella lamp_ubuntu2004 e vedrai la struttura:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Ecco una panoramica del significato di questi file:
-
files/info.php.j2: Questo è un file modello (template) in cui puoi configurare una pagina di test PHP nella root del server web.
-
files/apache.conf.j2: Un altro file modello utilizzato per configurare il VirtualHost di Apache.
-
vars/default.yml: È un file di variabili per personalizzare le impostazioni del playbook.
-
playbook.yml: Questo file contiene tutti i contenuti delle attività (task) da eseguire sul/i server remoto/i.
-
readme.md: Un file di lettura contenente le informazioni su questo playbook.
Personalizziamo le configurazioni di MySQL e Apache apportando modifiche al file delle variabili del playbook. Naviga nella directory lamp_ubuntu2004 e apri il file vars/default.yml utilizzando l'editor nano:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
All'apertura del file vars/default.yml, ci sarà un elenco di variabili che devono essere modificate:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Vediamo in dettaglio ciascuna delle variabili:
-
mysql_root_password: Memorizza la password per l'account MySQL root.
-
app_user: È un utente remoto non root sull'host Ansible che funge da proprietario dei file dell'applicazione.
-
http_host: Mostra il tuo nome di dominio.
-
http_conf: Mostra il nome del file di configurazione creato all'interno di Apache.
-
http_port: È la porta HTTP per questo host virtuale, e 80 è quella predefinita.
-
disable_default: Utilizzato per annullare le opzioni predefinite fornite con Apache.
Quindi, salva e chiudi il file vars/default.yml.
Una volta completata la configurazione, siamo pronti per eseguire questo playbook sui server. Per impostazione predefinita, la maggior parte dei server nei playbook è configurata per essere eseguita su ogni server negli inventari. Utilizziamo il flag -l per influire solo su un singolo server o su un sottoinsieme di gruppi selezionato interessato dal playbook. In alternativa, possiamo utilizzare il flag -u per ottenere una visualizzazione dettagliata di quale server remoto si sta connettendo ed eseguendo sugli host remoti.
Eseguiamo il playbook su un server server1 e connettiamolo con un utente come justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Otterrai un output simile a questo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Raccolta Dati] *********************************************************************************************************ok: [server1] TASK [Installazione prerequisiti] *********************************************************************************************************ok: [server1] => (elemento=aptitude) ... TASK [UFW - Consenti HTTP su porta 80] ********************************************************************************************************* modificato: [server1] TASK [Configura Up PHP Info Pagina] ********************************************************************************************************* modificato: [server1] ESECUZIONE HANDLER [Ricarica Apache] ********************************************************************************************************* modificato: [server1] ESECUZIONE HANDLER [Riavvia Apache] ********************************************************************************************************* modificato: [server1] PLAY RIEPILOGO ********************************************************************************************************* server1 : ok=15 modificato=11 non raggiungibile=0 fallito=0 saltato=0 recuperato=0 ignorato=0 |
Una volta completata l'esecuzione del playbook, apri il browser web e accedi all'host del server. Non dimenticare di aggiungere /info.php alla fine dell'IP:
|
1 |
http://server_host_or_IP/info.php |
Cliccando su questo URL, vedrai una pagina come questa:
|
Attenzione: La pagina visualizzata contiene informazioni sensibili sul tuo ambiente PHP. Pertanto, si consiglia di rimuovere le informazioni personali dal server utilizzando il seguente comando: rm -f /var/www/info.php |
Cosa c'è nel Playbook?
Successivamente, cerchiamo di capire il significato e l'importanza dei file utilizzati nel ansible-playbook contenuto:
-
vars/default.yml
Il default.yml file di variabili contiene il nome di dominio e la password dell'account MySQL root . Questi sono i valori predefiniti utilizzati nei ansible-playbook task:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
Il apache.conf.j2 file è un Jinja 2 file di template utilizzato per configurare un nuovo VirtualHost Apache. Le variabili utilizzate all'interno di questo template devono essere definite nel vars/default.yml file di variabili:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Simile a files/apache.conf.j2, il info.php.j2 file è anch'esso un template Jinja. Utilizziamo questo file per configurare uno script PHP di test nella document root di un server LAMP appena configurato:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
Il playbook.yml file è il luogo in cui sono definite tutte le attività di questa configurazione. In questo file vengono configurati tutti gli stack LAMP. Inizia con la definizione del gruppo di server di destinazione ed è impostato su all. Inoltre, accetta il become valore come true ( become: true), e definisce tutte le attività che devono essere eseguite. Successivamente, il yaml file ha il file predefinito, che è il vars/default.yml file di variabili, per caricare le opzioni di configurazione:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installa prerequisiti apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] # Configurazione Apache - name: Installa LAMP pacchetti apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Crea document root file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Configura il virtualhost Apache template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Ricarica Apache - name: Abilita nuovo sito shell: /usr/sbin/a2ensite {{ http_conf }} notify: Ricarica Apache - name: Disabilita predefinito Apache sito shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Ricarica Apache # Configurazione MySQL - name: Imposta la password di root mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Rimuove tutti gli account utente anonimi mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Rimuove il database di test MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # Configurazione UFW - name: "UFW - Consenti HTTP sulla porta {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # Pagina Info PHP - name: Configura la pagina Info PHP template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Ricarica Apache service: name: apache2 state: reloaded - name: Riavvia Apache service: name: apache2 state: restarted |
Puoi modificare questi file in base alle esigenze e ai requisiti del tuo progetto.
Conclusione
In questo tutorial, abbiamo esaminato i passaggi per installare e configurare LAMP su un server remoto con Ansible. Ci sono molte altre opzioni di personalizzazione con cui puoi sperimentare. Ad esempio, l'utilizzo della documentazione ufficiale di Ansible e l'utilizzo dei casi di mysql_user dal modulo Ansible è un ottimo modo per salire di livello. Inoltre, segui i passaggi descritti in questa guida per fare pratica con l'automazione utilizzando altri strumenti di gestione della configurazione e sistemi operativi per aumentare il livello di difficoltà.
Sei nuovo dello stack LAMP e vuoi approfondire questo argomento? Esplora i seguenti tutorial sul nostro blog:
- Come installare WordPress con LAMP su Ubuntu 20.04
- Come installare lo stack Linux, Apache, MySQL, PHP (LAMP) su Centos-7
- Come installare lo stack LEMP Linux Nginx MySQL PHP su Ubuntu 20.04
Buon computing!

Commenti
Ancora nessun commento. Scrivi il primo.