Ansible Playbook zum aufsetzen eines LEMP Stack (Nginx, MySQL und PHP) unter Ubuntu

Ansible ist ein einfaches Automatisierungstool, das die Bereitstellung von Softwareanwendungen, die Cloud-Bereitstellung und das Konfigurationsmanagement automatisiert. Es handelt sich um ein Server-Orchestrierungs-Tool, das Ihnen hilft, eine große Anzahl von Server-Knotenpunkten von einzelnen Orten aus zu verwalten und zu kontrollieren, die als ‚Control Machines‘ bezeichnet werden. Ansible wurde 2012 von Michael DeHaan geschaffen und ist in Python und Powershell geschrieben.

In diesem Tutorial zeigen wir Ihnen, wie Sie ein grundlegendes Ansible Playbook für die Bereitstellung des LEMP-Stacks auf dem Ubuntu 18.04 Server erstellen. Sie werden lernen, wie man ein einfaches Ansible Playbook erstellt, das für andere PHP-Projektanwendungen wie WordPress, Nextcloud usw. skaliert werden kann.

Voraussetzung

  • 2 Ubuntu-OS.
    • 10.5.5.20 ansible
    • 10.5.5.5.26 Bestimmung
  • Kenntnisse der grundlegenden Verwendung Ansible
  • Root-Privilegien

Was wir tun werden:

  1. Einrichten eines möglichen Playbook-Projekts
  2. Verzeichnisstruktur für mögliche Playbook-Rollen generieren
  3. Einrichten von Hosts und site.yml
  4. Einrichten ‚gewöhnlicher‘ Rollen – Grundeinstellung
  5. Einrichten von ‚Web‘-Rollen – Nginx- und PHP-FPM-Konfiguration
  6. Einrichten von ‚db‘-Rollen – MySQL-Datenbank-Konfiguration
  7. Prüfung

Schritt 1 – Einrichten eines möglichen Playbook-Projekts

Ansible Playbook ist eine Reihe von Anweisungen, die Sie zur Ausführung auf einem einzelnen oder einer Gruppe von Server-Hosts senden. Es stellt das ansible-Provisioning dar, bei dem die Automatisierung als Aufgabe definiert ist und alle Aufgaben wie das Installieren von Paketen, das Bearbeiten von Dateien, von ansible-Modulen erledigt werden.

Das Ansible Playbook enthält einige Grundkonfigurationen, darunter Hosts und Benutzerinformationen der Bereitstellungsserver, eine Aufgabenliste, die auf den Bereitstellungsservern implementiert wird, Vorlagen- und benutzerdefinierte Konfigurationen sowie eine Gruppe von Variablen, die Teil der Vorlagen und Aufgaben sind.

Erstellen Sie zunächst das Hauptprojektverzeichnis auf dem ‚ansible-control‘-Rechner. Im Hauptprojektverzeichnis werden alle unsere Spielbuchverzeichnisse, Dateien und Konfigurationen gespeichert.

Erstellen Sie das Ansible Projektverzeichnis namens ‚projekt-lemp‘ und gehen Sie darin ein.

mkdir project-lemp/
cd project-lemp

Erstellen Sie jetzt die neue Konfigurationsdatei ‚hosts‘ und ’site.yml‘ und erstellen Sie dann ein neues Verzeichnis namens ‚roles‘.

touch hosts site.yml
mkdir -p roles/

Details über Konfigurationen:

hosts – Es handelt sich um eine Inventardatei, die Informationen über die von ansible verwalteten Server enthält. Es ermöglicht Ihnen, eine Gruppe von Servern zu erstellen, die Ihnen die Verwaltung und Skalierung der Bestandsdatei selbst erleichtern. Die Inventardatei kann mit vielen verschiedenen Formaten erstellt werden, einschließlich der Formate INI und YAML.

site.yml – Die Master Playbook-Datei, die enthält, welche Gruppe von Hosts mit unseren verfügbaren Rollen verwaltet wird.

Rollen – es handelt sich um eine Gruppe von Ansible Playbooks, die zur Bereitstellung des Servers verwendet werden. Die möglichen Rollen haben ihre eigenen Verzeichnisstrukturen, jede Rolle enthält Verzeichnisse wie Aufgaben, Bearbeiter, Variablen usw.

Schritt 2 – Generieren Sie mögliche Rollen für die Verzeichnisstruktur

