Sådan automatiseres samtidige WordPress-implementeringer i flere Linux-servere ved hjælp af Ansible - Del 3


I de to foregående artikler i denne Ansible-serie forklarede vi, hvordan man installerer og konfigurerer Ansible til at køre kommandoer og udføre komplekse opgaver på flere eksterne servere samtidigt.

I den aktuelle vejledning forklarer vi, hvordan du opsætter WordPress på de samme eksterne servere:

node1: 192.168.0.29
node2: 192.168.0.30

hvor vi installerede, aktiverede og startede Apache (du ved sikkert nu, hvorfor vi valgte at arbejde med en webserver som et indledende eksempel i den sidste tutorial).

Jeg opfordrer dig stærkt til at læse del 1 og del 2, før du går videre for at sikre dig, at du er fortrolig med de begreber, der er knyttet til Ansible.

Trin 1: Introduktion af anvendelige roller

Når du begynder at tilføje flere og flere opgaver til afspilninger, kan dine Playbooks blive stadig sværere at håndtere. Af den grund er den anbefalede tilgang i disse situationer (faktisk i alle tilfælde) at bruge en katalogstruktur, der indeholder direktiverne for hver gruppe af opgaver i forskellige filer.

Denne tilgang giver os mulighed for at genbruge disse konfigurationsfiler i separate projekter længere nede. Hver af disse filer definerer, hvad der i Ansible-økosystemet kaldes en rolle.

I vores tilfælde opretter vi to roller. En af dem (kaldet wp-afhængigheder) vil blive brugt til at installere WordPress-afhængigheder (PHP og MariaDB - ingen grund til at installere Apache, da den allerede er installeret).

Den anden rolle (kaldet wp-install-config) inkluderer alle de nødvendige opgaver, der er knyttet til installationen og konfigurationen af WordPress.

Trin 2: Oprettelse af anvendelige roller

Ansible kommer med et værktøj kaldet ansible-galaxy, der hjælper os med at oprette katalogstrukturen til vores roller. Vi gør dette i/etc/ansible/playbooks (som vi oprettede i del 2), men i teorien kan du oprette det i en anden mappe, hvis du vil.

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

Næste bekræfter de nyoprettede roller.

# ls -R /etc/ansible/playbooks

I ovenstående billede kan vi se, at ansible-galaxy oprettede to mapper med samme navn som vores roller og andre underkataloger (standardindstillinger, filer, handlers, meta, opgaver, skabeloner og vars) og en README.md-fil inde i hver af dem.

Derudover blev en YAML-fil med navnet main.yml oprettet i alle de tidligere nævnte mapper med undtagelse af filer og skabeloner.

Vi begynder med at redigere følgende konfigurationsfiler som angivet:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Bemærk, at vi inkluderer httpd, hvis du ikke har fulgt sammen med de tidligere tutorials i denne 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 (leveret i denne Pastebin) som følger og gem den på din Ansible-controller-maskine (som du kan se i det sidste kopidirektiv ovenfor, downloadede jeg det til superbrugerens (/ root) hjemmekatalog /wp-config-sample.php).

Vigtigt: Vær opmærksom på, at værdien for variablerne DB_NAME, DB_USER og DB_PASSWORD er den samme som i /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. Ved nye databaseserverinstallationer, hvor rodadgangskoden er tom, som i dette tilfælde, er vi desværre nødt til at konfigurere adgangskoden til brugerrod individuelt i hver maskine gennem mysql_secure_installation.

Så vidt jeg ved, er der ingen tilgængelig løsning, der giver dig mulighed for at oprette rodadgangskoden via Ansible i samme trin, hvor du opretter den administrative databasekonto til WordPress.

Sørg for at bruge den samme adgangskode i alle værter, og kopier derefter legitimationsoplysningerne i /root/.my.cnf (den aktuelle placering kan variere i dit tilfælde, men i alle tilfælde skal den matche værdien af src-parameteren for opgaven Kopier ~/.my.cnf til noder i /etc/ansible/playbooks/wp-dependencies/tasks/main.yml).

I den fil (se ovenfor) har vi antaget, at adgangskoden til root er YourMariaDBRootPassword.

6. Dernæst vil vores playbook (/etc/ansible/playbooks/playbook.yml) se meget mere organiseret og enkel ud sammenlignet med den foregående tutorial:

# cat playbook.yml
- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Endelig er det tid til at køre disse opgaver ved at påkalde vores playbook:

# ansible-playbook playbook.yml

Lad os nu kontrollere, om vi kan få adgang til WordPress Admin-siden ved hjælp af IP-adresserne til node1 192.168.0.29 og node2 192.168.0.30:

Du kan se de sidste to trin i følgende screencast:

Som du kan se, kan du oprette flere WordPress-installationer med ringe eller ingen indsats ved hjælp af Ansible. Derefter kan du bruge den respektive administratorbrugergrænseflade til at konfigurere hvert websted separat.

Afsluttende overvejelser

Hvis du bruger en anden distribution til at implementere WordPress, kan pakkenavnet variere, men det kommer til at installere Apache-webserveren, MariaDB-databaseserveren og Python MySQL-modulet. Hvis det er tilfældet, skal du bruge din distributions software management system til at søge efter det nøjagtige pakkenavn, du har brug for at installere.

Resumé

I denne serie har vi forklaret, hvordan man bruger Ansible til at køre kommandoer og udføre komplekse opgaver i flere Linux-maskiner samtidigt.

Et af sådanne eksempler er opsætning af WordPress, som vi har diskuteret i denne vejledning. Uanset om du er systemadministrator eller blogger, håber jeg, du har fundet begreberne og eksemplerne i denne vejledning nyttige.

Held og lykke og tøv ikke med at sende os en linje, hvis du har brug for hjælp eller har kommentarer eller forslag!