Ricerca nel sito web

Come automatizzare le distribuzioni simultanee di WordPress su più server Linux utilizzando Ansible - Parte 3


Nei due articoli precedenti di questa serie Ansible, abbiamo spiegato come installare e configurare Ansible per eseguire comandi ed eseguire attività complesse contemporaneamente su più server remoti.

Nel tutorial attuale spiegheremo come configurare WordPress negli stessi server remoti:

node1: 192.168.0.29
node2: 192.168.0.30

dove abbiamo installato, abilitato e avviato Apache (probabilmente ormai saprai perché abbiamo scelto di lavorare con un server web come esempio iniziale nell'ultimo tutorial).

Ti incoraggio vivamente a leggere la Parte 1 e la Parte 2 prima di procedere oltre per assicurarti di avere familiarità con i concetti associati ad Ansible.

Come installare e configurare lo strumento di automazione "Ansible" per la gestione IT - Parte 1

Come utilizzare i playbook Anisble per automatizzare attività complesse su più server remoti - Parte 2

Passaggio 1: presentazione di Ansible Roles

Man mano che inizi ad aggiungere sempre più attività alle riproduzioni, i tuoi playbook possono diventare sempre più difficili da gestire. Per questo motivo, l'approccio consigliato in queste situazioni (in realtà, in tutti i casi) è quello di utilizzare una struttura di directory che contenga le direttive per ciascun gruppo di attività in file distinti.

Questo approccio ci consente di riutilizzare questi file di configurazione in progetti separati più avanti. Ciascuno di questi file definisce quello che viene chiamato un ruolo nell'ecosistema Ansible.

Nel nostro caso, creeremo due ruoli. Uno di questi (chiamato wp-dependencies) verrà utilizzato per installare le dipendenze di WordPress (PHP e MariaDB – non è necessario installare Apache poiché è già installato).

L'altro ruolo (denominato wp-install-config) includerà tutte le attività necessarie associate all'installazione e alla configurazione di WordPress.

Passaggio 2: creazione di ruoli Ansible

Ansible viene fornito con un'utilità chiamata ansible-galaxy che ci aiuterà a creare la struttura delle directory per i nostri ruoli. Lo faremo in /etc/ansible/playbooks (che abbiamo creato nella Parte 2) ma in teoria puoi configurarlo in un'altra directory, se lo desideri.

cd /etc/ansible/playbooks
ansible-galaxy init wp-dependencies
ansible-galaxy init wp-install-config

Successivamente conferma i ruoli appena creati.

ls -R /etc/ansible/playbooks

Nell'immagine sopra possiamo vedere che ansible-galaxy ha creato due directory con lo stesso nome dei nostri ruoli e altre sottodirectory (defaults, files , handler, meta, task, template e vars) e un README.md all'interno di ciascuno di essi.

Inoltre, all'interno di tutte le directory elencate in precedenza, ad eccezione di file e modelli, è stato creato un file YAML denominato main.yml.

Inizieremo modificando i seguenti file di configurazione come indicato:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Tieni presente che includiamo httpd nel caso in cui non hai seguito i tutorial precedenti di questa serie.

---
tasks file for wp-dependencies
- name: Update packages (this is equivalent to yum update -y)
  yum: name=* state=latest

- name: Install dependencies for WordPress
  yum: name={{ item }} state=present
  with_items:
        - httpd
        - mariadb-server 
        - mariadb
        - php 
        - php-mysql
        - MySQL-python

- name: Ensure MariaDB is running (and enable it at boot)
  service: name=mariadb state=started enabled=yes

- name: Copy ~/.my.cnf to nodes
  copy: src=/root/.my.cnf dest=/root/.my.cnf

- name: Create MariaDB database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create MariaDB username and password
  mysql_user:
        login_user=root
        login_password=YourMariaDBRootPasswordHere
        name={{ wp_mysql_user }}
        password={{ wp_mysql_password }}
        priv=*.*:ALL

2. /etc/ansible/playbooks/wp-dependencies/defaults/main.yml

---
defaults file for wp-dependencies
  wp_mysql_db: MyWP
  wp_mysql_user: wpUser
  wp_mysql_password: wpP4ss

3. /etc/ansible/playbooks/wp-install-config/tasks/main.yml:

---
tasks file for wp-install-config
- name: Create directory to download WordPress
  command: mkdir -p /opt/source/wordpress

- name: Download WordPress
  get_url: url=https://www.wordpress.org/latest.tar.gz dest=/opt/source/wordpress/wordpress.tar.gz validate_certs=no

- name: Extract WordPress
  command: "tar xzf /opt/source/wordpress/wordpress.tar.gz -C /var/www/html --strip-components 1"

- name: Send config file
  copy: src=/root/wp-config-sample.php dest=/var/www/html/wp-config.php mode=0644

4. wp-config-sample.php (fornito in questo Pastebin) come segue e salvalo sul tuo computer controller Ansible (come puoi vedere nell'ultima direttiva di copia sopra , l'ho scaricato nella directory home del superutente (/root/wp-config-sample.php).

Importante: tieni presente che il valore delle variabili DB_NAME, DB_USER e DB_PASSWORD sono gli stessi di /etc/ansible/playbooks/wp-dependencies/defaults/main.yml:

…
/** The name of the database for WordPress */
define('DB_NAME', 'MyWP');

/** MySQL database username */
define('DB_USER', 'wpUser');

/** MySQL database password */
define('DB_PASSWORD', 'wpP4ss');
…

5. Per le nuove installazioni di server database in cui la password root è vuota, come in questo caso, sfortunatamente dobbiamo impostare la password per l'utente root individualmente in ogni macchina tramite mysql_secure_installation .

Per quanto ne so, non esiste una soluzione alternativa che ti permetta di impostare la password di root tramite Ansible nello stesso passaggio in cui crei l'account del database amministrativo per WordPress.

Assicurati di utilizzare la stessa password in tutti gli host, quindi copia le credenziali in /root/.my.cnf (la posizione effettiva potrebbe differire nel tuo caso, ma in tutti i casi deve corrispondere al valore del parametro src per l'attività Copia ~/.my.cnf sui nodi in /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

In quel file (vedi sopra) abbiamo assunto che la password per root sia YourMariaDBRootPassword.

6. Successivamente, il nostro playbook (/etc/ansible/playbooks/playbook.yml) apparirà molto più organizzato e semplice rispetto al tutorial precedente:

cat playbook.yml

- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Infine, è il momento di eseguire queste attività richiamando il nostro playbook:

ansible-playbook playbook.yml

Ora controlliamo se possiamo accedere alla pagina di amministrazione di WordPress utilizzando gli indirizzi IP di node1 192.168.0.29 e node2 192.168.0.30:

Puoi visualizzare gli ultimi due passaggi nel seguente screencast:

Come puoi vedere, puoi configurare più installazioni WordPress con uno sforzo minimo o nullo utilizzando Ansible. Successivamente puoi utilizzare la rispettiva interfaccia utente Amministratore per configurare ciascun sito separatamente.

Considerazioni finali

Se utilizzi un'altra distribuzione per distribuire WordPress, il nome dei pacchetti può variare, ma si tratta di installare il server web Apache, il server del database MariaDB e il modulo Python MySQL. In tal caso, utilizza il sistema di gestione del software della tua distribuzione per cercare il nome esatto del pacchetto che devi installare.

Riepilogo

In questa serie abbiamo spiegato come utilizzare Ansible per eseguire comandi ed eseguire attività complesse contemporaneamente su più macchine Linux.

Uno di questi esempi è la configurazione di WordPress, come abbiamo discusso in questa guida. Che tu sia un amministratore di sistema o un blogger, spero che tu abbia trovato utili i concetti e gli esempi di questo tutorial.

Buona fortuna e non esitare a scriverci se hai bisogno di aiuto o hai commenti o suggerimenti!