In diesem Schritt werden wir mit dem Befehl ansible-galaxy ein ansible-Rollenverzeichnis generieren. Wir werden zwei von den Rollen generieren, die wir „gemeinsame“ Rollen und die „Web“-Rollen nennen.

Gehen Sie innerhalb des Verzeichnisses ‚projekt-lemp‘ in das Verzeichnis ‚rollen‘.

cd roles/

Generieren Sie das Verzeichnis und die Dateien für die Rollenstruktur für die ‚gewöhnlichen‘ und ‚Web‘-Rollen, indem Sie den folgenden Befehl ansible-galaxy ausführen.

ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db

Prüfen Sie danach alle verfügbaren und möglichen Rollenverzeichnisstrukturen mit dem folgenden Befehl.

tree .

Das Ergebnis wird Ihnen wie unten gezeigt.

Verzeichnis-Struktur

Schritt 3 – Hosts und site.yml einrichten

Die Datei ‚hosts‘ enthält eine Liste und eine Gruppe von Servern, die von der Ansible verwaltet werden. Für diesen Leitfaden werden wir eine Gruppe namens ‚lemp‘ mit dem Mitglied ’server01′ und der IP-Adresse 10.5.5.26 erstellen.

Editieren Sie die Datei ‚hosts‘ mit vim editor.

vim hosts

Konfiguration unten einfügen.

[lemp]
server01 ansible_host=10.5.5.26

Speichern und schließen.

Bearbeiten Sie als nächstes die Konfigurationsdatei site.yml.

vim site.yml

Fügen Sie unten stehende Konfigurationen ein.

---

– hosts: lemp
remote_user: hakase
become: yes

roles:
– common
– web
– db

Speichern und schließen.

Einrichten von Hosts und site.yml

Schritt 3 – Gemeinsame Rollen einrichten

In diesem Schritt werden wir die gemeinsamen Rollen festlegen. Und dazu müssen wir eine Liste von Aufgaben erstellen, die wir erledigen werden.

Nachfolgend die Liste der Aufgaben, die wir in den „gemeinsamen“ Rollen erledigen werden.

  1. Repository ändern
  2. Update-Repository
  3. Upgrade-Pakete auf die neueste Version
  4. Einrichten der Server-Zeitzone

Gehen Sie nun in das ‚common‘-Verzeichnis und bearbeiten Sie die Konfiguration ‚tasks/main.yml‘.

cd common/
vim tasks/main.yml

Erstellen Sie eine Aufgabe zum Ändern des Repositorys, und wir werden das ‚copy‘-Modul verwenden, das die Basis ’sources.list‘ aus dem ‚files‘-Verzeichnis auf den entfernten Rechner ‚/etc/apt/‘ kopiert.

- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
  copy:
    src: sources.list
    dest: /etc/apt/
    backup: yes

Erstellen Sie eine Aufgabe zur Aktualisierung des Repositorys und aktualisieren Sie alle Pakete mit dem ‚apt‘-Modul auf die neueste Version.

- name: Update repository and Upgrade packages
  apt:
    upgrade: dist
    update_cache: yes

Erstellen Sie nun die Aufgabe zur Konfiguration der Systemzeitzone unter Verwendung des ansible Zeitzonenmoduls.

- name: Setup timezone to Asia/Jakarta
  timezone:
    name: Asia/Jakarta
    state: latest

Speichern und schließen.

Gemeinsame Rollen einrichten

Danach erstellen Sie eine neue Repository-Konfiguration ’sources.list‘ innerhalb des ‚files‘-Verzeichnisses.

vim files/sources.list

Wählen Sie das nächstgelegene Repository Ihres Serverstandortes, unten ist meins.

deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse

Speichern und schließen.

Schließlich wurde die Konfiguration der „gemeinsamen“ Rollen abgeschlossen.

Schritt 4 – Einrichten von ‚Web‘-Rollen

In diesem Schritt werden wir die „Web“-Rollen einrichten. Es wird einige Aufgaben übernehmen, darunter die Installation des Nginx-Webservers, PHP-FPM mit einigen grundlegenden Erweiterungen und die Konfiguration des PHP-FPM mit Nginx.

Nachstehend finden Sie Einzelheiten zu den Aufgaben, die wir in den „Web“-Rollen übernehmen werden:

  1. Nginx installieren
  2. PHP-FPM installieren
  3. php.ini konfigurieren
  4. Erstellen Sie einen virtuellen Host
  5. Datei phpinfo hinzufügen

