So erstellen Sie ein anzeigbares Playbook zur Automatisierung der Drupal-Installation unter Ubuntu 14.04

Einführung

Ansible ist ein Konfigurationsverwaltungstool, mit dem Systemadministratoren Infrastrukturverwaltungsaktivitäten automatisieren.

Ansible verwendet nur SSH, um Befehle remote auszuführen, und benötigt daher keinen Agenten auf dem Remote-Server. Dies macht Ansible anderen beliebten Tools wie Puppet oder Chef vorzuziehen, wenn Sie keine Agenten auf den verwalteten Servern installieren möchten.

Darüber hinaus ist der Einstieg in Ansible viel einfacher, da YAML (Yet Another Markup Language) verwendet wird, das einfacher ist als die leistungsfähigeren Programmiersprachen, die andere Tools verwenden.

Drupal ist ein beliebtes CMS, dessen Installation zeitaufwändig, aber einfach zu automatisieren ist. In diesem Tutorial erstellen wir ein Ansible Playbook, das die Installation und Konfiguration von Drupal und all seine Abhängigkeiten von Systemen automatisiert, auf denen Ubuntu 14.04 ausgeführt wird.

Voraussetzungen

Sie benötigen Folgendes:

  • Ubuntu 14.04 Server (der über SSH erreichbar ist); Auf diesem Server wird Ansible und eine lokale Kopie von Drupal ausgeführt

  • Optional: Zusätzliche Ubuntu 14.04-Server, auf denen Sie Drupal installieren möchten

  • Asudo Benutzer auf jedem Server; Sie sollten diesame username undsame password für jeden Server verwenden, auf dem Sie Drupal installieren möchten

  • Grundlegendes Verständnis der Funktionsweise einer Drupal-Installation. Sie können aufHow To Install Drupal on an Ubuntu 14.04 Server with Apache verweisen, obwohl Sie Drupal nicht vorinstallieren müssen

[[Schritt-1 -—- install-ansible]] == Schritt 1 - Ansible installieren

Ansible ist in den vonapt-get verwendeten Standard-Repositorys nicht verfügbar. Fügen Sie daher das Repositoryppa:rquillo/ansible hinzu.

sudo add-apt-repository ppa:rquillo/ansible

Drücken Sie die EINGABETASTE, wenn Sie dazu aufgefordert werden.

Aktualisieren Sie die Paketlisten.

sudo apt-get update

Installieren Sie Ansible.

sudo apt-get install ansible

[[Schritt-2 - Erstellen eines Verzeichnisses für das Playbook]] == Schritt 2 - Erstellen Sie ein Verzeichnis für das Playbook

Die Befehlssätze von Ansible werden als Playbooks bezeichnet. Es ist eine gute Idee, alle Ihre Playbooks in einem einzigen Verzeichnis zu speichern. Erstellen Sie ein Verzeichnis mit dem NamenMyPlaybooks.

mkdir ~/MyPlaybooks

Nennen wir unser Spielbuchdrupal_setup. Erstellen Sie ein neues Verzeichnis mit dem Namendrupal_setup.

mkdir ~/MyPlaybooks/drupal_setup

[[Schritt-3 - Erstellen einer Hosts-Datei]] == Schritt 3 - Erstellen einer Hosts-Datei

Jedes Playbook enthält normalerweise einehosts-Datei, die die Namen der Server enthält, die es verwenden soll.

In diesem Tutorial werden wir Drupal auflocalhost und einem anderen Server,drupal_server, installieren. Sie können dieser Datei weitere Server hinzufügen. Denken Sie daran, dass jeder Server, den Sie hinzufügen, über SSH erreichbar sein sollte.

Verwenden Sienano, um eine Datei mit dem Namenhosts zu erstellen und zu bearbeiten.

nano ~/MyPlaybooks/drupal_setup/hosts

Lassen Sie es den folgenden Inhalt haben:

[drupal_hosts]
localhost
drupal_server_ip

Sie solltendrupalserverip durch die IP-Adresse Ihres zweiten Servers ersetzen. Sie können hier beliebig viele IP-Adressen angeben. Sie können dieses Playbook verwenden, um Drupal auf einer beliebigen Anzahl von Ubuntu 14.04-Servern zu installieren.

