So automatisieren Sie die Installation von WordPress unter Ubuntu 14.04 mit Ansible

Einführung

Ansible ist eine einfache und agentenlose Möglichkeit, Ihre Infrastruktur zu automatisieren. Wenn Sie feststellen, dass Sie WordPress immer wieder bereitstellen, kann Ansible Ihnen viel Zeit sparen.

Mit ein paar Zeilen YAML (einer einfachen Auszeichnungssprache) automatisieren wir den normalerweise langwierigen Prozess der Einrichtung von WordPress auf einem neuen Ubuntu 14.04-Server. Wir werden WordPress mehr oder weniger gemäß dem in this tutorial beschriebenen Prozess installieren, jedoch automatisch.

Wir werden zwei Server verwenden: Einen Build-Server, auf dem Ansible ausgeführt wird, und einen Zielserver, auf dem WordPress mithilfe von Ansible installiert wird.

Voraussetzungen

Um dieses Tutorial abzuschließen, müssen Sie Folgendes einrichten:

  • Ein Build-Server mit Ubuntu 14.04. Wir werden Ansible auf diesem Server installieren (in diesem Tutorial als * Build-Server * bezeichnet). Wir werden uns bei diesem Server anmelden und alle Dateien und Befehle für dieses Tutorial werden auf diesem Server ausgeführt

  • Ein Zielserver, auf dem Ubuntu 14.04 ausgeführt wird. Wir werden WordPress (via Ansible) auf diesem Server installieren (in diesem Tutorial als * wordpress-server * bezeichnet)

  • Sudo-Benutzer ohne Rootberechtigung für beide Server konfiguriert

  • Fügen Sie den SSH-Schlüssel Ihres * build-server * sudo-Benutzers zu den authorisierten_schlüsseln Ihres * wordpress-server * sudo-Benutzers hinzu. Sie können dies einrichten, indem Sie this tutorial folgen. Sie sollten das Tutorial von Ihrem * Build-Server * ausführen und den Schlüssel auf Ihren * WordPress-Server * hochladen.

(Optional) Passwortloser sudo-Zugriff

Es ist * schneller *, aber * weniger sicher *, den passwortlosen sudo-Zugang auf Ihrem * wordpress-server * zu nutzen.

Um unserem sudo-Benutzer auf dem * wordpress-server * diese Berechtigung zu erteilen, müssen wir die sudoers-Datei bearbeiten. Geben Sie + visudo + ein, um die sudoers-Datei zu bearbeiten:

visudo

Fügen Sie diese Zeile am Ende hinzu:

ALL=(ALL) NOPASSWD: ALL

Dies muss die * letzte Zeile * in der Datei sein. Es ist wichtig, dass dies die letzte Zeile ist, sonst wird sie überschrieben.

  • Hinweis: * Bearbeiten Sie die sudoers-Datei immer mit dem Befehl + visudo +. Dadurch werden Ihre Änderungen vor dem Speichern der Datei überprüft. Auf diese Weise können Sie verhindern, dass Sie sich versehentlich vollständig aus dem Computer ausschließen.

Sobald Sie dies getan haben, sollten Sie in der Lage sein, den folgenden Befehl auf dem * wordpress-server * auszuführen, ohne ein Passwort anzugeben:

sudo echo "Hello"

In diesem Tutorial können Sie jetzt die Befehle "+ ansible-playbook " ohne die Markierung " -K +" ausführen, sodass Sie das sudo-Kennwort nicht manuell eingeben müssen.

ansible-playbook playbook.yml -i hosts -u

Schritt 1 - Ansible installieren

In diesem Abschnitt installieren wir Ansible auf Ihrem * Build-Server *.

Stellen Sie eine SSH-Verbindung zu Ihrem * Build-Server * her und führen Sie den folgenden Befehl aus, um Ansible zu installieren:

sudo apt-get install ansible -y

Sie können sicherstellen, dass Ansible installiert ist, indem Sie Folgendes ausführen:

ansible --version

Sie sollten eine Ausgabe wie die folgende sehen:

Outputansible 1.5.4

Schritt 2 - Einrichten der Dateistruktur

