GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ansible Guide:Ansible Playbook für LEMP Stack erstellen

Ansible ist ein einfaches Automatisierungstool, das die Bereitstellung von Softwareanwendungen, die Cloud-Bereitstellung und das Konfigurationsmanagement automatisiert. Es ist ein Server-Orchestrierungstool, das Ihnen hilft, eine große Anzahl von Serverknoten von einzelnen Orten aus, die als „Steuerungsmaschinen“ bezeichnet werden, zu verwalten und zu steuern. Ansible wurde 2012 von Michael DeHaan erstellt und ist in Python und Powershell geschrieben.

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

Voraussetzung

  • 2 Ubuntu-Betriebssystem.
    • 10.5.5.20   ansible
    • 10.5.5.26  Bestimmung
  • Kenntnisse der grundlegenden Verwendung von Ansible
  • Root-Rechte

Was wir tun werden:

  1. Ansible Playbook-Projekt einrichten
  2. Verzeichnisstruktur für Ansible Playbook-Rollen erstellen
  3. Hosts und site.yml einrichten
  4. Allgemeine Rollen einrichten – Grundlegende Einrichtung
  5. Einrichtung von „Web“-Rollen – Nginx- und PHP-FPM-Konfiguration
  6. Einrichtung von 'db'-Rollen - MySQL-Datenbankkonfiguration
  7. Testen

Schritt 1 – Ansible Playbook Project einrichten

Ansible Playbook ist eine Reihe von Anweisungen, die Sie senden, um sie auf einem einzelnen oder einer Gruppe von Serverhosts auszuführen. Es stellt die Ansible-Bereitstellung dar, bei der die Automatisierung als Aufgaben definiert ist und alle Aufgaben wie das Installieren von Paketen und das Bearbeiten von Dateien von Ansible-Modulen ausgeführt werden.

Das Ansible Playbook enthält einige grundlegende Konfigurationen, 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 von Vorlagen und Aufgaben sind.

Erstellen Sie zunächst das Hauptprojektverzeichnis auf der Maschine „ansible-control“. Im Hauptprojektverzeichnis werden alle unsere Playbook-Verzeichnisse, Dateien und Konfigurationen gespeichert.

Erstellen Sie das Ansible-Projektverzeichnis namens ‚project-lemp‘ und gehen Sie hinein.

mkdir project-lemp/
cd project-lemp

Erstellen Sie nun eine neue Konfigurationsdatei „hosts“ und „site.yml“, dann erstellen Sie ein neues Verzeichnis namens „roles“.

touch hosts site.yml
mkdir -p roles/

Details zu Konfigurationen:

Gastgeber - Es ist eine Bestandsdatei, die Informationen über verwaltete Server von ansible enthält. Sie können eine Gruppe von Servern erstellen, die Ihnen die Verwaltung und Skalierung der Inventardatei selbst erleichtern. Die Inventardatei kann in 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 Ansible-Rollen haben ihre eigenen Verzeichnisstrukturen, jede Rolle enthält Verzeichnisse wie Tasks, Handler, Vars usw.

Schritt 2 – Ansible-Rollen für die Verzeichnisstruktur generieren

In diesem Schritt generieren wir mit dem Befehl ansible-galaxy ein Ansible-Rollenverzeichnis. Wir werden zwei Rollen generieren, die als „allgemeine“ Rollen und als „Web“-Rollen bezeichnet werden.

Wechseln Sie im Verzeichnis „project-lemp“ zum Verzeichnis „roles“.

cd roles/

Generieren Sie das Rollenstrukturverzeichnis und die Dateien für die „Common“- und „Web“-Rollen, indem Sie den folgenden ansible-galaxy-Befehl ausführen.

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

Überprüfen Sie danach alle verfügbaren Ansible-Rollen-Verzeichnisstrukturen mit dem folgenden Befehl.

tree .

Das Ergebnis wird Ihnen wie folgt angezeigt.

Schritt 3 – Hosts und site.yml einrichten

Die Datei „hosts“ enthält eine Liste und Gruppe des Servers, der von Ansible verwaltet wird. Für diese Anleitung erstellen wir eine Gruppe namens „lemp“ mit dem Mitglied namens „server01“ und der IP-Adresse 10.5.5.26.

Bearbeiten Sie die Datei „hosts“ mit dem 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

Konfigurationen unten einfügen.

---

- hosts: lemp
  remote_user: hakase
  become: yes

  roles:
    - common
    - web
    - db

Speichern und schließen.

Schritt 3 – Gemeinsame Rollen einrichten

In diesem Schritt richten wir die gemeinsamen Rollen ein. Und um das zu tun, müssen wir eine Liste mit Aufgaben erstellen, die wir erledigen werden.

Unterhalb der Liste der Aufgaben, die wir für die „allgemeinen“ Rollen erledigen werden.

  1. Repository ändern
  2. Repository aktualisieren
  3. Pakete auf die neueste Version aktualisieren
  4. Stellen Sie die Zeitzone des Servers ein

Gehen Sie nun in das Verzeichnis „common“ und bearbeiten Sie die Konfiguration „tasks/main.yml“.

cd common/
vim tasks/main.yml

Erstellen Sie eine Aufgabe zum Ändern des Repositorys, und wir verwenden das 'copy'-Modul, das die Basis 'sources.list' im 'files'-Verzeichnis auf den Remote-Host '/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 zum Aktualisieren 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 zum Konfigurieren der Systemzeitzone mit dem Ansible-Zeitzonenmodul.

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

Speichern und schließen.

Erstellen Sie danach eine neue Repository-Konfiguration „sources.list“ im Verzeichnis „files“.

vim files/sources.list

Wählen Sie das nächstgelegene Repository Ihres Serverstandorts, 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.