Note: Die Dateihosts ist die Datei, die Sie aktualisieren sollten, wenn Sie dieses Playbook in Zukunft wiederverwenden möchten, um weitere Drupal-Server zu konfigurieren. Beachten Sie, dass Sie die bereits konfigurierten Server aus der Liste entfernen und Ihre neuen Server-IPs hinzufügen sollten, bevor Sie das Playbook erneut ausführen.

Speichern und schließen Sie die Datei.

[[Schritt 4 - Erstellen einer Rolle, um ein Update zu erhalten]] == Schritt 4 - Erstellen Sie eine Rolle, um ein Update zu erhalten

Erstellen Sie ein neues Verzeichnis, in dem alle Rollen des Playbooks gespeichert werden.

mkdir ~/MyPlaybooks/drupal_setup/roles

Wir müssenapt-get die Server aktualisieren, bevor wir etwas anderes tun können. Erstellen Sie daher ein Verzeichnis für die Rolleupdate.

mkdir ~/MyPlaybooks/drupal_setup/roles/update

Jede Rolle hat eine oder mehrere Aufgaben. Erstellen Sie ein Verzeichnis mit dem Namentasks, in dem alle mit dieser Rolle verknüpften Aufgaben gespeichert sind.

mkdir ~/MyPlaybooks/drupal_setup/roles/update/tasks

Verwenden Sienano, um eine neue Aufgabendatei mit dem Namenmain.yml zu erstellen und zu bearbeiten. Dies ist die Datei, die Ansible mitteilt, was zu tun ist, wenn diese Rolle ausgeführt wird.

nano ~/MyPlaybooks/drupal_setup/roles/update/tasks/main.yml

Verwenden Sie in dieser Datei dasapt-Modul von Ansible, um das System zu aktualisieren:

---

- name: apt-get update the server
  apt: update_cache=yes

Stellen Sie sicher, dass Ihre Datei kein zusätzliches Leerzeichen enthält. Ansible ist diesbezüglich wählerisch. Speichern und schließen Sie die Datei.

[[Schritt-5 - Erstellen einer Rolle zum Einrichten von PHP]] == Schritt 5 - Erstellen einer Rolle zum Einrichten von PHP

Erstellen Sie ein Verzeichnis für die Rollephp.

mkdir ~/MyPlaybooks/drupal_setup/roles/php

Erstellen Sie das Verzeichnistasksfür diese Rolle:

mkdir ~/MyPlaybooks/drupal_setup/roles/php/tasks

Drupal benötigt einen Webserver, der für die Verwendung von PHP konfiguriert ist. In diesem Tutorial verwenden wir Apache. Bei der Installation von PHP wird Apache automatisch installiert, sodass wir keine zusätzlichen Befehle dafür benötigen.

Verwenden Sienano, ummain.yml für die PHP-Rolle zu erstellen und zu bearbeiten.

nano ~/MyPlaybooks/drupal_setup/roles/php/tasks/main.yml

Verwenden Sie dasapt-Modul von Ansible, um PHP5 (und die Pakete, von denen es abhängt) und die PHP5-GD-Bibliothek zu installieren. Fügen Sie der Datei Folgendes hinzu:

---

- name: Install PHP and associated packages
  apt: name=php5 state=latest

- name: Install PHP GD library
  apt: name=php5-gd state=latest
  notify:
    - Restart Apache

Apache muss neu gestartet werden, nachdem die PHP GD-Bibliothek installiert wurde. Daher benötigt diese Rolle auch einen Handler.

Alle Handler einer Rolle werden in einem separaten Verzeichnis gespeichert. Erstellen Sie ein Verzeichnis mit dem Namenhandlers für die aktuelle Rolle.

mkdir ~/MyPlaybooks/drupal_setup/roles/php/handlers

Verwenden Sienano, um die Dateimain.yml zu erstellen und zu bearbeiten.

nano ~/MyPlaybooks/drupal_setup/roles/php/handlers/main.yml

Fügen Sie den folgenden Code hinzu:

---

- name: Restart Apache
  service: name=apache2 state=restarted

Sie sind mit der Einrichtung von PHP und Apache fertig.

[[Schritt-6 - Erstellen einer Rolle zum Einrichten von MySQL]] == Schritt 6 - Erstellen einer Rolle zum Einrichten von MySQL

