Einführung

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 WordPress mit LAMP unter Ubuntu 18.04​​​ automatisieren können. WordPress ist das beliebteste CMS (Content-Management-System) im Internet, das es Benutzern ermöglicht, flexible Blogs und Websites auf einem MySQL-Backend mit PHP-Verarbeitung einzurichten. Nach dem Einrichten kann fast die gesamte Verwaltung vom Web-Frontend aus erfolgen.

Voraussetzungen

ein illustration for: Voraussetzungen

Für die automatisierte Einrichtung anhand des Playbooks, das wir in diesem Leitfaden besprechen, benötigen Sie Folgendes:

  • Einen Ansible-Steuerknoten: einen Ubuntu-18.04-Rechner, auf dem Ansible installiert und für die Verbindung mit Ihren Ansible-Hosts mittels SSH-Schlüsseln konfiguriert ist. Stellen Sie sicher, dass der Steuerknoten einen regelmäßigen Benutzer mit sudo-Berechtigungen und einer aktivierten Firewall hat, wie in unserem Leitfaden Ersteinrichtung des Servers ausgeführt ist. Um Ansible einzurichten, folgen Sie unserem Leitfaden So installieren und konfigurieren Sie Ansible unter Ubuntu 18.04.

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 unter Ubuntu 18.04.

Welchen Zweck hat dieses Playbook?

Dieses Ansible-Playbook bietet eine Alternative zur manuellen Ausführung des Verfahrens, das in unserem Leitfaden So installieren Sie WordPress mit LAMP unter Ubuntu 18.04 beschrieben ist.

Eine Ausführung dieses Playbooks führt die folgenden Aktionen auf Ihren Ansible-Hosts durch:

  1. Installieren Sie aptitude, das von Ansible als Alternative zum Paketmanager apt bevorzugt wird.
  1. Installieren Sie die erforderlichen LAMP-Pakete und PHP-Erweiterungen.
  1. Erstellen und aktivieren Sie einen neuen Apache VirtualHost für die WordPress-Website.
  1. Aktivieren Sie das Apache-Rewrite-Modul (mod_rewrite)​​.
  1. Deaktivieren Sie die Apache-Standard-Website.
  1. Legen Sie das Passwort für den MySQL-Benutzer root fest.
  1. Entfernen Sie anonyme MySQL-Konten und die Testdatenbank.
  1. Erstellen Sie eine neue MySQL-Datenbank und einen Benutzer für die WordPress-Website.
  1. Richten Sie UFW ein, um HTTP-Verkehr auf dem konfigurierten Port (standardmäßig 80) zuzulassen.
  1. Laden Sie WordPress herunter und entpacken Sie es.
  1. Richten Sie eine korrekte Verzeichniseigentümerschaft und korrekte Berechtigungen ein.
  1. Richten Sie die Datei wp-config.php mit der bereitgestellten Vorlage ein.

Wenn die Ausführung des Playbooks abgeschlossen ist, wird eine WordPress-Installation basierend auf den Optionen, die Sie in Ihren Konfigurationsvariablen definiert haben, auf einer LAMP-Umgebung ausgeführt.

So verwenden Sie dieses Playbook

Als Erstes müssen Sie das Playbook WordPress auf LAMP 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:

				
					
[environment local]

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:

				
					
[environment local]

cd ~

git clone https://github.com/do-community/ansible-playbooks.git

cd ansible-playbooks

				
			

Die Dateien, die wir brauchen, befinden sich im Ordner wordpress-lamp_ubuntu1804, der die folgende Struktur hat:

				
					
wordpress-lamp_ubuntu1804

├── files

│ ├── apache.conf.j2

│ └── wp-config.php.j2

├── vars

│ └── default.yml

├── playbook.yml

└── readme.md

				
			

Hier ist eine Beschreibung jeder dieser Dateien:

  • files/apache.conf.j2: Vorlagendatei zur Einrichtung des Apache VirtualHost.
  • files/wp-config.php.j2: Vorlagendatei zum Einrichten der Konfigurationsdatei von WordPress.
  • 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 Optionen. Greifen Sie auf das Verzeichnis wordpress-lamp_ubuntu1804 zu und öffnen Sie die Datei vars/default.yml mit dem Befehlszeilen-Editor Ihrer Wahl:

				
					
[environment local]

cd wordpress-lamp_ubuntu1804

nano vars/default.yml

				
			

Diese Datei enthält einige Variablen, die Ihrer Aufmerksamkeit bedürfen:

				
					
[label vars/default.yml]

[environment local]

---

#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<^>"

				
			

Die folgende Liste enthält eine kurze Erklärung jeder dieser Variablen und wie Sie diese ändern könnten:

  • php_modules: Ein Array mit PHP-Erweiterungen, die zur Unterstützung Ihrer Einrichtung von WordPress installiert werden sollen. Sie müssen diese Variable nicht ändern, aber Sie könnten neue Erweiterungen in die Liste aufnehmen, wenn Ihre spezifische Einrichtung es erfordert.
  • mysql_root_password: Das gewünschte Passwort für das MySQL-Konto root.
  • mysql_db: Der Name der MySQL-Datenbank, die für WordPress erstellt werden soll.
  • 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: 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.

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 das Flag -l verwenden, um sicherzustellen, dass nur eine Teilmenge von Servern oder ein einzelner Server von dem Playbook betroffen ist. Sie können auch das Flag -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:

				
					
