Website-Suche

So automatisieren Sie gleichzeitige WordPress-Bereitstellungen auf mehreren Linux-Servern mit Ansible – Teil 3


In den beiden vorherigen Artikeln dieser Ansible-Reihe haben wir erklärt, wie man Ansible installiert und konfiguriert, um Befehle auszuführen und komplexe Aufgaben auf mehreren Remote-Servern gleichzeitig auszuführen.

Im aktuellen Tutorial erklären wir Ihnen, wie Sie WordPress auf denselben Remote-Servern einrichten:

node1: 192.168.0.29
node2: 192.168.0.30

wo wir Apache installiert, aktiviert und gestartet haben (Sie wissen wahrscheinlich mittlerweile, warum wir uns im letzten Tutorial für die Arbeit mit einem Webserver als erstes Beispiel entschieden haben).

Ich empfehle Ihnen dringend, Teil 1 und Teil 2 zu lesen, bevor Sie fortfahren, um sicherzustellen, dass Sie mit den mit Ansible verbundenen Konzepten vertraut sind.

So installieren und konfigurieren Sie das Automatisierungstool „Ansible“ für das IT-Management – Teil 1

So verwenden Sie Anisble Playbooks zur Automatisierung komplexer Aufgaben auf mehreren Remote-Servern – Teil 2

Schritt 1: Einführung in Ansible-Rollen

Wenn Sie immer mehr Aufgaben zu Spielen hinzufügen, kann es immer schwieriger werden, mit Ihren Playbooks umzugehen. Aus diesem Grund besteht der empfohlene Ansatz in solchen Situationen (eigentlich in allen Fällen) darin, eine Verzeichnisstruktur zu verwenden, die die Anweisungen für jede Aufgabengruppe in unterschiedlichen Dateien enthält.

Dieser Ansatz ermöglicht es uns, diese Konfigurationsdateien später in separaten Projekten wiederzuverwenden. Jede dieser Dateien definiert, was im Ansible-Ökosystem als Rolle bezeichnet wird.

In unserem Fall erstellen wir zwei Rollen. Eine davon (genannt wp-dependencies) wird zur Installation der WordPress-Abhängigkeiten (PHP und MariaDB – keine Installation von erforderlich) verwendet Apache, da es bereits installiert ist).

Die andere Rolle (mit dem Namen wp-install-config) umfasst alle notwendigen Aufgaben im Zusammenhang mit der Installation und Konfiguration von WordPress.

Schritt 2: Ansible-Rollen erstellen

Ansible wird mit einem Dienstprogramm namens ansible-galaxy geliefert, das uns dabei hilft, die Verzeichnisstruktur für unsere Rollen zu erstellen. Wir werden dies in /etc/ansible/playbooks tun (das wir in Teil 2 erstellt haben), aber theoretisch können Sie es auch in einem anderen Verzeichnis einrichten, wenn Sie möchten.

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

Als nächstes werden die neu erstellten Rollen bestätigt.

ls -R /etc/ansible/playbooks

Im obigen Bild können wir sehen, dass ansible-galaxy zwei Verzeichnisse mit demselben Namen wie unsere Rollen und weitere Unterverzeichnisse (defaults, files) erstellt hat , Handler, Meta, Aufgaben, Vorlagen und Variablen) und ein < In jedem von ihnen befindet sich die DateiREADME.md.

Darüber hinaus wurde in allen zuvor aufgeführten Verzeichnissen mit Ausnahme von Dateien und Vorlagen eine YAML-Datei mit dem Namen main.yml erstellt.

Wir beginnen mit der Bearbeitung der folgenden Konfigurationsdateien wie angegeben:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Beachten Sie, dass wir httpd einbeziehen, falls Sie die vorherigen Tutorials dieser Serie nicht mitverfolgt haben.

---
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 (in diesem Pastebin bereitgestellt) wie folgt und speichern Sie es auf Ihrem Ansible-Controller-Computer (wie Sie in der letzten Kopieranweisung oben sehen können). , ich habe es in das Home-Verzeichnis des Superusers heruntergeladen (/root/wp-config-sample.php).

Wichtig: Bitte beachten Sie, dass der Wert für die Variablen DB_NAME, DB_USER und DB_PASSWORD ist > sind die gleichen wie 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. Für neue Datenbankserverinstallationen, bei denen das Root-Passwort leer ist, wie in diesem Fall, müssen wir leider das Passwort für den Benutzer Root auf jedem Computer einzeln über mysql_secure_installation einrichten .

Soweit ich weiß, gibt es keine verfügbare Problemumgehung, die es Ihnen ermöglicht, das Root-Passwort über Ansible im selben Schritt einzurichten, in dem Sie das administrative Datenbankkonto für WordPress erstellen.

Stellen Sie sicher, dass Sie auf allen Hosts dasselbe Passwort verwenden, und kopieren Sie dann die Anmeldeinformationen in /root/.my.cnf (der tatsächliche Speicherort kann in Ihrem Fall anders sein, aber in allen Fällen muss er mit dem Wert übereinstimmen des src-Parameters für die Aufgabe Copy ~/.my.cnf in Knoten in /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

In dieser Datei (siehe oben) haben wir angenommen, dass das Passwort für root YourMariaDBRootPassword ist.

6. Als nächstes wird unser Playbook (/etc/ansible/playbooks/playbook.yml) im Vergleich zum vorherigen Tutorial viel organisierter und einfacher aussehen:

cat playbook.yml

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

Schließlich ist es an der Zeit, diese Aufgaben auszuführen, indem Sie unser Playbook aufrufen:

ansible-playbook playbook.yml

Überprüfen wir nun, ob wir mit den IP-Adressen node1 192.168.0.29 und node2 192.168.0.30 auf die WordPress-Administratorseite zugreifen können:

Die letzten beiden Schritte können Sie sich im folgenden Screencast ansehen:

Wie Sie sehen, können Sie mit Ansible mehrere WordPress-Installationen mit wenig bis gar keinem Aufwand einrichten. Anschließend können Sie über die jeweilige Admin-Benutzeroberfläche jede Site separat konfigurieren.

Schlussbetrachtungen

Wenn Sie eine andere Distribution zum Bereitstellen von WordPress verwenden, kann der Paketname variieren, es kommt jedoch auf die Installation des Apache-Webservers, des MariaDB-Datenbankservers und des Python-MySQL-Moduls an. Wenn dies der Fall ist, verwenden Sie das Softwareverwaltungssystem Ihrer Distribution, um nach dem genauen Paketnamen zu suchen, den Sie installieren müssen.

Zusammenfassung

In dieser Serie haben wir erklärt, wie Sie mit Ansible Befehle ausführen und komplexe Aufgaben auf mehreren Linux-Maschinen gleichzeitig ausführen können.

Eines dieser Beispiele ist die Einrichtung von WordPress, wie wir in diesem Leitfaden besprochen haben. Egal, ob Sie Systemadministrator oder Blogger sind, ich hoffe, dass Sie die Konzepte und Beispiele in diesem Tutorial nützlich fanden.

Viel Glück und zögern Sie nicht, uns zu kontaktieren, wenn Sie Hilfe benötigen oder Kommentare oder Vorschläge haben!