Zoeken op website

Hoe u gelijktijdige WordPress-implementaties op meerdere Linux-servers kunt automatiseren met behulp van Ansible - Deel 3


In de vorige twee artikelen van deze Ansible serie hebben we uitgelegd hoe je Ansible installeert en configureert om opdrachten uit te voeren en complexe taken tegelijkertijd uit te voeren op verschillende externe servers.

In de huidige tutorial leggen we uit hoe je WordPress op dezelfde externe servers kunt instellen:

node1: 192.168.0.29
node2: 192.168.0.30

waar we Apache hebben geïnstalleerd, ingeschakeld en gestart (je weet inmiddels waarschijnlijk waarom we ervoor hebben gekozen om met een webserver te werken als eerste voorbeeld in de laatste tutorial).

Ik raad u ten zeerste aan Deel 1 en Deel 2 te lezen voordat u verder gaat, zodat u zeker weet dat u bekend bent met de concepten die verband houden met Ansible.

Hoe u 'Ansible' automatiseringstool voor IT-beheer installeert en configureert – Deel 1

Anisble Playbooks gebruiken om complexe taken op meerdere externe servers te automatiseren – Deel 2

Stap 1: Introductie van Ansible-rollen

Naarmate u steeds meer taken aan toneelstukken toevoegt, kunnen uw Playbooks steeds moeilijker te hanteren worden. Om die reden is de aanbevolen aanpak in dergelijke situaties (eigenlijk in alle gevallen) het gebruik van een directorystructuur die de richtlijnen voor elke groep taken in afzonderlijke bestanden bevat.

Deze aanpak stelt ons in staat deze configuratiebestanden verderop in afzonderlijke projecten opnieuw te gebruiken. Elk van deze bestanden definieert wat in het Ansible-ecosysteem een rol wordt genoemd.

In ons geval zullen we twee rollen creëren. Eén ervan (genaamd wp-dependencies) zal worden gebruikt om de WordPress-afhankelijkheden te installeren (PHP en MariaDB – het is niet nodig om te installeren Apache omdat het al is geïnstalleerd).

De andere rol (genaamd wp-install-config) omvat alle noodzakelijke taken die verband houden met de installatie en configuratie van WordPress.

Stap 2: Ansible-rollen creëren

Ansible wordt geleverd met een hulpprogramma genaamd ansible-galaxy dat ons zal helpen de directorystructuur voor onze rollen te creëren. We zullen dit doen in /etc/ansible/playbooks (dat we hebben gemaakt in Deel 2), maar in theorie kun je het in een andere map instellen als je wilt.

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

Bevestigt vervolgens de nieuw aangemaakte rollen.

ls -R /etc/ansible/playbooks

In de bovenstaande afbeelding kunnen we zien dat ansible-galaxy twee mappen heeft gemaakt met dezelfde naam als onze rollen, en andere submappen (defaults, bestanden , handlers, meta, taken, sjablonen en vars) en een README.md bestand in elk ervan.

Bovendien is er een YAML-bestand met de naam main.yml gemaakt in alle eerder genoemde mappen, met uitzondering van bestanden en sjablonen.

We beginnen met het bewerken van de volgende configuratiebestanden zoals aangegeven:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Houd er rekening mee dat we httpd toevoegen voor het geval u de vorige tutorials van deze serie niet hebt gevolgd.

---
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 (meegeleverd in deze Pastebin) als volgt en sla het op op uw Ansible-controllermachine (zoals u kunt zien in de laatste kopieerrichtlijn hierboven , heb ik het gedownload naar de homedirectory van de superuser (/root/wp-config-sample.php).

Belangrijk: houd er rekening mee dat de waarde voor variabelen DB_NAME, DB_USER en DB_PASSWORD zijn hetzelfde als in /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. Voor nieuwe databaseserverinstallaties waarbij het rootwachtwoord leeg is, zoals in dit geval, moeten we helaas op elke machine het wachtwoord voor gebruikersroot individueel instellen via mysql_secure_installation .

Voor zover ik weet is er geen oplossing beschikbaar waarmee u het rootwachtwoord kunt instellen via Ansible in dezelfde stap waarin u het beheerdersdatabaseaccount voor WordPress aanmaakt.

Zorg ervoor dat u op alle hosts hetzelfde wachtwoord gebruikt en kopieer vervolgens de inloggegevens in /root/.my.cnf (de werkelijke locatie kan in uw geval verschillen, maar moet in alle gevallen overeenkomen met de waarde van de parameter src voor de taak Kopieer ~/.my.cnf naar knooppunten in /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

In dat bestand (zie hierboven) zijn we ervan uitgegaan dat het wachtwoord voor root YourMariaDBRootPassword is.

6. Vervolgens zal ons playbook (/etc/ansible/playbooks/playbook.yml) er veel georganiseerder en eenvoudiger uitzien in vergelijking met de vorige tutorial:

cat playbook.yml

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

Eindelijk is het tijd om deze taken uit te voeren door ons draaiboek aan te roepen:

ansible-playbook playbook.yml

Laten we nu controleren of we toegang kunnen krijgen tot de WordPress-beheerderspagina met behulp van de IP-adressen van node1 192.168.0.29 en node2 192.168.0.30:

De laatste twee stappen kun je bekijken in de volgende screencast:

Zoals u kunt zien, kunt u met weinig tot geen moeite meerdere WordPress-installaties opzetten met behulp van Ansible. Vervolgens kunt u de respectievelijke Admin-gebruikersinterface gebruiken om elke site afzonderlijk te configureren.

Laatste overwegingen

Als u een andere distributie gebruikt om WordPress te implementeren, kan de pakketnaam variëren, maar het komt neer op het installeren van de Apache-webserver, de MariaDB-databaseserver en de Python MySQL-module. Als dat het geval is, gebruik dan het softwarebeheersysteem van uw distributie om te zoeken naar de exacte pakketnaam die u moet installeren.

Samenvatting

In deze serie hebben we uitgelegd hoe je Ansible kunt gebruiken om opdrachten uit te voeren en complexe taken tegelijkertijd uit te voeren op verschillende Linux-machines.

Een van dergelijke voorbeelden is het opzetten van WordPress, zoals we in deze handleiding hebben besproken. Of u nu een systeembeheerder of een blogger bent, ik hoop dat u de concepten en voorbeelden in deze tutorial nuttig vindt.

Veel succes en aarzel niet om ons een bericht te sturen als u hulp nodig heeft of opmerkingen of suggesties heeft!