[environment local]

ansible-playbook playbook.yml -l &lt;^&gt;server1&lt;^&gt; -u &lt;^&gt;sammy&lt;^&gt;

				
			

Sie erhalten eine Ausgabe, die der folgenden ähnelt:

				
					
[secondary_label Output]

PLAY [all] *****************************************************************************************************************************



TASK [Gathering Facts] *****************************************************************************************************************

ok: [server1]



TASK [Install prerequisites] ***********************************************************************************************************

ok: [server1]



…



TASK [Download and unpack latest WordPress] ********************************************************************************************

changed: [server1]



TASK [Set ownership] *******************************************************************************************************************

changed: [server1]



TASK [Set permissions for directories] *************************************************************************************************

changed: [server1]



TASK [Set permissions for files] *******************************************************************************************************

changed: [server1]



TASK [Set up wp-config] ****************************************************************************************************************

changed: [server1]



RUNNING HANDLER [Reload Apache] ********************************************************************************************************

changed: [server1]



RUNNING HANDLER [Restart Apache] *******************************************************************************************************

changed: [server1]



PLAY RECAP *****************************************************************************************************************************

server1 : ok=22 changed=18 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 das Playbook ausgeführt ist, können Sie zu Ihrem Webbrowser gehen, um die Installation von WordPress von dort aus zu beenden.

Navigieren Sie zu dem Domänennamen oder der öffentlichen IP-Adresse Ihres Servers:

				
					
http://&lt;^&gt;server_host_or_IP&lt;^&gt;

				
			

Sie sehen eine Seite wie diese:

Nach Auswahl der Sprache, die Sie für Ihre WordPress-Installation verwenden möchten, kommen Sie zum letzten Schritt der Einrichtung Ihres WordPress-Benutzers und -Passworts, damit Sie sich in Ihrem Kontrollfeld anmelden können:

Wenn Sie weiter klicken, kommen Sie zu einer Seite, auf der Sie sich anmelden müssen:

Nach der Anmeldung gelangen Sie zum WordPress-Administrations-Dashboard:

Einige gängige Schritte zur Anpassung Ihrer WordPress-Installation sind u. a. die Auswahl der Permalink-Einstellung für Ihre Beiträge (in Einstellungen > Permalinks) und die Wahl eines neuen Designs (in Darstellung > Design).

Der Inhalt des Playbooks

Sie finden die Server-Einrichtung für WordPress auf LAMP in diesem Tutorial im Ordner wordpress-lamp_ubuntu1804​​​ im Repository the cloud provider 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.

vars/default.yml

Die Variablendatei default.yml enthält Werte, die in den Playbook-Aufgaben verwendet werden, wie z. B. Datenbank-Einstellungen und den Domänennamen für die Konfiguration mit Apache.

				
					
[label vars/default.yml]

[environment local]

#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: "&lt;^&gt;mysql_root_password&lt;^&gt;"

mysql_db: "&lt;^&gt;wordpress&lt;^&gt;"

mysql_user: "&lt;^&gt;sammy&lt;^&gt;"

mysql_password: "&lt;^&gt;password&lt;^&gt;"



#HTTP Settings

http_host: "&lt;^&gt;your_domain&lt;^&gt;"

http_conf: "&lt;^&gt;your_domain.conf&lt;^&gt;"

http_port: "&lt;^&gt;80&lt;^&gt;"

				
			

files/apache.conf.j2

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.

				
					
[environment local]

[label files/apache.conf.j2]

&lt;VirtualHost *:{{ http_port }}&gt;

 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



 &lt;Directory /var/www/{{ http_host }}&gt;

 Options -Indexes

 &lt;/Directory&gt;



 &lt;IfModule mod_dir.c&gt;

 DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

 &lt;/IfModule&gt;



&lt;/VirtualHost&gt;

				
			

files/wp-config.php.j2

Die Datei wp-config.php.j2 ist eine weitere Jinja-Vorlage für die Einrichtung der Hauptkonfigurationsdatei, die von WordPress verwendet wird. Die in dieser Vorlage verwendeten Variablen sind in der Variablendatei vars/default.yml definiert. Eindeutige Authentifizierungsschlüssel und Salts werden mit einer Hash-Funktion generiert.

				
					
[environment local]

[label files/info.php.j2]

&lt;?php

/**

 * The base configuration for WordPress

 *

 * The wp-config.php creation script uses this file during the

 * installation. You don't have to use the web site, you can

 * copy this file to "wp-config.php" and fill in the values.

 *

 * This file contains the following configurations:

 *

 * * MySQL settings

 * * Secret keys

 * * Database table prefix

 * * ABSPATH

 *

 * @link https://codex.wordpress.org/Editing_wp-config.php

 *

 * @package WordPress

 */



// ** MySQL settings - You can get this info from your web host ** //