Wechseln Sie in das Verzeichnis ‚web‘ und bearbeiten Sie die Datei ‚tasks/main.yml‘.

cd web/
vim tasks/main.yml

Erstellen Sie die erste Aufgabe für die nginx-Installation mit dem apt-Modul.

- name: Install Nginx
  apt:
    name: nginx
    state: latest

Erstellen Sie nun die Aufgabe zur Installation von PHP-FPM mit einigen grundlegenden Erweiterungen. Und für die Installation mehrerer Pakete können wir das Python-‚Listen‘-Format wie unten verwenden.

- name: Instal PHP-FPM
  apt:
    name: ['php','php-fpm','php-common','php-cli','php-curl']
    state: latest

Als nächstes werden wir neue Zeilen zur php.ini-Konfiguration mit Hilfe des ‚blockinfile‘-Moduls hinzufügen. Und am Ende der Zeile werden wir die Möglichkeit benachrichtigen, den php-fpm-Dienst nach der Konfiguration der php.ini-Datei neu zu starten.

- name: Configure php.ini
  blockinfile:
    dest: /etc/php/{{ php_version }}/fpm/php.ini
    block: |
      date.time = Asia/Jakarta
      cgi-fix_pathinfo = 0
    backup: yes
  notify: restart php-fpm

Nun werden wir die Konfiguration des virtuellen nginx-Hosts mit Hilfe des ‚Template‘-Moduls kopieren. Das Vorlagenmodul kopiert die Konfiguration aus dem Verzeichnis ‚templates‘ auf den entfernten Server. Wir werden die virtuelle Jinja2-Host-Vorlage ‚vhost.j2‘ in das Verzeichnis ‚/etc/nginx/sites-enabled/‘ kopieren, und als letztes werden wir die Möglichkeit zum Neustart des nginx-Dienstes benachrichtigen.

- name: Create Nginx virtual host
  template:
    src: vhost.j2
    dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
  notify: restart nginx

Danach werden wir neue Aufgaben für die Erstellung des Web-Stammverzeichnisses mit Hilfe des ‚file‘-Moduls erstellen und die index.php-Vorlage in dieses kopieren.

- name: Create web-root directory
  file:
    path: /var/www/{{ domain_name }}
    state: directory

– name: Upload index.html and info.php files
template:
src: index.php.j2
dest: /var/www/{{ domain_name }}/index.php

Speichern und schließen.

Jetzt werden wir die Handler für den Neustart des nginx- und php-fpm-Dienstes konfigurieren. Bearbeiten Sie die ‚handlers/main.yml‘-Konfiguration mit dem vim-Editor.

vim-Handhaber/main.yml

Fügen Sie unten stehende Konfigurationen ein.

- name: restart nginx
  service:
    name: nginx
    state: restarted
    enabled: yes

– name: restart php-fpm
service:
name: php{{ php_version }}-fpm
state: restarted
enabled: yes

Speichern und schließen.

Mögliche Web-Rollen