Drupal benötigt eine Datenbank zum Speichern von Einstellungen und Inhalten. In diesem Tutorial verwenden wir MySQL.

Erstellen Sie Verzeichnisse für diese Rolle und ihre Aufgaben.

mkdir -p ~/MyPlaybooks/drupal_setup/roles/mysql/tasks

Die erste Aufgabe dieser Rolle installiert MySQL und seine Abhängigkeiten. Verwenden Sienano, um eine Datei mit dem Namensetup.yml zu erstellen und zu bearbeiten.

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/setup.yml

In dieser Datei werden wir Ansible anweisen, dasapt-Modul erneut zu verwenden, um Folgendes zu installieren:

  • MySQL-Server

  • libapache2-mod-auth-mysql

  • PHP5-MySQL

Fügen Sie der Datei also Folgendes hinzu:

---

- name: Install MySQL server
  apt: name=mysql-server state=latest

- name: Install Apache module for MySQL authentication
  apt: name=libapache2-mod-auth-mysql state=latest

- name: Install MySQL module for PHP
  apt: name=php5-mysql state=latest

Unsere Rolle hat eine weitere Aufgabendatei. Da Drupal eine eigene MySQL-Datenbank und einen eigenen Datenbankbenutzer benötigt, erstellen wir eine separate Aufgabendatei, um diese zu erstellen. Verwenden Sienano, um eine Datei mit dem Namencreate_db.yml zu erstellen und zu bearbeiten.

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/create_db.yml

Ansible verfügt über Module, mit denen Sie MySQL verwalten können. In dieser Aufgabe werden wir die folgenden Module verwenden:

  • mysql_db - Zum Erstellen einer neuen Datenbank für Drupal.

  • mysql_user Um einen neuen Benutzer zu erstellen und ihm den Zugriff auf die Datenbank zu ermöglichen.

Bevor wirmysql_db odermysql_user verwenden, sollten wir sicherstellen, dass das PaketPython MySQLdb auf dem Remote-Host installiert ist. Verwenden Sie dasapt-Modul, um es zu installieren.

Fügen Sie der Datei den folgenden Inhalt hinzu:

---
- name: Install Python MySQLdb
  apt: name=python-mysqldb state=latest

- name: Create the Drupal database
  mysql_db: db={{ db_name }} state=present

- name: Create the Drupal user
  mysql_user: >
    name={{ db_user }}
    password={{ db_password }}
    priv={{ db_name }}.*:ALL
    host=localhost

Beachten Sie, dass Zeichenfolgen in \ {\ {}} Variablen bezeichnen. In dieser Aufgabe haben wir die Variablen{{ db_user }},{{ db_password}} und{{ db_name }}. Wir werden die Werte dieser Variablen in einem späteren Schritt festlegen.

Als Nächstes müssen wir Ansible mitteilen, dass diese Rolle zwei Aufgaben hat. Dazu erstellen wir einemain.yml-Datei.

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/main.yml

Fügen Sie dieser Datei den folgenden Code hinzu:

---

- include: setup.yml
- include: create_db.yml

[[Schritt-7 - Erstellen einer Rolle zum Installieren von Drupal]] == Schritt 7 - Erstellen einer Rolle zum Installieren von Drupal

Es ist jetzt Zeit, mit der Installation von Drupal selbst fortzufahren.

Erstellen Sie Verzeichnisse für diese Rolle und ihre Aufgaben.

mkdir -p ~/MyPlaybooks/drupal_setup/roles/drupal/tasks

Verwenden Sienano, um eine Aufgabendatei mit dem Namenmain.yml zu erstellen und zu bearbeiten.

nano ~/MyPlaybooks/drupal_setup/roles/drupal/tasks/main.yml

In dieser Aufgabe weisen wir Ansible an, die folgenden Aktionen auszuführen:

  • Installieren Siegit auf dem Remote-Host. Dies ist notwendig, da wir dasgit-Modul von Ansible verwenden werden

  • Verwenden Sie dasgit-Modul von Ansible, um die neueste stabile Version von Drupal mithttp://git.drupal.org/project/drupal.git aus dem Repository zu klonen. Die heruntergeladenen Dateien werden in/var/www/html/drupal abgelegt

  • Erstellen Sie die Dateiensettings.php undservices.yml aus den Standarddateien

  • Aktualisieren Sie die Berechtigungen vonsettings.php,services.yml undsites/default/files

