Server-Automatisierung ist ein sicherer und zuverlässiger Prozess zur effektiven und technisch versierten Verwaltung und Überwachung von Servern. Im Gegensatz zur traditionellen Verwaltung von Servern in Rechenzentren, die von einem dedizierten Expertenteam kontrolliert werden, werden alle Server mithilfe von Automatisierung verwaltet. Dadurch werden menschliche Fehler minimiert.
Konfigurationsmanagement-Tools wie Ansible, Puppet, Terraform, um nur einige zu nennen, werden typischerweise zur Automatisierung von Servern verwendet. Diese Tools richten Server mithilfe von Automatisierung ein, indem sie Standardverfahren für neue Server etablieren und gleichzeitig potenzielle Fehler ausschließen, die bei manueller Durchführung auftreten.
Ansible ist ein robustes Open-Source-Projekt. Es ist flexibel, einfach zu bedienen und hat eine äußerst vereinfachte Architektur. Für die Verwendung von Ansible-Playbooks sind keine Programmierkenntnisse erforderlich, und es muss keine Software auf den Nodes installiert werden. Vor allem ist es mit hervorragenden Funktionen ausgestattet, mit denen sich Skripte schreiben und die Automatisierung rationalisieren lassen.
In dieser Anleitung werden wir Sie Schritt für Schritt durch die Installation und Konfiguration von LAMP auf Ubuntu 20.04 mit Ansible führen.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie:
- ein installiertes Ubuntu auf Ihrem System.
- Einen oder mehrere Ansible-Hosts: Ein oder mehrere Remote-Ansible-Hosts, auf denen das neueste Ubuntu läuft, müssen anfangs eingerichtet werden. Folgen Sie dem Tutorial Automatisierung der Server-Einrichtung mit Ansible und Ubuntu 20.04 für die Einrichtung.
- Einen Ansible-Control-Node: Eine Ubuntu-Maschine, auf der Ansible installiert und konfiguriert ist und die mit Ihren Ansible-Hosts über SSH-Schlüssel:
-
- Der Control-Node muss über einen Benutzer mit sudo-Rechten und eine Firewall verfügen, die eingestellt ist auf EIN.
- . Wenn Sie Hilfe bei der Einrichtung von Ansible benötigen, lesen Sie das Tutorial über die Installation und Konfiguration von Ansible auf Ubuntu 20.04.
Was ist der Zweck des Ansible-Playbooks?
Dieses Ansible-Playbook ist eine alternative Methode, um das in unserem Leitfaden beschriebene Verfahren zu durchlaufen LAMP-Stack-Einrichtung – Linux Apache MySQL PHP.
Das Ausführen des Ansible-Playbooks führt zu den folgenden Aktionen auf Ihren Ansible-Hosts:
-
Installieren von aptitude, einer Alternative zum apt-Paketmanager, wie von Ansible bevorzugt.
-
Installieren aller erforderlichen LAMP-Pakete.
-
Erstellen eines neuen Apache- VirtualHost und Konfigurieren eines dedizierten Document-Roots.
-
Aktivieren (EIN) des neuen VirtualHost.
-
Deaktivieren (AUS) der Standard-Apache-Website, d. h. Setzen der disable_default-Variable auf true.
-
Auswählen eines Passworts für den MySQL-root-Benutzer.
-
Entfernen anonymer MySQL-Konten und der Testdatenbank.
-
Einrichten von UFW, um HTTP-Verkehr auf dem konfigurierten Port zuzulassen, wobei der Standardwert 80.
-
Einrichten eines PHP-Testskripts.
Nachdem das Ansible-Playbook die Ausführung abgeschlossen hat, sehen Sie eine PHP-Webumgebung, die gemäß den von uns festgelegten Konfigurationen auf Apache läuft.
Nutzung des Ansible-Playbooks
Holen Sie sich zuerst das LAMP-Playbook und seine Abhängigkeiten aus dem do-community/ansible-playbooks-Repository. Klonen Sie als Nächstes das Repository mit dem LAMP-Playbook in einen lokalen Ordner auf dem Ansible-Control-Node.
Führen Sie den Befehl git pull aus, um sicherzustellen, dass Sie Zugriff auf die richtigen Inhalte haben, die wir in diesem Tutorial verwenden werden:
|
1 2 |
cd ~/ansible-playbooks git pull |
Wenn Sie das do-community/ansible-playbooks-Repository zum ersten Mal verwenden, sollten Sie das Repository in Ihren Home-Ordner klonen:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Wechseln Sie in den Ordner lamp_ubuntu2004 und Sie sehen die folgende Struktur:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Hier ist eine Übersicht darüber, was diese Dateien bedeuten:
-
files/info.php.j2: Dies ist eine Vorlagendatei, mit der Sie eine PHP-Testseite im Stammverzeichnis (Root) des Webservers einrichten können.
-
files/apache.conf.j2: Eine weitere Vorlagendatei, die zum Einrichten des Apache VirtualHost verwendet wird.
-
vars/default.yml: Es’s eine Variablendatei zur Anpassung der Playbook-Einstellungen.
-
playbook.yml: Diese Datei enthält alle Inhalte der Aufgaben (Tasks), die auf dem/den Remote-Server(n) ausgeführt werden sollen.
-
readme.md: Eine Readme-Datei, die die Informationen über dieses Playbook enthält.
Passen wir die MySQL- und Apache-Konfigurationen an, indem wir Änderungen in der Variablendatei des Playbooks vornehmen. Navigieren Sie zum Verzeichnis lamp_ubuntu2004 und öffnen Sie die Datei vars/default.yml mit dem nano-Editor:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
Beim Öffnen der Datei vars/default.yml wird eine Liste von Variablen angezeigt, die geändert werden müssen:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Lassen Sie uns jede der Variablen im Detail verstehen:
-
mysql_root_password: Speichert das Passwort für das root MySQL-Konto.
-
app_user: Es handelt sich um einen entfernten Nicht-Root-Benutzer auf dem Ansible-Host, der als Eigentümer der Anwendungsdateien fungiert.
-
http_host: Zeigt Ihren Domainnamen an.
-
http_conf: Zeigt den Namen der in Apache erstellten Konfigurationsdatei an.
-
http_port: Es ist der HTTP-Port für diesen virtuellen Host, und 80 ist der Standardwert.
-
disable_default: Wird verwendet, um Standardoptionen, die mit Apache geliefert werden, rückgängig zu machen.
Speichern und schließen Sie anschließend die Datei vars/default.yml .
Sobald die gesamte Einrichtung abgeschlossen ist, können wir dieses Playbook auf den Servern ausführen. Standardmäßig sind die meisten Server in den Playbooks so konfiguriert, dass sie auf jedem Server in den Inventaren ausgeführt werden. Verwenden wir das Flag -l, um nur einen einzelnen Server oder eine ausgewählte Teilgruppe zu beeinflussen, die vom Playbook betroffen ist. Alternativ können wir das Flag -u verwenden, um eine detaillierte Ansicht darüber zu erhalten, welcher Remote-Server verbunden wird und auf den Remote-Hosts ausgeführt wird.
Führen wir das Playbook auf einem Server aus server1 und verbinden wir es mit einem Benutzer als justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Sie erhalten eine Ausgabe ähnlich dieser:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Sobald Sie sehen, dass die Ausführung des Playbooks abgeschlossen ist, navigieren Sie zu Ihrem Webbrowser und rufen Sie den Host des Servers auf. Vergessen Sie nicht, /info.php am Ende der IP anzuhängen:
|
1 |
http://server_host_or_IP/info.php |
Wenn Sie auf diese URL klicken, sehen Sie eine Seite wie diese:
|
Warnung: Die angezeigte Seite enthält sensible Informationen über Ihre PHP-Umgebung. Daher wird empfohlen, Ihre persönlichen Informationen mit dem folgenden Befehl vom Server zu entfernen: rm -f /var/www/info.php |
Was ist im Playbook enthalten?
Als Nächstes wollen wir die Bedeutung und Wichtigkeit der Dateien verstehen, die im ansible-playbook-Inhalt verwendet werden:
-
vars/default.yml
Die default.yml-Variablendatei enthält den Domainnamen und das Passwort des MySQL-root-Accounts. Dies sind Standardwerte, die in den ansible-playbook-Tasks verwendet werden:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
Die apache.conf.j2-Datei ist eine Jinja 2-Vorlagendatei, die zur Konfiguration eines neuen Apache VirtualHost verwendet wird. Die in dieser Vorlage verwendeten Variablen müssen in der vars/default.yml-Variablendatei definiert werden:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Ähnlich wie files/apache.conf.j2, ist die info.php.j2-Datei ebenfalls eine Jinja-Vorlage. Wir verwenden diese Datei, um ein Test-PHP-Skript im Document Root eines neu konfigurierten LAMP-Servers einzurichten:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
In der playbook.yml-Datei werden alle Tasks aus diesem Setup definiert. In dieser Datei werden alle LAMP-Stacks konfiguriert. Sie beginnt mit der Definition der Gruppe der Zielserver und ist auf eingestelltall. Außerdem nimmt sie den become-Wert als true ( become: true an) und definiert alle auszuführenden Tasks. Als Nächstes enthält die yaml-Datei die Standarddatei, bei der es sich um die vars/default.yml-Variablendatei handelt, um die Konfigurationsoptionen zu laden:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installieren Voraussetzungen apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] # Apache-Konfiguration - name: Installieren LAMP-Pakete apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Erstellen Dokumenten-Rootverzeichnis file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Einrichten von Apache-Virtualhost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Neu laden Apache - name: Aktivieren neue Website shell: /usr/sbin/a2ensite {{ http_conf }} notify: Neu laden Apache - name: Deaktivieren Standard- Apache-Website shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Neu laden Apache # MySQL-Konfiguration - name: Festlegen des Root-Passworts mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Entfernen aller anonymen Benutzer-konten mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Entfernen der MySQL-Test-datenbank mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # UFW-Konfiguration - name: "UFW - HTTP auf Port {{ http_port }} erlauben" ufw: rule: allow port: "{{ http_port }}" proto: tcp # PHP-Infoseite - name: Einrichten der PHP-Info-Seite template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Neu laden Apache service: name: apache2 state: reloaded - name: Neu starten Apache service: name: apache2 state: restarted |
Sie können diese Dateien basierend auf den Anforderungen und Bedürfnissen Ihres Projekts anpassen.
Fazit
In diesem Tutorial haben wir die Schritte zur Installation und Konfiguration von LAMP auf einem Remote-Server mit Ansible durchlaufen. Es gibt viele weitere Anpassungsoptionen, mit denen Sie experimentieren können. Verwenden Sie beispielsweise die offizielle Ansible-Dokumentation und die Anwendungsfälle von mysql_user aus dem Ansible-Modul ist eine hervorragende Möglichkeit, Ihr Können auf die nächste Stufe zu heben. Befolgen Sie außerdem die in dieser Anleitung beschriebenen Schritte, um die Automatisierung mit anderen Konfigurationsmanagement-Tools und Betriebssystemen zu üben, um den Schwierigkeitsgrad zu erhöhen.
Sind Sie neu beim LAMP-Stack und möchten tief in dieses Thema eintauchen? Entdecken Sie die folgenden Tutorials auf unserem Blog:
- So installieren Sie WordPress mit LAMP auf Ubuntu 20.04
- So installieren Sie den Linux, Apache, MySQL, PHP (LAMP) Stack auf CentOS-7
- So installieren Sie den LEMP Stack Linux Nginx MySQL PHP auf Ubuntu 20.04
Fröhliches Computing!

Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.