Nachdem wir Ansible installiert haben, bereiten wir die Dateistruktur für unser Ansible-Playbook vor.

Erstelle ein Verzeichnis für unser Playbook.

cd ~
mkdir wordpress-ansible && cd wordpress-ansible

+ cd + in dieses Verzeichnis und erstelle zwei Dateien: eine mit dem Namen + playbook.yml + (hier schreiben wir die Befehle zum Installieren von WordPress) und eine andere mit dem Namen + hosts + (hier wird Ansible mitgeteilt, auf welchen Servern sie ausgeführt werden sollen die Befehle):

touch playbook.yml
touch hosts

Es wird empfohlen, unsere Spielbücher in Rollen aufzuteilen. Sie können sich Rollen als wiederverwendbare Module vorstellen. Für dieses Projekt erstellen wir vier Rollen:

  • Server

  • php

  • MySQL

  • WordPress

Erstellen Sie im Projektstammordner (+ ~ / wordpress-ansible +) ein Verzeichnis mit den Namen + role + und + cd +:

mkdir roles && cd roles

Wir können unsere Rollen mit einem Ansible-Tool namens "+ ansible-galaxy" booten. Für jede Rolle, die wir erstellen möchten, führen wir "+ ansible-galaxy init +" aus:

ansible-galaxy init server
ansible-galaxy init php
ansible-galaxy init mysql
ansible-galaxy init wordpress

Sie werden feststellen, dass dadurch für jede unserer Rollen eine vollständige Dateistruktur erstellt wird. Dies entspricht den Best Practices von Ansible. Zum größten Teil werden wir uns mit der Datei + tasks / main.yml + jeder Rolle befassen.

Zu diesem Zeitpunkt sollten wir die folgende Dateistruktur haben:

[.]
|_ playbook.yml
|_ hosts
|_ [roles]
     |_ [server]
           |_ ...
     |_ [php]
           |_ ...
     |_ [mysql]
           |_ ...
     |_ [wordpress]
           |_ ...

Schritt 3 - Das Playbook schreiben

In diesem Abschnitt schreiben wir die Befehle, um WordPress auf unserem Remote-Server zu installieren.

Inventar (Hosts-Datei)

Ein Ansible-Inventar informiert Ansible über die Server, auf denen WordPress installiert werden soll. Wir können unsere Playbooks für die Server oder Servergruppen ausführen, die in unserer Inventardatei definiert sind (+ hosts +). Unser Inventar ist sehr einfach.

Bearbeiten Sie + hosts +:

nano ~/wordpress-ansible/hosts

Fügen Sie die Zeile für "+ [wordpress] +" und darunter die IP-Adresse Ihres * wordpress-Servers * ein:

Gastgeber

[wordpress]

Spielbuch

Wir können uns ein Playbook als Definition Ihrer WordPress-App vorstellen. Unser Playbook kombiniert die Rollen, die wir erstellt haben, um eine nützliche Anwendung (in diesem Fall eine WordPress-Site) zu konfigurieren.

Bearbeiten Sie die Playbook-Datei:

nano ~/wordpress-ansible/playbook.yml

Fügen Sie diese Inhalte hinzu, die Ansible mitteilen, auf welchen Hosts die Rollen ausgeführt werden sollen (die + wordpress-Hosts in der` + hosts`-Datei) und welche Rollen ausgeführt werden sollen:

playbook.yml

- hosts: wordpress

 roles:
   - server
   - php
   - mysql
   - wordpress

Gehen Sie in Ihr Playbook-Verzeichnis:

cd ~/wordpress-ansible/

Stellen wir sicher, dass unsere grundlegende Verbindung vom * Build-Server * zum * WordPress-Server * funktioniert, indem Sie das Playbook ausführen. Es wird noch nichts tun. Es wird nur die Verbindung getestet:

ansible-playbook playbook.yml -i hosts -u  -K

Geben Sie das sudo-Passwort für Ihren sudo-Benutzer auf dem * wordpress-server * ein, wenn Sie dazu aufgefordert werden.

Sie sollten eine Ausgabe wie die folgende sehen:

Outputansible-playbook playbook.yml -i hosts -u  -K

PLAY [wordpress] **************************************************************

GATHERING FACTS ***************************************************************
ok: [188.166.68.134]

PLAY RECAP ********************************************************************
188.166.68.134             : ok=1    changed=0    unreachable=0    failed=0

Dies zeigt an, dass wir eine Verbindung zum Server herstellen konnten. Wir haben jedoch noch keine Spiele definiert, daher wurde auf unserem * wordpress-server * nichts ausgeführt. Beheben wir das, indem wir die Details in unseren vier Rollen ausfüllen.

Wenn dies nicht erfolgreich war, überprüfen Sie, ob Sie mit einem SSH-Schlüssel SSH vom * Build-Server * zum * WordPress-Server * ausführen können.

Schritt 3 - Erstellen von Rollen

Server

Das wichtigste zuerst; Lassen Sie uns unseren Server einrichten. Dazu bearbeiten wir die Rolle "+ Server".

Die Serverrolle installiert die gesamte benötigte Software auf dem Zielserver. Bearbeiten Sie diese Datei:

nano roles/server/tasks/main.yml`

Fügen Sie den folgenden Inhalt hinzu; Stellen Sie sicher, dass nur eine Zeile mit "+ --- +" vorhanden ist (standardmäßig sollte eine Zeile vorhanden sein):

Rollen / Server / Aufgaben / main.yml

---
- name: Update apt cache
 apt: update_cache=yes cache_valid_time=3600
 sudo: yes

- name: Install required software
 apt: name={{ item }} state=present
 sudo: yes
 with_items:
   - apache2
   - mysql-server
   - php5-mysql
   - php5
   - libapache2-mod-php5
   - php5-mcrypt
   - python-mysqldb

Dies bewirkt Folgendes:

  • Aktualisiere den apt-cache (+ apt-get update)

  • + apt-get install Apache, MySQL, PHP und verwandte Software

Wenn Sie an den Details unserer Installation interessiert sind, können Sie sich unter https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php- umsehen. lamp-stack-on-ubuntu-14-04 [das Tutorial zur manuellen Installation von LAMP unter Ubuntu 14.04].

Wir können unser Playbook jetzt folgendermaßen ausführen:

ansible-playbook playbook.yml -i hosts -u  -K

Die Ausgabe sollte ungefähr so ​​aussehen:

Outputansible-playbook playbook.yml -i hosts -u  -K

PLAY [wordpress] **************************************************************

GATHERING FACTS ***************************************************************
ok: [188.166.68.134]

TASK: [server | Update apt cache] *********************************************
ok: [188.166.68.134]

TASK: [server | Install required software] ************************************
[188.166.68.134] => (item=apache2,mysql-server,php5-mysql,php5,libapache2-mod-php5,php5-mcrypt,python-mysqldb)

PLAY RECAP ********************************************************************

Nachdem Sie dies ausgeführt haben, sollten Sie in der Lage sein, auf die Standard-Apache-Seite unter + http: /// + zuzugreifen. Genial. Apache ist nun installiert und läuft auf dem * wordpress-server *.

Wenn Ihr Build an der Stelle von "+ TASK: [server | Update apt cache] + `, dies kann auf einen Mangel an Berechtigungen auf dem Zielserver hinweisen. Stellen Sie sicher, dass der sudo-Zugriff auf dem * wordpress-server * richtig konfiguriert ist.

PHP

Lassen Sie uns unsere PHP-Anforderungen klären. Das machen wir in der PHP-Rolle. Bearbeiten Sie die Hauptaufgaben-Datei für PHP:

nano roles/php/tasks/main.yml

Fügen Sie Folgendes hinzu (auch hier sollte die Zeile "+ --- +" bereits vorhanden sein):

Rollen / PHP / Aufgaben / main.yml

---
- name: Install php extensions
 apt: name={{ item }} state=present
 sudo: yes
 with_items:
   - php5-gd
   - libssh2-php

Dadurch werden die erforderlichen PHP-Erweiterungen installiert.

MySQL