/** The name of the database for WordPress */

define( 'DB_NAME', '{{ mysql_db }}' );



/** MySQL database username */

define( 'DB_USER', '{{ mysql_user }}' );



/** MySQL database password */

define( 'DB_PASSWORD', '{{ mysql_password }}' );



/** MySQL hostname */

define( 'DB_HOST', 'localhost' );



/** Database Charset to use in creating database tables. */

define( 'DB_CHARSET', 'utf8' );



/** The Database Collate type. Don't change this if in doubt. */

define( 'DB_COLLATE', '' );



/** Filesystem access **/

define('FS_METHOD', 'direct');



/**#@+

 * Authentication Unique Keys and Salts.

 *

 * Change these to different unique phrases!

 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}

 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.

 *

 * @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 Database Table prefix.

 *

 * You can have multiple installations in one database if you give each

 * a unique prefix. Only numbers, letters, and underscores please!

 */

$table_prefix = 'wp_';



/**

 * For developers: WordPress debugging mode.

 *

 * Change this to true to enable the display of notices during development.

 * It is strongly recommended that plugin and theme developers use WP_DEBUG

 * in their development environments.

 *

 * For information on other constants that can be used for debugging,

 * visit the Codex.

 *

 * @link https://codex.wordpress.org/Debugging_in_WordPress

 */

define( 'WP_DEBUG', false );



/* That's all, stop editing! Happy publishing. */



/** Absolute path to the WordPress directory. */

if ( ! defined( 'ABSPATH' ) ) {

	define( 'ABSPATH', dirname( __FILE__ ) . '/' );

}



/** Sets up WordPress vars and included files. */

require_once( ABSPATH . 'wp-settings.php' );



				
			

playbook.yml

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.

				
					
[label playbook.yml]

[environment local]

---

- hosts: all

 become: true

 vars_files:

 - vars/default.yml



 tasks:

 - name: Install prerequisites

 apt: name=aptitude update_cache=yes state=latest force_apt_get=yes

 tags: [ system ]



 - name: Install LAMP Packages

 apt: name={{ item }} update_cache=yes state=latest

 loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]

 tags: [ system ]



 - name: Install PHP Extensions

 apt: name={{ item }} update_cache=yes state=latest

 loop: "{{ php_modules }}"

 tags: [ system ]



 # Apache Configuration

 - name: Create document root

 file:

 path: "/var/www/{{ http_host }}"

 state: directory

 owner: "www-data"

 group: "www-data"

 mode: '0755'

 tags: [ apache ]



 - name: Set up Apache VirtualHost

 template:

 src: "files/apache.conf.j2"

 dest: "/etc/apache2/sites-available/{{ http_conf }}"

 notify: Reload Apache

 tags: [ apache ]



 - name: Enable rewrite module

 shell: /usr/sbin/a2enmod rewrite

 notify: Reload Apache

 tags: [ apache ]



 - name: Enable new site

 shell: /usr/sbin/a2ensite {{ http_conf }}

 notify: Reload Apache

 tags: [ apache ]



 - name: Disable default Apache site

 shell: /usr/sbin/a2dissite 000-default.conf

 notify: Restart Apache

 tags: [ apache ]



 # MySQL Configuration

 - name: Set the root password

 mysql_user:

 name: root

 password: "{{ mysql_root_password }}"

 login_unix_socket: /var/run/mysqld/mysqld.sock

 tags: [ mysql, mysql-root ]



 - name: Remove all anonymous user accounts

 mysql_user:

 name: ''

 host_all: yes

 state: absent

 login_user: root

 login_password: "{{ mysql_root_password }}"

 tags: [ mysql ]



 - name: Remove the MySQL test database

 mysql_db:

 name: test

 state: absent

 login_user: root

 login_password: "{{ mysql_root_password }}"

 tags: [ mysql ]



 - name: Creates database for WordPress

 mysql_db:

 name: "{{ mysql_db }}"

 state: present

 login_user: root

 login_password: "{{ mysql_root_password }}"

 tags: [ mysql ]



 - name: Create MySQL user for 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 Configuration

 - name: "UFW - Allow HTTP on port {{ http_port }}"

 ufw:

 rule: allow

 port: "{{ http_port }}"

 proto: tcp

 tags: [ system ]



 # WordPress Configuration

 - name: Download and unpack latest 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: Set ownership

 file:

 path: "/var/www/{{ http_host }}"

 state: directory

 recurse: yes

 owner: www-data

 group: www-data

 tags: [ wordpress ]



 - name: Set permissions for directories

 shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;"

 tags: [ wordpress ]



 - name: Set permissions for files

 shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;"

 tags: [ wordpress ]



 - name: Set up wp-config

 template:

 src: "files/wp-config.php.j2"

 dest: "/var/www/{{ http_host }}/wordpress/wp-config.php"

 tags: [ wordpress ]



 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.

Zusammenfassung

In diesem Leitfaden haben wir den Prozess der Installation und Einrichtung einer WordPress-Website mit LAMP auf einem Ubuntu-18.04-Server automatisiert.

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.