Zuletzt wurde die Konfiguration der „allgemeinen“ Rollen abgeschlossen.

Schritt 4 – Einrichten von „Web“-Rollen

In diesem Schritt richten wir die „Web“-Rollen ein. Es erledigt einige Aufgaben, darunter die Installation des Nginx-Webservers, PHP-FPM mit einigen grundlegenden Erweiterungen und die Konfiguration des PHP-FPM mit Nginx.

Nachfolgend finden Sie detaillierte Aufgaben, die wir in den „Web“-Rollen ausführen werden:

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

Gehen 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-Listenformat wie unten verwenden.

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

Als Nächstes fügen wir der php.ini-Konfiguration mit dem Modul „blockinfile“ neue Zeilen hinzu. Und am Ende der Zeile werden wir das Ansible 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

Jetzt kopieren wir die Konfiguration des virtuellen nginx-Hosts mithilfe des Moduls „Vorlage“. Das Vorlagenmodul kopiert die Konfiguration aus dem Verzeichnis „Vorlagen“ auf den Remote-Server. Wir kopieren die jinja2-Virtual-Host-Vorlage „vhost.j2“ in das Verzeichnis „/etc/nginx/sites-enabled/“ und als letztes benachrichtigen wir das Ansible, um den Nginx-Dienst neu zu starten.

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

Danach erstellen wir neue Aufgaben zum Erstellen des Web-Root-Verzeichnisses mit dem Modul „file“ und kopieren die Vorlage index.php hinein.

- 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 konfigurieren wir die Handler für den Neustart des nginx- und php-fpm-Dienstes. Bearbeiten Sie die „handlers/main.yml“-Konfiguration mit dem vim-Editor.

vim handlers/main.yml

Konfigurationen unten einfügen.

- 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 bearbeiten wir die Konfiguration ‚vars/main.yml‘. Oben in den Konfigurationen sehen Sie die Variablenkonfigurationen „{{ php_version }}“ und „{{ domain_name }}“. Diese Variablen stellen unsere Umgebungseinrichtung für die PHP-Version und den zu verwendenden Domänennamen dar. Die Variable macht Ansible wiederverwendbarer, da wir nur die Variablenkonfiguration ‚vars/main.yml‘ bearbeiten müssen und nicht die Basiskonfiguration.

Bearbeiten Sie die Variablenkonfiguration „vars/main.yml“ mit dem vim-Editor.

vim vars/main.yml

Konfigurationen unten einfügen.

php_version: 7.2
domain_name: hakase-labs.io

Speichern und schließen.

Jetzt erstellen wir die jinja2-Vorlagenkonfigurationen „index.php.j2“ und „vhost.j2“ im Verzeichnis „templates/“.

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.

Erstellen Sie danach die Vorlage für die Konfiguration des virtuellen nginx-Hosts ‚vhost.j2‘.

vim templates/vhost.j2

Konfigurationen unten einfügen.

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 – 'db'-Rollen einrichten

In diesem Schritt konfigurieren wir die „db“-Rollen für die Installation und Konfiguration der MySQL-Datenbank.

Nachfolgend finden Sie detaillierte Aufgaben, die für die 'db'-Rollen ausgeführt werden.

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

Gehen 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-„list“-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 zum Erstellen der MySQL-Datenbank und des Benutzers und gewähren Sie dann alle Berechtigungen 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.

Bearbeiten Sie als Nächstes 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 vars-Variablenkonfiguration ‚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 Variable „db_pass“ enthält das verschlüsselte MySQL-Passwort, und Sie können mithilfe von Online-Tools ein verschlüsseltes MySQL-Passwort generieren.

Schritt 6 – Führen Sie das Ansible Playbook aus

Gehen Sie zum Ansible-Projektverzeichnis.

cd project-lemp/

Führen Sie den folgenden Ansible-Playbook-Befehl aus.

ansible-playbook -i hosts site.yml

Jetzt führt das Ansible alle Rollen aus, die wir dem Host zuweisen. Wenn der Vorgang abgeschlossen ist, wird Ihnen das Ergebnis wie folgt angezeigt.

Stellen Sie sicher, dass keine Fehlermeldung angezeigt wird.

Schritt 7 – Testen

Öffnen Sie Ihren Webbrowser und geben Sie den Domainnamen in die Adressleiste http://hakase-labs.io.

ein

Und Ihnen wird die Indexseite mit phpinfo wie unten angezeigt.

PHP-FPM und Nginx funktionieren.

Kehren Sie als Nächstes zum Server-Terminal zurück und melden Sie sich beim MySQL-Server mit dem Benutzer und dem Passwort an, die wir in der Rollenvariablen „mysql“ erstellt haben.

mysql -u hakase -p
PASSWORD: hakasepass

Überprüfen Sie die Liste der Datenbanken, die dem Benutzer gehören.

show databases;

Und Sie werden bei der MySQL-Shell angemeldet und die Datenbank mit dem Namen „hakase-db“ wird in der Liste angezeigt.

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


Linux
  1. Dekonstruktion eines Ansible-Playbooks

  2. YAML für Ansible verstehen

  3. So erstellen Sie ein Ansible-Playbook

  4. Eine kurze Einführung in Ansible-Rollen für die Linux-Systemverwaltung

  5. 6 Fähigkeiten zur Fehlerbehebung für Ansible-Playbooks

Ansible Guide:Das Ad-hoc-Kommando

So erstellen Sie Ansible Playbooks für die IT-Automatisierung

Webinoly – Einfache Einrichtung eines optimierten LEMP-Stacks für WordPress in Ubuntu

So erstellen und führen Sie eine Ansible Playbook-Datei aus

Kurzanleitung zu Ansible für Linux-Systemadministratoren

Eine Partition unter Linux erstellen – Eine Schritt-für-Schritt-Anleitung