Wir müssen auch eine MySQL-Datenbank für unsere WordPress-Site einrichten. Wir machen das in der Rolle "+ mysql".

Hierfür benötigen wir einige Variablen. Für eine Rolle können Sie Standardwerte für alle Variablen in der Datei + defaults / main.yml + angeben.

nano roles/mysql/defaults/main.yml

Fügen Sie Ihren Datenbanknamen, Ihren Datenbankbenutzernamen und das Datenbankkennwort (das Sie erstellen möchten) in dieser Reihenfolge hinzu. Stellen Sie sicher, dass Sie ein sicheres "++" auswählen.

rolls / mysql / defaults / main.yml

---
wp_mysql_db: wordpress
wp_mysql_user: wordpress
wp_mysql_password:

Fügen Sie die Aufgaben hinzu, um unsere Datenbank zu erstellen, und einen Benutzer, um darauf zuzugreifen.

nano roles/mysql/tasks/main.yml

Fügen Sie den folgenden Inhalt hinzu:

rolls / mysql / tasks / main.yml

---
- name: Create mysql database
 mysql_db: name={{ wp_mysql_db }} state=present

- name: Create mysql user
 mysql_user:
   name={{ wp_mysql_user }}
   password={{ wp_mysql_password }}
   priv=*.*:ALL

Diese Rolle übernimmt Folgendes:

  • Erstellen Sie eine MySQL-Datenbank

  • Erstellen Sie einen MySQL-Benutzer

  • Geben Sie diesem Benutzer Zugriff auf unsere Datenbank

Die Variablen werden automatisch aus unserer früheren Datei übernommen, sodass Sie hier nichts ändern müssen.

WordPress

Und jetzt, in dem Moment, auf den wir alle gewartet haben …​ WordPress!

Mit den installierten Serveranforderungen können wir WordPress einrichten. Wir werden die Rolle "+ WordPress" bearbeiten.

Wir fügen der Datei + role / wordpress / tasks / main.yml + ein paar verschiedene Aufgaben hinzu, lassen Sie sie also für diesen Abschnitt offen.

nano roles/wordpress/tasks/main.yml

Zuerst müssen wir WordPress in das Verzeichnis "+ / tmp +" herunterladen (der Sicherheitsbewusste unter Ihnen wird feststellen, dass wir die Zertifikatsüberprüfung deaktiviert haben, was den Download unterbrechen würde):

Rollen / WordPress / Aufgaben / main.yml

---
- name: Download WordPress  get_url:
   url=https://wordpress.org/latest.tar.gz
   dest=/tmp/wordpress.tar.gz
   validate_certs=no
   sudo: yes

Nach dem Herunterladen extrahieren wir die gzip-Datei in "+ / var / www +", den Speicherort, den Apache zum Speichern von Webinhalten verwendet:

Rollen / WordPress / Aufgaben / main.yml

- name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no
 sudo: yes

Nachdem die Dateien extrahiert wurden, aktualisieren wir Apaches Standard-Site-Dokumentenstamm, um auf unsere WordPress-Site zu verweisen:

Rollen / WordPress / Aufgaben / main.yml

- name: Update default Apache site
 sudo: yes
 lineinfile:
   dest=/etc/apache2/sites-enabled/000-default.conf
   regexp="(.)+DocumentRoot /var/www/html"
   line="DocumentRoot /var/www/wordpress"


 sudo: yes

Dadurch wird die Standard-Site von "+ DocumentRoot " für Apache so aktualisiert, dass sie auf die WordPress-Dateien verweist, die wir unter " / var / www / wordpress +" heruntergeladen haben

Sie werden hier feststellen, dass wir einen "+ notify " - Block hinzugefügt haben. Dies wird verwendet, wenn Sie Aufgaben ausführen müssen, z. B. das Neustarten von Diensten, nachdem eine Aufgabe erfolgreich abgeschlossen wurde. ` notify +` - Handler werden nur notified, wenn unsere Aufgabe changed ist.

Wir müssen unseren Handler für + restart apache hinzufügen. Speichern Sie, was Sie bisher haben, und öffnen Sie die Datei + role / wordpress / handlers / main.yml + zum Bearbeiten:

nano roles/wordpress/handlers/main.yml

Fügen Sie diese Inhalte hinzu:

Rollen / WordPress / Handler / main.yml

---
- name: restart apache
 service: name=apache2 state=restarted
 sudo: yes

Dieser Handler wird aufgerufen, wenn eine Task geändert wird, die "+ notify: restart apache +" angibt, wodurch der Server Apache neu startet.

  • Konfigurieren von WordPress *

Zurück zu + role / wordpress / tasks / main.yml +.

Schließlich müssen wir noch einige Einstellungen für Ihre WordPress-Site vornehmen:

Zuerst kopieren wir die Beispielkonfigurationsdatei:

Rollen / WordPress / Aufgaben / main.yml

- name: Copy sample config file
 command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
 sudo: yes

Aktualisieren Sie einige der Konstanten in dieser Datei so, dass sie mit unseren Datenbankinformationen übereinstimmen:

Rollen / WordPress / Aufgaben / main.yml

- name: Update WordPress config file
 lineinfile:
   dest=/var/www/wordpress/wp-config.php
   regexp="{{ item.regexp }}"
   line="{{ item.line }}"
 with_items:
   - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}
   - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}
   - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}
 sudo: yes

Diese Aufgabe findet die Zeilen mit: + DB_NAME +, + DB_USER + und + DB_PASSWORD + in unserer Konfigurationsdatei und ersetzt sie durch die Variablen aus unserem Playbook.

Nachdem Sie die obigen Schritte erfolgreich ausgeführt haben, enthält unsere WordPress-Rolle zwei interessante Dateien.

Hier ist die vollständige Aufgabendatei für WordPress:

Rollen / WordPress / Aufgaben / main.yml

---
- name: Download WordPress  get_url:
   url=https://wordpress.org/latest.tar.gz
   dest=/tmp/wordpress.tar.gz
   validate_certs=no

- name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no
 sudo: yes

- name: Update default Apache site
 sudo: yes
 lineinfile:
   dest=/etc/apache2/sites-enabled/000-default.conf
   regexp="(.)+DocumentRoot /var/www/html"
   line="DocumentRoot /var/www/wordpress"
 notify:
   - restart apache

- name: Copy sample config file
 command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
 sudo: yes

- name: Update WordPress config file
 lineinfile:
   dest=/var/www/wordpress/wp-config.php
   regexp="{{ item.regexp }}"
   line="{{ item.line }}"
 with_items:
   - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}
   - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}
   - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}
 sudo: yes

Hier ist die Datei für den Neustart von Apache (die Sie bereits erstellt haben sollten):

Rollen / WordPress / Handler / main.yml

---
- name: restart apache
 service: name=apache2 state=restarted
 sudo: yes

Wir sind fertig! Führen Sie das Playbook ein letztes Mal aus, um WordPress zu installieren und zu konfigurieren:

ansible-playbook playbook.yml -i hosts -u  -K

Sie sollten in der Lage sein, Ihre WordPress-Site online unter folgender Adresse anzuzeigen: + http: // your_server_ip +.

Hier können Sie die manuelle Einrichtung der WordPress-Site abschließen.

Fazit

Herzliche Glückwünsche! Sie können jetzt mit einem einzigen Befehl eine WordPress-Site auf einem beliebigen Ubuntu 14.04-Server installieren:

ansible-playbook playbook.yml -i hosts -u  -K

Alles was Sie tun müssen, ist die IP-Adresse Ihres Zielservers zu Ihrer + hosts + Datei hinzuzufügen und sicherzustellen, dass Ihre Berechtigungen korrekt eingestellt sind.

Nächste Schritte

Dies war eine sehr kurze Einführung, um Ihnen den Einstieg in Ansible und WordPress zu erleichtern. Sie könnten an folgenden Verbesserungen interessiert sein:

  • Entdecken Sie die Ansible-Galaxie und erfahren Sie, wie Sie Ihre eigenen Rollen auf der Galaxie hosten können

  • Automatisieren Sie den Installationsprozess, sodass keine manuelle Konfiguration Ihrer WordPress-Site erforderlich ist