Fügen Sie der Datei den folgenden Code hinzu:

---

- name: Install git
  apt: name=git state=latest

- name: Clone Drupal
  git: >
    repo=http://git.drupal.org/project/drupal.git
    dest=/var/www/html/drupal/
    update=no

- name: Create settings.php
  command: cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php

- name: Create services.yml
  command: cp /var/www/html/drupal/sites/default/default.services.yml /var/www/html/drupal/sites/default/services.yml

- name: Update permissions of settings.php
  file: path=/var/www/html/drupal/sites/default/settings.php mode=777

- name: Update permissions of services.yml
  file: path=/var/www/html/drupal/sites/default/services.yml mode=777

- name: Update permissions of files directory
  file: >
    path=/var/www/html/drupal/sites/default/files
    mode=777
    state=directory
    recurse=yes

Sie möchten die Berechtigungen für diese Dateien später aktualisieren, nachdem Sie die Browser-Installationen auf jedem Server abgeschlossen haben (auf jedem Server und nicht über Ansible).

[[Schritt-8 - Erstellen einer Datei, um alle Rollen zu verwenden]] == Schritt 8 - Erstellen einer Datei, um alle Rollen zu verwenden

An diesem Punkt sind alle unsere Rollen fertig. Wir müssen sie jetzt verwenden.

Verwenden Sienano, um eine Datei mit dem Namensite.yml zu erstellen. Dies ist die Datei, die wir tatsächlich mit Ansible ausführen werden.

nano ~/MyPlaybooks/drupal_setup/site.yml

In dieser Datei führen wir folgende Aktivitäten durch:

  • Geben Sie die Hosts an, auf denen dieses Playbook ausgeführt werden soll

  • Geben Sie an, dasssudo verwendet werden soll, um alle Aufgaben dieses Playbooks auszuführen

  • Legen Sie Standardwerte für Variablen fest, die in verschiedenen Rollen verwendet werden

  • Führen Sie alle Rollen aus

Fügen Sie den folgenden Code hinzu:

---

- hosts: drupal_hosts

  sudo: yes

  vars:
    - db_name: drupal
    - db_user: drupal_user
    - db_password: drupal_db_pass

  roles:
    - update
    - php
    - mysql
    - drupal

Stellen Sie sicher, dass Sie den Wert der Variablendb_password in einen anderen Wert alsdrupal_db_pass ändern. Sie können auch die Werte der beiden anderen Variablen ändern, um sie Ihren Wünschen anzupassen.

[[Schritt-9 -—- Herstellen einer SSH-Verbindung]] == Schritt 9 - Herstellen einer SSH-Verbindung

Bevor Sie das Playbook ausführen, sollte Ihre~/.ssh/known_hosts-Datei einen Eintrag für jeden der in derhosts-Datei genannten Hosts enthalten.

Eine einfache Möglichkeit, dies zu tun, besteht darin, von diesem Server aus mit SSH eine Verbindung zu jedem Server herzustellen, der in der Datei~/MyPlaybooks/drupal_setup/hostsaufgeführt ist.

Stellen Sie mit SSH über den folgenden Befehl eine Verbindung zulocalhost her:

ssh localhost

Wenn Sie zum ersten Mal auf diese Weise eine Verbindung zum Server herstellen, wird eine Meldung mit folgendem Inhalt angezeigt:

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is b1:18:3d:19:15:21:39:5a:f7:9f:3c:37:68:ba:62:01.
Are you sure you want to continue connecting (yes/no)?

Sobald Sieyes sagen, erhalten Sie eine Nachricht mit den Worten:

Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

Stellen Sie eine Verbindung zu anderen Servern her, die in der Dateihostsaufgeführt sind:

ssh drupal_sudo_user@drupal_server_ip

Stellen Sie sicher, dass Sie den Benutzernamen und die IP-Adresse durch die tatsächlichen Informationen für jeden Server ersetzen. Bitte beachten Sie, dass der sudo-Benutzername (drupal_sudo_user im Beispiel) und das Kennwort für jeden Server, einschließlichlocalhost, gleich sein sollten.

