Einführung
Es gibt immer Zeiten, in denen wir neue Server konfigurieren müssen. Dies kann der Fall sein, um die Arbeitslast zu verteilen, oder wenn wir einfach mehr Server benötigen. Bei der Einrichtung neuer Server müssen Benutzer die Serverautomatisierung nutzen, um sie zu konfigurieren. Dies geschieht, um manuelle Eingriffe zu minimieren. Ansible ist eines der Konfigurationsmanagement-Tools, mit denen ein neuer Server automatisch konfiguriert werden kann, wodurch das Risiko menschlicher Fehler bei der manuellen Einrichtung des Servers verringert wird.
Ansible ist ein funktionsreiches Tool mit einer einfachen Architektur. Es erleichtert die Konfiguration von Servern durch Skripte. Aufgrund seiner schlanken Architektur erfordert Ansible keine Installation anderer Software auf den Nodes.
In diesem Tutorial zeigen wir Ihnen, wie Sie mit Ansible die Installation von WordPress mit dem LAMP-Stack auf einem Ubuntu-Server automatisieren. WordPress ist ein CMS, das zur Erstellung von Blogs und Websites verwendet wird, wobei PHP als Programmiersprache und eine MySQL-Datenbank zur Speicherung von Daten zum Einsatz kommen. Sobald WordPress installiert ist, können Benutzer die Website über das Web-Frontend verwalten.
Voraussetzungen
- Da dieses Tutorial auf Ubuntu basiert, müssen Sie die neueste Ubuntu-Version mit sudo-Berechtigungen installiert haben. Wenn Sie Ubuntu nicht installiert haben, können Sie unserer Anleitung „So richten Sie Ihren Ubuntu-Server ein“.
- folgen. Wir benötigen außerdem einen Ansible-Steuerungsknoten. Dieser muss über sudo-Berechtigungen verfügen und die Firewall muss aktiviert sein. „Installieren und Konfigurieren von Ansible auf Ubuntu 20.04“ enthält eine detaillierte Anleitung zur Konfiguration von Ansible.
- Wir benötigen außerdem Remote-Ansible-Hosts, auf denen das neueste Ubuntu läuft. Die Hosts sind im Wesentlichen die verwalteten Knoten in Ansible.
Zusammenfassung der Ansible-Playbook-Aktionen
In diesem Abschnitt sehen wir, was unser Ansible-Playbook tut, wenn wir es ausführen. Dieses Verfahren ist eine Alternative zur hier beschriebenen manuellen Einrichtung: So installieren Sie WordPress mit LAMP auf Ubuntu 20.04.
Wenn wir das Playbook ausführen, wird Ansible:
- Installieren von aptitude , das ein bevorzugter Ansible-Paketmanager ist.
- Installieren und Konfigurieren von PHP-Erweiterungen und LAMP-Paketen.
- Erstellen eines neuen Apache- VirtualHost für die WordPress-Website.
- Aktivieren des mod_rewrite -Moduls und Deaktivieren der von Apache standardmäßig angebotenen Website.
- Festlegen des Passworts für den MySQL-Root-Benutzer.
- Entfernen der anonymen MySQL-Konten und der Testdatenbank.
- Erstellen eines neuen Benutzers und einer neuen Datenbank. Diese werden von der WordPress-Website verwendet.
- Einrichten von UFW, um HTTP-Verkehr auf dem konfigurierten Port zuzulassen ( 80 standardmäßig).
- Herunterladen und Entpacken von WordPress.
- Einrichten der Verzeichnisberechtigungen und -besitzrechte.
- Konfigurieren einer neuen wp-config.php -Datei mithilfe ihrer Vorlage.
Anleitung für das WordPress-auf-LAMP-Ansible-Playbook
Zuerst müssen wir das WordPress-auf-LAMP-Playbook und seine Abhängigkeiten aus dem do-community/ansible-playbooks-Repository beziehen. Wir werden dieses Repository auf dem Ansible-Steuerungsknoten klonen.
Sie können den Befehl git pull wie unten beschrieben ausführen:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Stellen Sie sicher, dass Sie den aktuellen Stand des oben genannten Repositorys abgerufen haben, falls Sie das Repository bereits zuvor geklont haben. Unten sehen Sie, wie Sie das Update durchführen können:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
Nun müssen wir die Dateien im Ordner wordpress-lamp_ubuntu ausfindig machen. Der Name dieses Ordners kann je nach verwendeter Ubuntu-Version variieren. Auf den ersten Blick sehen Sie die folgende Struktur in diesem Verzeichnis:

Fassen wir den Zweck dieser Dateien im Folgenden zusammen:
- files/apache.conf.j2: Apache verwendet VirtualHost. Diese Datei wird verwendet, um die Einstellungen für VirtualHost.
- files/wp-config.php.j2: Diese Datei enthält Einstellungen zur Konfiguration von WordPress.
- vars/default.yml: Sie konfiguriert die Playbook-Einstellungen.
- playbook.yml: Wenn Aufgaben auf einem Remote-Server ausgeführt werden müssen, wird diese Datei verwendet, um sie zu konfigurieren.
- readme.md: Anleitung zur Verwendung des Playbooks.
Wir müssen die Variablendatei des Playbooks bearbeiten, um die Installation anzupassen. Öffnen Sie zuerst die vars/default.yaml Datei, die sich im oben genannten Verzeichnis befindet:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
Diese Datei ist ziemlich lang. Sie enthält eine Reihe von Konfigurationen, die uns bei unserer Installation helfen:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #System Settings php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL Settings mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP Settings http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
Hier befassen wir uns mit den folgenden Variablen:
- php_modules: Ein Array mit PHP-Erweiterungen, die installiert werden sollten, um Ihr WordPress-Setup zu unterstützen. Wenn Sie weitere Module installieren möchten, können Sie dies hier angeben.
- mysql_root_password: Das Passwort für das root MySQL-Konto.
- mysql_db: Dies gibt den Namen der MySQL-Datenbank an, die WordPress verwenden wird.
- mysql_user: Der Name des MySQL-Benutzers, der für WordPress erstellt werden soll.
- mysql_password: Das Passwort für den neuen MySQL-Benutzer.
- http_host: Domainname oder die IP des Servers.
- http_conf: Der Name der Konfigurationsdatei, die in Apache erstellt wird.
- http_port: HTTP-Port für diesen virtuellen Host. Dieser Port wird verwendet, um auf die Website zuzugreifen. Der Standardwert ist 80.
Geben Sie als Nächstes die Werte in der obigen Datei ein, speichern und schließen Sie sie. Für Benutzer, die den Nano-Editor verwenden, drücken Sie STRG+X, Y, und drücken Sie ENTER.
Jetzt sind Sie bereit, dieses Playbook auszuführen. Sie können dieses Playbook auf einem oder mehreren Servern ausführen. Wenn Sie dieses Playbook auf einem bestimmten Server ausführen möchten, können Sie das Flag -l verwenden. Wenn Sie außerdem den Benutzer angeben müssen, der sich mit dem Remote-Server verbindet, geben Sie den Benutzer mit dem Flag -u an.
Angenommen, wir möchten unser Playbook auf einem beliebigen Server ausführen, srvr1 unter Verwendung des Benutzers u1, können wir den folgenden Befehl ausführen:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
Sobald Sie den obigen Befehl ausführen, erhalten Sie eine Ausgabe wie die folgende:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
Warten Sie, bis die Ausführung des Playbooks abgeschlossen ist. Navigieren Sie dann zum server_name in Ihrem Webbrowser:
|
1 |
http://server_host_or_ip/ |
Sie sehen den folgenden Bildschirm:

Wählen Sie als Nächstes die Sprache Ihrer Wahl und drücken Sie Weiter. Sie gelangen zum nächsten Bildschirm, auf dem Sie nach einigen Details gefragt werden, um die Installation abzuschließen:

Geben Sie danach die Informationen ein und drücken Sie WordPress installieren. Es wird einige Zeit dauern, und dann sehen Sie einen Bildschirm wie den folgenden:

Wählen Sie Anmelden, um sich auf Ihrer Website anzumelden und die Einstellungen zu konfigurieren:

Inhalt des Ansible-Playbooks
Denken Sie an den Ordner wordpress-lamp_ubuntu . Er enthält einige Dateien. Gehen wir sie also nacheinander durch:
● vars/default.yml
Diese Datei enthält Werte, die zur Konfiguration der Einstellungen für Ihre WordPress-Website verwendet werden:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Systemeinstellungen php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL-Einstellungen mysql_root_password: "mysql_root_passwort" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "passwort" #HTTP-Einstellungen http_host: "deine_domain" http_conf: "deine_domain.conf" http_port: "80" |
● files/apache.conf.j2
Diese Datei wird verwendet, um den Apache VirtualHost zu konfigurieren:
|
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/wp-config.php.j2
Diese Datei wird zur Konfiguration von WordPress verwendet. Sie enthält eindeutige Schlüssel und Salts, die von Hash-Funktionen generiert wurden:
|
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * Die Basiskonfiguration für WordPress * * Das Erstellungsskript für wp-config.php verwendet diese Datei während der * Installation. Sie müssen die Website nicht verwenden, Sie können * diese Datei nach "wp-config.php" kopieren und die Werte eintragen. * * Diese Datei enthält die folgenden Konfigurationen: * * * MySQL-Einstellungen * * Sicherheitsschlüssel * * Datenbanktabellen-Präfix * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** MySQL-Einstellungen - Diese Zugangsdaten erhalten Sie von Ihrem Webhoster ** // /** Der Name der Datenbank für WordPress */ define( 'DB_NAME', '{{ mysql_db }}' ); /** MySQL-Datenbank-Benutzername */ define( 'DB_USER', '{{ mysql_user }}' ); /** MySQL-Datenbank-Passwort */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** MySQL-Hostname */ define( 'DB_HOST', 'localhost' ); /** Zeichensatz der Datenbank, der beim Erstellen von Tabellen verwendet werden soll. */ define( 'DB_CHARSET', 'utf8' ); /** Der Sortiertyp der Datenbank. Im Zweifelsfall nicht ändern. */ define( 'DB_COLLATE', '' ); /** Dateisystemzugriff **/ define('FS_METHOD', 'direct'); /**#@+ * Einzigartige Authentifizierungsschlüssel und Salts. * * Ändere diese in andere einzigartige Phrasen! * Du kannst diese mit dem {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org Secret-Key-Service} generieren * Du kannst diese jederzeit ändern, um alle vorhandenen Cookies ungültig zu machen. Dies zwingt alle Benutzer, sich erneut anzumelden. * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * WordPress-Datenbank-Tabellenpräfix. * * Du kannst mehrere Installationen in einer Datenbank haben, wenn du jeder * ein einzigartiges Präfix gibst. Bitte nur Zahlen, Buchstaben und Unterstriche! */ $table_prefix = 'wp_'; /** * Für Entwickler: WordPress-Debugging-Modus. * * Ändere dies auf true, um die Anzeige von Hinweisen während der Entwicklung zu aktivieren. * Es wird dringend empfohlen, dass Plugin- und Theme-Entwickler WP_DEBUG * in ihren Entwicklungsumgebungen verwenden. * * Für Informationen zu anderen Konstanten, die für das Debugging verwendet werden können, * besuche den Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* Das war’s, Schluss mit dem Editieren! Viel Spaß beim Veröffentlichen. */ /** Absoluter Pfad zum WordPress-Verzeichnis. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Richtet WordPress-Variablen und eingebundene Dateien ein. */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
Diese Datei enthält alle Aufgaben, die in diesem Setup definiert sind. Sie beginnt mit der Auflistung einer Gruppe von Servern, die von diesem Setup angesprochen werden. Sie enthält die vars/default.yml Variablen-Datei, um 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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installiere Voraussetzungen apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: Installiere LAMP-Pakete apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: Installiere PHP-Erweiterungen apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Apache-Konfiguration - name: Erstelle Dokumenten-Root-Verzeichnis file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: Richte Apache-VirtualHost ein template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Lade Apache neu tags: [ apache ] - name: Aktiviere Rewrite-Modul shell: /usr/sbin/a2enmod rewrite notify: Lade Apache neu tags: [ apache ] - name: Aktiviere neue Website shell: /usr/sbin/a2ensite {{ http_conf }} notify: Lade Apache neu tags: [ apache ] - name: Deaktiviere Standard- Apache-Website shell: /usr/sbin/a2dissite 000-default.conf notify: Starte Apache neu tags: [ apache ] # MySQL-Konfiguration - name: Lege das Root-Passwort fest mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: Entferne alle anonymen Benutzerkonten mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Entferne die MySQL-Test-Datenbank mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Erstellt Datenbank für WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Erstelle MySQL-Benutzer für WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # UFW-Konfiguration - name: "UFW - HTTP auf Port {{ http_port }} erlauben" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # WordPress-Konfiguration - name: Herunterladen und entpacken des neuesten WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: Besitzrechte festlegen file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: Berechtigungen für Verzeichnisse festlegen shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: Berechtigungen für Dateien festlegen shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: Einrichten der wp--Konfiguration template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Apache neu laden service: name: apache2 state: reloaded - name: Apache neu starten service: name: apache2 state: restarted |
Sie können diese Dateien nach Bedarf anpassen, um sie an die spezifischen Anforderungen der von Ihnen erstellten Website anzupassen.
Fazit
In dieser Anleitung haben wir gezeigt, wie Sie die Installation und Einrichtung einer WordPress-Website, die auf dem LAMP-Stack auf dem neuesten Ubuntu-Betriebssystem läuft, mit Ansible automatisieren können.
Weitere Anleitungen zur Arbeit mit Ansible finden Sie in den folgenden Tutorials auf unserem Blog:
- Verwendung von Ansible mit CloudSigma
- Automatisierung der Server-Einrichtung mit Ansible und Ubuntu 20.04
- Installation und Konfiguration von LAMP auf Ubuntu 20.04 mit Ansible
Viel Spaß beim Computing!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.