Als nächstes werden wir die Konfiguration ‚vars/main.yml‘ bearbeiten. Am Anfang der Konfigurationen werden Sie die Variablenkonfigurationen ‚{{{{ php_version }}‘ und ‚{{{{{domain_name }}}‘ bemerken. Diese Variablen stellen unsere Umgebungseinrichtung für die php-Version und den zu verwendenden Domänennamen dar. Die Variable macht einesible wiederverwendbarer, da wir nur die Variablenkonfiguration ‚vars/main.yml‘ bearbeiten müssen und nicht die Basiskonfiguration.

Bearbeiten Sie die Variablen-Konfiguration ‚vars/main.yml‘ mit dem vim-Editor.

vim vars/main.yml

Fügen Sie unten stehende Konfigurationen ein.

php_version: 7.2
domain_name: hakase-labs.io

Speichern und schließen.

Nun werden wir die jinja2-Vorlagenkonfigurationen ‚index.php.j2‘ und ‚vhost.j2‘ im Verzeichnis ‚templates/‘ erstellen.

vim templates/index.php.j2

Konfiguration unten einfügen.

<html>
<body>
<h1><center>index.html for domain {{ domain_name }}</center></h1>

<p>
<p>

<?php
phpinfo();
?>

</body>
</html>

Speichern und schließen.

Danach erstellen Sie die Vorlage für die Konfiguration des virtuellen Nginx-Hosts ‚vhost.j2‘.

vim templates/vhost.j2

Fügen Sie unten stehende Konfigurationen ein.

server {
    listen 80;
    listen [::]:80;
root /var/www/{{ domain_name }};
index index.php index.html index.htm index.nginx-debian.html;

server_name {{ domain_name }};

location / {
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}

Speichern und schließen Sie die Konfiguration, und wir sind mit der Konfiguration der Webrollen fertig.

Schritt 5 – Einrichten von ‚db‘-Rollen

In diesem Schritt werden wir die ‚db‘-Rollen für die Installation und Konfiguration der MySQL-Datenbank konfigurieren.

Nachstehend finden Sie Einzelheiten zu den Aufgaben, die die ‚db‘-Rollen erfüllen werden.

  1. mysql installieren
  2. MySQL-Datenbank erstellen
  3. MySQL-Benutzer anlegen
  4. mysql neu starten

Wechseln Sie in das Verzeichnis ‚db‘ und bearbeiten Sie die Konfiguration ‚tasks/main.yml‘.

cd db/
vim tasks/main.yml

Installieren Sie nun die MySQL-Pakete mit dem ‚apt‘-Modul und dem Python-‚Listen‘-Format für die Installation mehrerer Pakete.

- name: Install MySQL
  apt:
    name: ['mysql-server','mysql-client','python-mysqldb']
    state: latest
  notify: restart mysql

Erstellen Sie dann neue Aufgaben für die Erstellung der MySQL-Datenbank und des Benutzers und gewähren Sie dann alle Privilegien des Benutzers für die Datenbank.

- name: Create database
  mysql_db:
    name: '{{ db_name }}'
    state: present
- name: Create user for the database
mysql_user:
name: '{{ db_user }}'
password: '{{ db_pass }}'
encrypted: yes
priv: '{{ db_name }}.*:ALL'
state: present

Speichern und schließen.

Einrichten von Datenbankrollen

Als nächstes bearbeiten Sie die Konfiguration ‚handlers/main.yml‘.

vim handlers/main.yml

Fügen Sie die Konfiguration der Aufgabe zum Neustart des MySQL-Dienstes ein.

- name: restart mysql
  service:
    name: mysql
    state: restarted
    enabled: yes

Speichern und schließen.

Bearbeiten Sie danach die Konfiguration der Variablen vars ‚vars/main.yml‘.

vim vars/main.yml

Fügen Sie diese Variablen für die MySQL-Datenbank und die Benutzerkonfiguration unten ein.

db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'

Speichern und schließen.

Die ‚db_pass‘-Variable hat das verschlüsselte MySQL-Passwort, und Sie können ein verschlüsseltes MySQL-Passwort mit Hilfe von Online-Werkzeugen generieren.

Schritt 6 – Ausführen des Ansible Playbook

Wechseln Sie zum Verzeichnis Ansible Projekte.

cd project-lemp/

Führen Sie den Befehl ansible-playbook unten aus.

ansible-playbook -i hosts site.yml

Nun wird das Ansible alle Rollen ausführen, die wir dem Gastgeber zuweisen. Wenn es vollständig ist, wird Ihnen das Ergebnis wie unten gezeigt.

Das Ansible Playbook ausführen

Stellen Sie sicher, dass Sie keinen Fehler erhalten.

Schritt 7 – Prüfung

Öffnen Sie Ihren Webbrowser und geben Sie den Domänennamen in die Adressleiste http://hakase-labs.io ein.

Und es wird Ihnen die Indexseite mit phpinfo wie unten gezeigt.

Prüfung

Das PHP-FPM und Nginx funktionieren.

Als nächstes gehen Sie zurück zum Server-Terminal und melden sich mit dem Benutzer und Passwort, das wir in der ‚mysql‘-Rollenvariablen erstellt haben, am MySQL-Server an.

mysql -u hakase -p
PASSWORD: hakasepass

Überprüfen Sie die Liste der Datenbank, die dem Benutzer gehört.

show databases;

Und Sie werden in der MySQL-Shell eingeloggt und die Datenbank mit dem Namen ‚hakase-db‘ in der Liste angezeigt.

Datenbank-Test

Schließlich wurde das Ansible Playbook für die Installation und Konfiguration des LEMP-Stacks erstellt und erfolgreich getestet.

Referenz

https://docs.ansible.com/ansible/latest/index.html

Das könnte dich auch interessieren …