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!