Introduzione
Ci sono sempre momenti in cui abbiamo bisogno di configurare nuovi server. Questo potrebbe servire per distribuire il carico di lavoro o semplicemente perché abbiamo bisogno di più server. Quando si configurano nuovi server, gli utenti devono utilizzare l'automazione dei server per configurarli. Questo viene fatto per ridurre al minimo l'intervento manuale. Ansible è uno degli strumenti di gestione della configurazione che possono essere utilizzati per configurare automaticamente un nuovo server, riducendo le possibilità di errore umano rispetto alla configurazione manuale del server.
Ansible è uno strumento ricco di funzionalità pur avendo un'architettura semplice. Facilita la configurazione dei server tramite script. Grazie alla sua architettura concisa, Ansible non richiede l'installazione di altri software sui nodi.
In questo tutorial, ti mostreremo come utilizzare Ansible per automatizzare l'installazione di WordPress con lo stack LAMP in esecuzione su un server Ubuntu. WordPress è un CMS utilizzato per creare blog e siti web che utilizza PHP come linguaggio di programmazione e il database MySQL per memorizzare i dati. Una volta installato WordPress, gli utenti possono amministrare il sito utilizzando il frontend web.
Prerequisiti
- Poiché questo tutorial si basa su Ubuntu, dovrai avere installata l'ultima versione di Ubuntu con permessi sudo. Se non hai installato Ubuntu, puoi seguire la nostra Come configurare il tuo server Ubuntu.
- Avremo anche bisogno di un nodo di controllo Ansible. Deve essere un nodo di controllo con permessi sudo e firewall abilitato. Installazione e configurazione di Ansible su Ubuntu 20.04 contiene una guida dettagliata su come configurare Ansible.
- Abbiamo anche bisogno di host Ansible remoti con l'ultima versione di Ubuntu. Gli host sono essenzialmente i nodi gestiti in Ansible.
Riepilogo delle azioni del Playbook Ansible
In questa sezione vedremo cosa fa il nostro Playbook Ansible quando lo eseguiamo. Questa procedura è un'alternativa alla configurazione manuale fornita qui: Come installare WordPress con LAMP su Ubuntu 20.04.
Quando eseguiamo il Playbook, Ansible provvederà a:
- Installare aptitude che è il gestore di pacchetti preferito da Ansible.
- Installare e configurare le estensioni PHP e i pacchetti LAMP.
- Creare un nuovo Apache VirtualHost per il sito web WordPress.
- Abilitare il modulo mod_rewrite e disabilitare il sito web predefinito offerto da Apache.
- Impostare la password per l'utente root di MySQL.
- Rimuovere gli account MySQL anonimi e il database di test.
- Creare un nuovo utente e un nuovo database. Questi verranno utilizzati dal sito web WordPress.
- Configurare UFW per consentire il traffico HTTP sulla porta configurata ( 80 per impostazione predefinita).
- Scaricare ed estrarre WordPress.
- Configurare i permessi e i proprietari delle directory.
- Configurare un nuovo file wp-config.php utilizzando il suo modello.
Guida al Playbook Ansible per WordPress su LAMP
Per prima cosa, dovremo ottenere il playbook WordPress su LAMP e le sue dipendenze dal repository do-community/ansible-playbooks. Cloneremo questo repository all'interno del nodo di controllo Ansible.
Puoi eseguire il comando git pull come indicato di seguito:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Assicurati di avere il pull aggiornato del repository sopra menzionato. Questo nel caso in cui tu abbia già clonato il repository in precedenza. Di seguito viene mostrato come ottenere l'aggiornamento:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
Ora dobbiamo individuare i file all'interno della cartella wordpress-lamp_ubuntu . Il nome di questa cartella può variare a seconda della versione di Ubuntu in uso. A colpo d'occhio, vedrai la seguente struttura in questa directory:

Riassumiamo di seguito lo scopo di questi file:
- files/apache.conf.j2: Apache utilizza VirtualHost. Questo file viene utilizzato per specificare le impostazioni per VirtualHost.
- files/wp-config.php.j2: Questo file contiene le impostazioni per la configurazione di WordPress.
- vars/default.yml: Configura le impostazioni del playbook.
- playbook.yml: Se ci sono attività che devono essere eseguite su un server remoto, questo file viene utilizzato per configurarle.
- readme.md: Guida all'uso del playbook.
Dobbiamo modificare il file delle variabili del playbook per personalizzare l'installazione. Per prima cosa, apri il vars/default.yaml file che si trova all'interno della directory sopra menzionata:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
Questo file è piuttosto lungo. Contiene una serie di configurazioni per aiutarci con la nostra installazione:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #Impostazioni di Sistema php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Impostazioni MySQL mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #Impostazioni HTTP http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
Qui ci interessano le seguenti variabili:
- php_modules: Un array contenente le estensioni PHP che dovrebbero essere installate per supportare la tua configurazione di WordPress. Se desideri installare altri moduli, puoi specificarlo qui.
- mysql_root_password: La password per l'account root MySQL.
- mysql_db: Specifica il nome del database MySQL che verrà utilizzato da WordPress.
- mysql_user: Il nome dell'utente MySQL che dovrebbe essere creato per WordPress.
- mysql_password: La password per il nuovo utente MySQL.
- http_host: Nome di dominio o IP del server.
- http_conf: Il nome del file di configurazione che verrà creato all'interno di Apache.
- http_port: Porta HTTP per questo virtual host. Questa porta viene utilizzata per accedere al sito web. Il valore predefinito è 80.
Successivamente, inserisci i valori nel file sopra indicato, salva e chiudi. Per gli utenti che utilizzano l'editor nano, premi CTRL+X, Y, e premi INVIO.
Ora sei pronto per eseguire questo playbook. Puoi eseguire questo playbook su uno o più server. Se desideri eseguire questo playbook su un server specifico, puoi utilizzare il -l flag. Inoltre, se devi specificare l'utente per connetterti al server remoto, specifica l'utente utilizzando il -u flag.
Supponiamo di voler eseguire il nostro playbook su un server, srvr1 utilizzando l'utente u1, possiamo eseguire il comando seguente:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
Una volta eseguito il comando precedente, otterrai un output simile al seguente:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
Attendi il completamento dell'esecuzione del playbook. Quindi, naviga su server_name sul tuo browser web:
|
1 |
http://server_host_or_ip/ |
Vedrai la schermata:

Successivamente, seleziona la lingua desiderata e premi Continua. Apparirà la schermata successiva che richiederà alcuni dettagli per concludere l'installazione:

Dopodiché, inserisci le informazioni e premi Installa WordPress. Ci vorrà un po' di tempo e poi vedrai una schermata come quella qui sotto:

Seleziona Login per accedere al tuo sito web e configurare le impostazioni:

Contenuto del Playbook Ansible
Ricorda la cartella wordpress-lamp_ubuntu . Contiene alcuni file al suo interno. Esaminiamoli uno alla volta:
● vars/default.yml
Questo file contiene i valori utilizzati per configurare le impostazioni del tuo sito web WordPress:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Impostazioni di Sistema php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Impostazioni MySQL mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #Impostazioni HTTP http_host: "il_tuo_dominio" http_conf: "il_tuo_dominio.conf" http_port: "80" |
● files/apache.conf.j2
Questo file viene utilizzato per configurare il VirtualHost di Apache:
|
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/wp-config.php.j2
Questo file viene utilizzato per configurare WordPress. Contiene chiavi e salt univoci generati da funzioni hash:
|
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * La configurazione di base di WordPress * * Lo script di creazione di wp-config.php utilizza questo file durante * l'installazione. Non è necessario utilizzare il sito web, è possibile * copiare questo file in "wp-config.php" e inserire i valori. * * Questo file contiene le seguenti configurazioni: * * * Impostazioni MySQL * * Chiavi segrete * * Prefisso delle tabelle del database * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** Impostazioni MySQL - È possibile ottenere queste informazioni dal proprio fornitore di hosting ** // /** Il nome del database per WordPress */ define( 'DB_NAME', '{{ mysql_db }}' ); /** Nome utente del database MySQL */ define( 'DB_USER', '{{ mysql_user }}' ); /** Password del database MySQL */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** Hostname di MySQL */ define( 'DB_HOST', 'localhost' ); /** Set di caratteri del database da utilizzare nella creazione delle tabelle. */ define( 'DB_CHARSET', 'utf8' ); /** Tipo di collazione del database. In caso di dubbi, non modificarlo. */ define( 'DB_COLLATE', '' ); /** Accesso al filesystem **/ define('FS_METHOD', 'direct'); /**#@+ * Chiavi univoche e salt di autenticazione. * * Modificali con frasi univoche diverse! * Puoi generarli utilizzando il {@link https://api.wordpress.org/secret-key/1.1/salt/ servizio di chiavi segrete di WordPress.org} * Puoi modificarli in qualsiasi momento per invalidare tutti i cookie esistenti. Questo costringerà tutti gli utenti a effettuare nuovamente l'accesso. * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * Prefisso delle tabelle del database di WordPress. * * È possibile avere più installazioni in un unico database se si assegna a ciascuna * un prefisso univoco. Solo numeri, lettere e trattini bassi, per favore! */ $table_prefix = 'wp_'; /** * Per gli sviluppatori: modalità di debug di WordPress. * * Imposta questo valore su true per abilitare la visualizzazione degli avvisi durante lo sviluppo. * Si raccomanda vivamente agli sviluppatori di plugin e temi di utilizzare WP_DEBUG * nei loro ambienti di sviluppo. * * Per informazioni su altre costanti che possono essere utilizzate per il debug, * visita il Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* Questo è tutto, interrompi la modifica! Buona pubblicazione. */ /** Percorso assoluto della directory di WordPress. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Configura le variabili di WordPress e i file inclusi. */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
Questo file contiene tutte le attività definite da questa configurazione. Inizia elencando un gruppo di server che sono l'obiettivo di questa configurazione. Include il vars/default.yml file delle 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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installa prerequisiti apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: Installa LAMP pacchetti apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: Installa PHP estensioni apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Configurazione Apache - name: Crea document root file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: Configura up Apache VirtualHost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Ricarica Apache tags: [ apache ] - name: Abilita il modulo rewrite shell: /usr/sbin/a2enmod rewrite notify: Ricarica Apache tags: [ apache ] - name: Abilita il nuovo sito shell: /usr/sbin/a2ensite {{ http_conf }} notify: Ricarica Apache tags: [ apache ] - name: Disabilita il sito Apache predefinito shell: /usr/sbin/a2dissite 000-default.conf notify: Riavvia Apache tags: [ 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 tags: [ mysql, mysql-root ] - name: Rimuovi tutti gli account utente anonimi mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Rimuovi il database di test MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Crea il database per WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Crea l'utente MySQL per WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # Configurazione UFW - name: "UFW - Consenti HTTP sulla porta {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # Configurazione WordPress - name: Scarica e estrai l'ultima versione di WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: Imposta la proprietà file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: Imposta i permessi per le directory shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: Imposta i permessi per i file shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: Configura il wp--config template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Ricarica Apache service: name: apache2 state: reloaded - name: Riavvia Apache service: name: apache2 state: restarted |
Puoi modificare questi file come necessario per adattarli alle tue esigenze specifiche per il sito web che stai creando.
Conclusione
In questo tutorial, abbiamo mostrato come automatizzare l'installazione e la configurazione di un sito web WordPress in esecuzione su uno stack LAMP sull'ultimo sistema operativo Ubuntu con Ansible.
Per altre guide sull'utilizzo di Ansible, puoi consultare i seguenti tutorial sul nostro blog:
- Utilizzo di Ansible con CloudSigma
- Automatizzare la configurazione del server utilizzando Ansible e Ubuntu 20.04
- Installazione e configurazione di LAMP su Ubuntu 20.04 con Ansible
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.