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:
- Einrichten eines möglichen Playbook-Projekts
- Verzeichnisstruktur für mögliche Playbook-Rollen generieren
- Einrichten von Hosts und site.yml
- Einrichten ‚gewöhnlicher‘ Rollen – Grundeinstellung
- Einrichten von ‚Web‘-Rollen – Nginx- und PHP-FPM-Konfiguration
- Einrichten von ‚db‘-Rollen – MySQL-Datenbank-Konfiguration
- 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.
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.
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.
- Repository ändern
- Update-Repository
- Upgrade-Pakete auf die neueste Version
- 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.
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:
- Nginx installieren
- PHP-FPM installieren
- php.ini konfigurieren
- Erstellen Sie einen virtuellen Host
- 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.
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.
- mysql installieren
- MySQL-Datenbank erstellen
- MySQL-Benutzer anlegen
- 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.
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.
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.
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.
Schließlich wurde das Ansible Playbook für die Installation und Konfiguration des LEMP-Stacks erstellt und erfolgreich getestet.