WordPress mit Cloud-Init einrichten 

WordPress ist das meistgenutzte Open-Source-Content-Management-System – und es ist völlig kostenlos. Mehr als 40 % der Websites im Internet werden mit WordPress* betrieben, sowohl kleine Blogs als auch große Websites. WordPress ist extrem anpassbar und anfängerfreundlich, eignet sich aber auch für große und komplexe Websites. 

Automatisierung des Einrichtungsprozess mit Cloud-Init

Das Einrichten neuer WordPress-Instanzen ist einfach, aber damit WordPress läuft, benötigst Du einen Webserver und eine MySQL-Datenbank. All das einzurichten kann viel Zeit in Anspruch nehmen, vor allem, wenn es sich um einen größeren Maßstab handelt.. 

Wenn Du jedoch WordPress zu Deinem bestehenden Server hinzufügen möchtest, lies Dir diesen Artikel zur manuellen Einrichtung von WordPress durch. 

Cloud-Init kann verwendet werden, um den Installations- und Einrichtungsprozess deines Servers zu automatisieren, indem dein Server einem bestimmten Satz von Anweisungen folgt, die du definierst. In diesem Leitfaden werden wir einen Blick darauf werfen, wie der Installationsprozess aussieht und eine Cloud-Init-Konfiguration dafür erstellen, damit er automatisiert werden kann. 

Vorteile von Cloud-Init

Die wahre Stärke von Cloud-Init liegt nicht nur in der Automatisierung der Erstinstallation, sondern auch in der automatischen Replikation auf mehreren Servern. Dies ist eine enorme Zeitersparnis im Falle einer Katastrophe, wenn du einen neuen Server so schnell wie möglich zum Laufen bringen und konfigurieren musst. Für weitere Details über Cloud-Init selbst haben wir einen ganzen Artikel über die Vorteile und den Einsatz geschrieben. 

WordPress Voraussetzungen

Bevor wir mit dem Installationsprozess beginnen können, müssen wir wissen, was wir eigentlich installieren müssen. WordPress empfiehlt 

  • Server mit PHP in der Version 7.4 oder höher, 
  • MySQL Version 5.7 ODER MariaDB Version 10.3 oder höher, 
  • Apache2, nginx oder ein anderer Webserver 

Grundsätzlich verwendet WordPress also den LAMP-Stack (mit möglichen Variationen), der für Linux, Apache, MySQL / MariaDB und PHP steht. Wir werden MariaDB Version 10.3 und PHP 8.1 installieren, da dies die neuste stabile Version von PHP ist (Stand Oktober 2022). 

Du kannst entweder einen VPS, VDS oder einen dedicated Server verwenden, je nachdem, wie groß deine Anforderungen sind. Das gleiche gilt für das Betriebssystem, du kannst jede Linux-Distribution verwenden. Eine gängige Wahl ist ein VPS M mit NVMe-Speicher und Debian 11

LAMP Stack Einrichtung

Wir haben bereits eine Anleitung zur Einrichtung des LAMP-Stacks mit Cloud-Init erstellt, die wir als Ausgangspunkt für unsere neue Cloud-Init-Konfiguration verwenden werden: 

#cloud-config
package_update: true
package_upgrade: true
packages:
  - software-properties-common
  - wget
  - curl
  - apache2
runcmd:
  - curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
  - sudo apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y
  - service apache2 restart
  - apt install mariadb-server mariadb-client -y
  - pw=$(openssl rand -base64 18); mysqladmin -u root -h localhost password "$pw"; echo "mysql_password=$pw" >> /home/mysql_access.txt
  - mysqladmin reload

Damit wird Apache2 mit PHP 8.1 und MariaDB installiert. Das Passwort für unsere MariaDB-Datenbank ist in dieser Datei gespeichert:

/home/mysql_access.txt

WordPress Installation

Datenbank erstellen

Dieser Schritt ist ziemlich einfach, wir müssen nur einen SQL-Befehl ausführen, um eine neue, leere Datenbank zu erstellen: 

CREATE DATABASE wordpress; 

Fügen wir dies also zu unserer Konfiguration hinzu: 

# Create database
  - sudo mysql -e “CREATE DATABASE wordpress;”

WordPress CLI

WordPress ist bekannt für seine einfache Installation, und das gilt auch für Headless-Installationen (ohne das visuelle Installationsprogramm im Browser zu öffnen). Die WordPress-CLI bietet eine sehr einfache Möglichkeit zur Installation und Konfiguration einer WordPress-Instanz. Installieren wir also zunächst das CLI: 

# Install WordPress CLI
  - cd ~ 
  - sudo curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  - sudo chmod +x wp-cli.phar
  - sudo mv wp-cli.phar /usr/local/bin/wp

Dies lädt die CLI-Datei in das Home-Verzeichnis herunter, macht sie ausführbar und verschiebt sie in das bin-Verzeichnis, so dass der Befehl „wp“ global verfügbar ist. 

WordPress Einrichtung

Nach der Installation der CLI ist die eigentliche Einrichtung in wenigen einfachen Schritten erledigt: 

  1. Navigiere zum Stammverzeichnis des Webservers (/var/www/html) 
  2. Lade die neueste WordPress-Version herunter 
  3. Konfiguriere die Datenbankverbindung 
  4. Installiere WordPress 

