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 Datei
hosts
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 Verzeichnistasks
fü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 Sie
git
auf dem Remote-Host. Dies ist notwendig, da wir dasgit
-Modul von Ansible verwenden werden -
Verwenden Sie das
git
-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 Dateien
settings.php
undservices.yml
aus den Standarddateien -
Aktualisieren Sie die Berechtigungen von
settings.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, dass
sudo
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/hosts
aufgefü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 Dateihosts
aufgefü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 Datei
drupal_sudo_user's
authorized_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-playbook
ab. 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 vonsudo
zu 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.
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/hosts
zu 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.