Server-Automatisierung spielt aufgrund der Löschbarkeit von modernen Anwendungsumgebungen eine wesentliche Rolle bei der Systemverwaltung. Konfigurationsverwaltungs-Tools wie Ansible werden üblicherweise verwendet, um den Prozess der automatischen Servereinrichtung zu optimieren, indem Standardverfahren für neue Server festgelegt und menschliche Fehler in Zusammenhang mit manueller Einrichtung reduziert werden.
Ansible bietet eine einfache Architektur, die keiner speziellen Software für die Installation auf Knoten bedarf. Des Weiteren bietet es eine Reihe stabiler Funktionen und integrierter Module, die das Schreiben von Automatisierungsskripts erleichtern.
Dieser Leitfaden erklärt, wie Sie die Schritte in unserem Leitfaden So installieren Sie Linux, Apache, MySQL und PHP (LAMP) auf Ubuntu 18.04 mit Ansible automatisieren können. Ein „LAMP“-Stack ist eine aus Open-Source-Software bestehende Gruppe, die normalerweise zusammen installiert wird, damit ein Server dynamische Websites und Web-Apps hosten kann. Dieser Begriff ist ein Acronym, das für das Linux Betriebssystem mit dem Apache Webserver steht. Die Daten dieser Site werden in einer MySQL-Datenbank gespeichert, und der dynamische Inhalt wird von PHP verarbeitet.
Für die automatisierte Einrichtung anhand des Playbooks, das wir in diesem Leitfaden besprechen, benötigen Sie Folgendes:
Gehen Sie zunächst sicher, dass Ihr Ansible-Steuerknoten sich verbinden und Befehle auf Ihrem/Ihren Ansible-Host(s) ausführen kann. Infos zu einem Verbindungstest finden Sie in Schritt 3 unter So installieren und konfigurieren Sie Ansible auf Ubuntu 18.04.
Dieses Ansible-Playbook bietet eine Alternative zur manuellen Ausführung des Verfahrens, das in unserem Leitfaden So installieren Sie Linux, Apache, MySQL und PHP (LAMP) auf Ubuntu 18.04 beschrieben ist.
Eine Ausführung dieses Playbooks führt die folgenden Aktionen auf Ihren Ansible-Hosts durch:
aptitude
, das von Ansible als Alternative zum Paketmanager apt
bevorzugt wird.VirtualHost
und richten Sie einen dedizierten Dokumentstamm dafür ein.VirtualHost
.true
gesetzt ist.80
) zuzulassen.Wenn die Ausführung des Playbooks abgeschlossen ist, wird eine Web-PHP-Umgebung basierend auf den Optionen, die Sie in Ihren Konfigurationsvariablen definiert haben, auf Apache ausgeführt.
Als Erstes müssen Sie das LAMP-Playbook und seine Abhängigkeiten aus dem Repository do-community/ansible-playbooks abrufen. Klonen Sie dieses Repository in einen lokalen Ordner im Ansible-Steuerknoten.
Falls Sie dieses Repository bereits anhand eines anderen Leitfadens geklont haben, greifen Sie auf Ihre bestehende Kopie von ansible-playbooks
zu und führen Sie den Befehl git pull
aus, um sicherzustellen, dass Sie aktualisierten Inhalt haben:
- cd ~/ansible-playbooks
- git pull
Wenn Sie das Repository do-community/ansible-playbooks
zum ersten Mal verwenden, klonen Sie zuerst das Repository in Ihren Basisordner mit:
- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
Die Dateien, die wir brauchen, befinden sich im Ordner lamp_ubuntu1804
, der die folgende Struktur hat:
lamp_ubuntu1804
├── files
│ ├── apache.conf.j2
│ └── info.php.j2
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md
Hier ist eine Beschreibung jeder dieser Dateien:
files/info.php.j2
: Vorlagendatei zur Einrichtung einer PHP-Testseite auf dem Stamm des Webserversfiles/apache.conf.j2
: Vorlagendatei zur Einrichtung des Apache VirtualHost.vars/default.yml
: Variablendatei zur Anpassung der Playbook-Einstellungen.playbook.yml
: Die Playbook-Datei mit Aufgaben zur Ausführung auf dem/den Remoteserver(n).readme.md
: Eine Textdatei mit Informationen über dieses Playbook.Bearbeiten Sie die Variablendatei des Playbooks zur Anpassung der Konfigurationen sowohl von MySQL als auch von Apache. Greifen Sie auf das Verzeichnis lamp_ubuntu1804
zu und öffnen Sie die Datei vars/default.yml
mit dem Befehlszeilen-Editor Ihrer Wahl:
- cd lamp_ubuntu1804
- nano vars/default.yml
Diese Datei enthält einige Variablen, die Ihrer Aufmerksamkeit bedürfen:
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true
Die folgende Liste enthält eine kurze Erklärung jeder dieser Variablen und wie Sie diese ändern könnten:
mysql_root_password
: Das gewünschte Passwort für das MySQL-Konto root.app_user
: Ein Remotebenutzer ohne Rootberechtigung auf dem Ansible-Host, der als Besitzer der Anwendungsdateien festgelegt wird.http_host
: Ihr Domänenname.http_conf
: Der Name der Konfigurationsdatei, die in Apache erstellt wird.http://_port
: HTTP-Port für diesen virtuellen Host, bei dem 80
die Standardeinstellung ist.disable_default
: Ob die Standard-Website von Apache deaktiviert werden soll oder nicht.Sobald Sie mit der Aktualisierung der Variablen in vars/default.yml
fertig sind, speichern und schließen Sie diese Datei. Wenn Sie nano
verwendet haben, drücken Sie STRG+X
, Y
, dann die EINGABETASTE
.
Sie können dieses Playbook jetzt auf einem oder mehreren Servern ausführen. Die meisten Playbooks werden standardmäßig auf jedem Server in Ihrem Inventar ausgeführt. Sie können die Markierung -l
verwenden, um sicherzustellen, dass nur eine Teilmenge von Servern oder ein einzelner Server von dem Playbook betroffen ist. Sie können auch die Markierung -u
verwenden, um anzugeben, welchen Benutzer Sie auf dem Remoteserver für die Verbindung und Ausführung der Playbook-Befehle auf den Remote-Hosts verwenden.
Um das Playbook nur auf server1
mit Verbindung als sammy
auszuführen, können Sie folgenden Befehl verwenden:
- ansible-playbook playbook.yml -l server1 -u sammy
Sie erhalten eine Ausgabe, die der folgenden ähnelt:
Output
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
Anmerkung: Weitere Informationen zur Ausführung von Ansible-Playbooks finden Sie in unserem Leitfaden Ansible-Schummelzettel.
Wenn die Ausführung des Playbooks abgeschlossen ist, gehen Sie zu Ihrem Webbrowser und greifen Sie auf die Host- oder IP-Adresse des Servers zu, die in den Playbook-Variablen konfiguriert ist, gefolgt von /info.php
:
http://server_host_or_IP/info.php
Sie sehen eine Seite wie diese:
Da diese Seite sensible Informationen über Ihre PHP-Umgebung enthält, wird empfohlen, diese vom Server zu entfernen, indem Sie den Befehl rm -f /var/www/info.php
ausführen, sobald Sie mit der Einrichtung fertig sind.
Sie finden die LAMP-Server-Einrichtung in diesem Tutorial im Ordner lamp_ubuntu1804
im Repository DigitalOcean Community Playbooks. Klicken Sie zum direkten Kopieren oder Herunterladen des Skript-Inhalts auf die Schaltfläche Raw im oberen Bereich jedes Skripts.
Der vollständige Inhalt des Playbooks sowie seine zugehörigen Dateien finden Sie ebenfalls hier.
Die Variablendatei default.yml
enthält Werte, die in den Playbook-Aufgaben verwendet werden, wie z. B. das Passwort für das MySQL-Konto root und den Domänennamen für die Konfiguration mit Apache.
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true
Die Datei apache.conf.j2
ist eine Jinja 2-Vorlagendatei, die einen neuen Apache VirtualHost konfiguriert. Die in dieser Vorlage verwendeten Variablen sind in der Variablendatei vars/default.yml
definiert.
<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>
Die Datei info.php.j2
ist eine weitere Jinja-Vorlage, die für die Einrichtung eines Test-PHP-Skripts im Dokumentstamm des neu konfigurierten LAMP-Servers verwendet wird.
<?php
phpinfo();
Alle Aufgaben dieser Einrichtung sind in der Datei playbook.yml
definiert. Am Anfang werden die Gruppen von Servern definiert, die das Ziel dieser Einrichtung (all
) sein sollen. Anschließend wird mit become: true
definiert, dass Aufgaben standardmäßig mit Rechteausweitung (sudo
) ausgeführt werden sollen. Dann enthält es die Variablendatei vars/default.yml
, um Konfigurationsoptionen zu laden.
---
- hosts: all
become: true
vars_files:
- vars/default.yml
tasks:
- name: Install prerequisites
apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
loop: [ 'aptitude' ]
#Apache Configuration
- name: Install LAMP Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]
- name: Create document root
file:
path: "/var/www/{{ http_host }}"
state: directory
owner: "{{ app_user }}"
mode: '0755'
- name: Set up Apache virtualhost
template:
src: "files/apache.conf.j2"
dest: "/etc/apache2/sites-available/{{ http_conf }}"
notify: Reload Apache
- name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
- name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
when: disable_default
notify: Reload Apache
# MySQL Configuration
- name: Sets the root password
mysql_user:
name: root
password: "{{ mysql_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Removes all anonymous user accounts
mysql_user:
name: ''
host_all: yes
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
- name: Removes the MySQL test database
mysql_db:
name: test
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
# UFW Configuration
- name: "UFW - Allow HTTP on port {{ http_port }}"
ufw:
rule: allow
port: "{{ http_port }}"
proto: tcp
# PHP Info Page
- name: Sets Up PHP Info Page
template:
src: "files/info.php.j2"
dest: "/var/www/{{ http_host }}/info.php"
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
- name: Restart Apache
service:
name: apache2
state: restarted
Sie können diese Dateien an Ihre individuellen Bedürfnisse in Ihrem Workflow anpassen.
In diesem Leitfaden haben wir den Prozess der Installation und Einrichtung einer LAMP-Umgebung auf einem Remoteserver mithilfe von Ansible automatisiert. Da jeder bei der Arbeit mit MySQL-Datenbanken und -benutzern in der Regel unterschiedliche Bedürfnisse hat, raten wir Ihnen, sich die offizielle Ansible-Dokumentation für weitere Informationen und Anwendungsfälle des Ansible-Moduls mysql_user
anzusehen.
Wenn Sie weitere Aufgaben in dieses Playbook aufnehmen möchten, um Ihre Servereinrichtung weiter anzupassen, finden Sie diesbezügliche Informationen in unserer Ansible-Einführung Grundlagen des Konfigurationsmanagements: Ansible-Playbooks schreiben.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!