Hinweis: Wir werden die Befehle als Benutzer „www-data“ ausführen, da dies der Benutzer ist, der die PHP-Skripte ausführt. Wenn wir die Dateien und Ordner als Root-Benutzer erstellen, hat der www-data-Benutzer nicht genügend Rechte, um Änderungen an den Verzeichnissen vorzunehmen (z. B. Dateien hochladen, Plugins/Themes installieren, …). 

Bereite das html-Verzeichnis vor (setze die richtigen Berechtigungen): 

  # Set up WordPress
  - cd /var/www/
  - sudo chown -R www-data:www-data html
  - sudo chmod 755 html
  - cd html

Lösche auch die Standard-HTML-Datei, die während der Apache2-Installation erstellt wurde. Standardmäßig ist der Apache2 so konfiguriert, dass er zuerst nach einer index.html-Datei sucht (vor index.php), d.h. auch wenn WordPress installiert ist, wird die Standard-HTML-Datei vom Apache2 angezeigt: 

 - sudo rm index.html 

Downloade den WordPress-Kern: 

 - sudo -u www-data wp core download 

Konfiguriere die MySQL-Datenbank mit den Anmeldedaten und dem DB-Namen wie zuvor festgelegt: 

- sudo -u www-data wp core config --dbname='wordpress' --dbuser='root' --dbpass="$pw" --dbhost='localhost' --dbprefix='wp_' 

Stelle sicher, dass WordPress auf das Verzeichnis „wp-content“ zugreifen kann (themes / plugins / file-uploads / …): 

- sudo chmod -R 755 /var/www/html/wp-content

Nun ist WordPress heruntergeladen und mit der MySQL-Datenbank verbunden. Um die Installation abzuschließen, müssen wir jedoch noch einen Admin-Benutzer anlegen und einige Angaben zur Website machen. 

Wenn du es vorziehst, diesen Schritt über eine visuelle Schnittstelle im Browser auszuführen, kannst du den nächsten Befehl überspringen. Sobald der Server bereit ist, öffnest du die IP-Adresse des Servers im Browser und das WordPress-Installationsprogramm wird für diesen letzten Schritt angezeigt. 

Um die Installation automatisch mit cloud-init abzuschließen, verwende diesen Befehl: 

- sudo -u www-data wp core install --url='http://your-wordpress-website.com' --title='Meine WordPress Website' --admin_user='admin' --admin_password='secure' --admin_email='[email protected]'

Stelle sicher, dass du die Platzhalter durch deine echten Informationen ersetzt. 

Ein letzter Befehl: WordPress selbst und viele Plugins verwenden .htaccess-Dateien, um Dinge zu tun wie 

benutzerdefinierte Permalinks, 

den Zugriff auf bestimmte Dateien und Ordner zu verhindern, 

Caching zu aktivieren, 

und vieles mehr. Um .htaccess-Dateien zuzulassen, erstelle eine neue Datei im Apache2-Konfigurationsordner, die „AllowOverride“ auf All (für das Verzeichnis /var/www/html) setzt, aktiviere das Rewrite-Modul und starte Apache2 neu: 

  - sudo echo -e "<Directory /var/www/html>\n    AllowOverride All\n</Directory>" >> /etc/apache2/sites-enabled/allow-htaccess.conf
  - sudo a2enmod rewrite
  - sudo service apache2 restart

Fertige Cloud-Init Config

Alle Schritte zusammengenommen, sieht die endgültige Cloud-Init-Konfigurationsdatei so aus:

#cloud-config
package_update: true
package_upgrade: true
packages:
  - software-properties-common
  - wget
  - curl
  - apache2
runcmd:
  - curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
  - sudo apt-get install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y
  - service apache2 restart
  - apt install mariadb-server mariadb-client -y
  - pw=$(openssl rand -base64 18); mysqladmin -u root -h localhost password "$pw"; echo "mysql_password=$pw" >> /home/mysql_access.txt
  - mysqladmin reload

  # Create database
  - sudo mysql -e "CREATE DATABASE wordpress;"

  # Install WordPress CLI
  - cd ~ 
  - sudo curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  - sudo chmod +x wp-cli.phar
  - sudo mv wp-cli.phar /usr/local/bin/wp

  # Set up WordPress
  - cd /var/www/
  - sudo chown -R www-data:www-data html
  - sudo chmod 755 html
  - cd html
  - sudo rm index.html
  - sudo -u www-data wp core download
  - sudo -u www-data wp core config --dbname='wordpress' --dbuser='root' --dbpass=”$pw” --dbhost='localhost' --dbprefix='wp_'
  - sudo chmod -R 755 /var/www/html/wp-content

  # Install WordPress
  - sudo -u www-data wp core install --url='http://your-wordpress-website.com' --title='My WordPress Website' --admin_user='admin' --admin_password='secure' --admin_email='[email protected]'

  # Allow .htaccess files
  - sudo echo -e "<Directory /var/www/html>\n    AllowOverride All\n</Directory>" >> /etc/apache2/sites-enabled/allow-htaccess.conf
  - sudo a2enmod rewrite
  - sudo service apache2 restart

(*) Laut der offiziellen WordPress-Website und W3Techs