Slik automatiserer du samtidige WordPress-implementeringer i flere Linux-servere ved å bruke Ansible - Del 3


I de to foregående artiklene i denne Ansible-serien forklarte vi hvordan du installerer og konfigurerer Ansible for å kjøre kommandoer og utføre komplekse oppgaver på flere eksterne servere samtidig.

I den nåværende opplæringen vil vi forklare hvordan du setter opp WordPress på de samme eksterne serverne:

node1: 192.168.0.29
node2: 192.168.0.30

hvor vi installerte, aktiverte og startet Apache (du vet sikkert nå hvorfor vi valgte å jobbe med en webserver som et første eksempel i den siste opplæringen).

Jeg oppfordrer deg sterkt til å lese Del 1 og Del 2 før du fortsetter for å forsikre deg om at du er kjent med konseptene knyttet til Ansible.

Hvordan installere og konfigurere ‘Ansible’ automatiseringsverktøy for IT-administrasjon – del 1

Hvordan bruke Anisble Playbooks til å automatisere komplekse oppgaver på flere eksterne servere – del 2

Trinn 1: Introduser Ansible-roller

Etter hvert som du begynner å legge til flere og flere oppgaver til skuespill, kan Playbooks bli stadig vanskeligere å håndtere. Av den grunn er den anbefalte tilnærmingen i disse situasjonene (faktisk i alle tilfeller) å bruke en katalogstruktur som inneholder direktivene for hver gruppe oppgaver i distinkte filer.

Denne tilnærmingen lar oss gjenbruke disse konfigurasjonsfilene i separate prosjekter lenger ned i veien. Hver av disse filene definerer hva som kalles i Ansible-økosystemet en rolle.

I vårt tilfelle vil vi opprette to roller. En av dem (kalt wp-avhengigheter) vil bli brukt til å installere WordPress-avhengighetene (PHP og MariaDB – ingen grunn til å installere Apacheda den allerede er installert).

Den andre rollen (kalt wp-install-config) vil inkludere alle nødvendige oppgaver knyttet til installasjon og konfigurasjon av WordPress.

Trinn 2: Opprette Ansible roller

Ansible kommer med et verktøy kalt ansible-galaxy som vil hjelpe oss med å lage katalogstrukturen for rollene våre. Vi vil gjøre dette i /etc/ansible/playbooks (som vi opprettet i Del 2), men i teorien kan du sette det opp i en annen katalog hvis du vil.

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

Neste bekrefter de nyopprettede rollene.

ls -R /etc/ansible/playbooks

I bildet ovenfor kan vi se at ansible-galaxy opprettet to kataloger med samme navn som rollene våre, og andre underkataloger (standard, filer , behandlere, meta, oppgaver, maler og vars) og en README.md-filen i hver av dem.

I tillegg ble en YAML-fil kalt main.yml opprettet i alle katalogene som er oppført tidligere, med unntak av filer og maler.

Vi vil begynne med å redigere følgende konfigurasjonsfiler som angitt:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Merk at vi inkluderer httpd i tilfelle du ikke har fulgt med på de tidligere opplæringene i denne serien.

---
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 (gitt i denne Pastebin) som følger og lagre den på Ansible-kontrollermaskinen din (som du kan se i det siste kopidirektivet ovenfor , lastet jeg den ned til hjemmekatalogen til superbrukeren (/root/wp-config-sample.php).

Viktig: Vær oppmerksom på at verdien for variablene DB_NAME, DB_USER og DB_PASSWORD > er de 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. For nye databaseserverinstallasjoner der root-passordet er tomt, som i dette tilfellet, må vi dessverre sette opp passordet for brukerrot individuelt på hver maskin gjennom mysql_secure_installation .

Så vidt jeg vet, er det ingen tilgjengelig løsning som lar deg sette opp root-passordet via Ansible i samme trinn som du oppretter den administrative databasekontoen for WordPress.

Pass på at du bruker samme passord i alle verter, og kopier deretter legitimasjonen i /root/.my.cnf (den faktiske plasseringen kan variere i ditt tilfelle, men i alle tilfeller må den samsvare med verdien av src-parameteren for oppgaven Kopier ~/.my.cnf til noder i /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

I den filen (se ovenfor) har vi antatt at passordet for root er YourMariaDBRootPassword.

6. Deretter vil lekeboken vår (/etc/ansible/playbooks/playbook.yml) se mye mer organisert og enkel ut sammenlignet med den forrige opplæringen:

cat playbook.yml

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

Til slutt er det på tide å kjøre disse oppgavene ved å påkalle lekeboken vår:

ansible-playbook playbook.yml

La oss nå sjekke om vi kan få tilgang til WordPress Admin-siden ved å bruke IP-adressene til node1 192.168.0.29 og node2 192.168.0.30:

Du kan se de to siste trinnene i følgende screencast:

Som du kan se, kan du sette opp flere WordPress-installasjoner med liten eller ingen innsats ved å bruke Ansible. Deretter kan du bruke det respektive Admin-brukergrensesnittet til å konfigurere hvert nettsted separat.

Endelige betraktninger

Hvis du bruker en annen distribusjon for å distribuere WordPress, kan pakkenavnet variere, men det handler om å installere Apache-nettserveren, MariaDB-databasetjeneren og Python MySQL-modulen. Hvis det er tilfelle, bruk distribusjonens programvareadministrasjonssystem for å søke etter det eksakte pakkenavnet du må installere.

Sammendrag

I denne serien har vi forklart hvordan du bruker Ansible til å kjøre kommandoer og utføre komplekse oppgaver på flere Linux-maskiner samtidig.

Et av slike eksempler er å sette opp WordPress, som vi har diskutert i denne veiledningen. Enten du er systemadministrator eller blogger, håper jeg du har funnet konseptene og eksemplene i denne opplæringen nyttige.

Lykke til og ikke nøl med å kontakte oss hvis du trenger hjelp eller har kommentarer eller forslag!