Note: Anstatt Kennwörter zu verwenden, können Sie den öffentlichen SSH-Schlüssel für den Sudo-BenutzerAnsible server’s in die Dateidrupal_sudo_user'sauthorized_keys auf jedem verwalteten Server kopieren.

Sobald Sie eine Verbindung zu jedem Server hergestellt haben, können Sie das Playbook ausführen.

[[Schritt-10-Run-the-Playbook]] == Schritt 10 - Führen Sie das Playbook aus

Das Playbook kann jetzt getestet werden. Feuern Sie es mit dem Befehlansible-playbookab. Die Option-k zwingt Ansible, nach dem SSH-Kennwort zu fragen, und ist nicht erforderlich, wenn Sie die kennwortlose Authentifizierung eingerichtet haben. Die Option-K zwingt Ansible, nach dem Kennwort vonsudozu fragen.

cd ~/MyPlaybooks/drupal_setup/
ansible-playbook -i hosts site.yml -kK

Geben Sie das SSH-Passwort ein und warten Sie, bis das Playbook ausgeführt wird. Sobald der Lauf abgeschlossen ist, haben Sie eine neue Drupal-Installation auf Ihrem Server.

Note: Sie können das Flag-k weglassen, wenn Sie jedem verwalteten Server den SSH-Schlüssel vom sudo-BenutzerAnsible server’s hinzugefügt haben.

Dies dauert einige Minuten und Ansible zeigt Ihnen bei jedem Schritt, was es tut.

Important: Wenn Sie dieses Skript ausführen möchten, um in Zukunft weitere Server einzurichten, müssen Sie die IP-Adressen der Server, die bereits eingerichtet sind, aus der Datei~/MyPlaybooks/drupal_setup/hosts entfernen. Andernfalls überschreibt Ansible Ihre benutzerdefinierten Drupal-Sites.

[[Schritt-11 -—- Setup-Drupal]] == Schritt 11 - Drupal einrichten

Jetzt können Sie mit einem Browser auf Drupal zugreifen und die browserbasierte Installation mithttp://your_server_ip/drupal/ abschließen.

Drupal Setup Page

Wenn Sie Hilfe beim Ausfüllen des Browser-Installationsprogramms für Drupal benötigen, befolgen Sie die Anweisungen inthis article.

Ihre Datenbankeinstellungen sind die Variablen, die Sie im Abschnittvars der Datei~/MyPlaybooks/drupal_setup/site.yml festgelegt haben.

Vergewissern Sie sich, dass auf jedem Server Drupal erfolgreich installiert wurde.

[[Schritt-12 -—- Bereinigen der Host-Liste]] == Schritt 12 - Bereinigen der Host-Liste

Jetzt ist ein guter Zeitpunkt, um die Hosts aus der Datei~/MyPlaybooks/drupal_setup/hostszu entfernen. Auf diese Weise werden die bereits eingerichteten Hosts nicht versehentlich überschrieben, wenn Sie das Playbook erneut ausführen.

Fehlerbehebung

Beachten Sie, dass YAML für Leerzeichen empfindlich ist. Wenn Sie Probleme mit Ihrem Playbook haben, haben Sie wahrscheinlich falsche Einrückungen oder zusätzliche Leerzeichen in Ihren.yml-Dateien.

Wenn Sie einen Fehler sehen, der so aussieht:

fatal: [server-name] => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

Dies bedeutet, dass Sie einen Eintrag für einen oder mehrere Hosts in der~/.ssh/known_hosts-Datei nicht hinzugefügt haben.

Sie müssen zuerst eine manuelle SSH-Verbindung zulocalhost oder zum Remote-Zielserver herstellen. Versuchen Sie dann erneut, das Playbook auszuführen.

Fazit

Mit diesem Tutorial haben Sie gelernt, ein Ansible-Playbook zu erstellen, das Drupal zusammen mit Apache und MySQL für Sie einrichtet. Bevor Sie dieses Playbook in Produktionssystemen verwenden, müssen Sie es weiterentwickeln, um die Installation sicherer zu machen. Sie können auch Drush-Befehle im Playbook verwenden, um die Drupal-Installation zu verwalten.