WordPress mit Let’s Encrypt SSL Zertifikat unter Ubuntu Linux 16.04 mit nginx und MariaDB oder MySQL installieren

WordPress ist ein Content Management System (CMS), welches es erlaubt relativ einfach den Inhalt einer statischen Webseite oder eines Blogs zu pflegen. Es basiert auf PHP und benötigt einen Webserver sowie eine Datenbank zur Ausführung. Ich beschreibe in diesem Beitrag wie WordPress unter Ubuntu Linux 16.04 mit nginx als Webserver, SSL Zertifikate von Let’s Encrypt sowie MariaDB bzw. MySQL als Datenbank installiert werden kann. Wie diese Dinge Konfiguriert werden können habe ich bereits in folgenden Beiträgen beschrieben

Vorbereitung

Nginx / Let’s Encrypt

Zuerst sollte wie in den oben verlinkten Beiträgen eine nginx Konfigurationsdatei erstellt sowie ein Let’s Encrypt SSL Zertifikat beantragt werden.

Falls für das Beantragen der SSL Zertifikate ein dummy-Verzeichnis verwendet wurde muss zuerst ein Verzeichnis für die WordPress Dateien angelegt werden.

$ sudo mkdir -p /var/www/com.example.blog

Damit es später möglich ist WordPress über die Webseite zu aktualisieren sollten die Rechte an diesem Ordner dem Benutzer und der Gruppe www-data zugewiesen werden.

$ sudo chown www-data:www-data /var/www/com.example.blog

Danach muss die nginx Konfiguration unter /etc/nginx/sites/available/com.example.blog durch nachfolgende ersetzt werden – natürlich mit den eigenen Angaben für IP-Adressen, Domains, Pfade etc.

server  {
        listen          80;
        listen          [xxx:xxx:xxx::42]:80;

        server_name     blog.example.com;
        return          301 https://$server_name$request_uri;
}

server  {
        listen          443 ssl;
        listen          [xxx:xxx:xxx::42]:443 ssl;

        server_name     blog.example.com;

        ssl_certificate         /etc/letsencrypt/live/blog.example.com/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/blog.example.com/privkey.pem;
        add_header              Strict-Transport-Security "max-age=63072000; includeSubdomains;";

        root    /var/www/com.example.blog;

        index   index.php;

        location = /robots.txt {
                try_files $uri $uri/ /index.php?$args;
        }

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$args;
        }

        # pass the PHP scripts to FastCGI server
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        # snippet for updating letsencrypt certificates
        include snippets/certbot-webroot.conf;
}

Nun muss die Konfiguration ggf. noch aktiviert werden.

$ sudo ln -s /etc/nginx/sites-available/com.example /etc/nginx/sites-enabled/

Bevor die neue Konfiguration geladen wird sollte geprüft werden, dass sie Fehlerfrei ist.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Anschließend kann sie geladen werden.

$ sudo /etc/init.d/nginx reload
[ ok ] Reloading nginx configuration (via systemctl): nginx.service.

WordPress

Damit ist nginx fertig konfiguriert und die WordPress Dateien können heruntergeladen, entpackt und ihre Rechte gesetzt werden. Falls die englische Version von WordPress installiert werden soll muss die Datei https://wordpress.org/latest.zip heruntergeladen werden.

$ cd /var/www/com.example.blog
$ sudo wget https://de.wordpress.org/latest-de_DE.zip
--2017-05-29 20:33:32-- https://de.wordpress.org/latest-de_DE.zip
Resolving de.wordpress.org (de.wordpress.org)... 66.155.40.249, 66.155.40.250
Connecting to de.wordpress.org (de.wordpress.org)|66.155.40.249|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9251402 (8.8M) [application/zip]
Saving to: ‘latest-de_DE.zip’

latest-de_DE.zip 100%[=================================================>] 8.82M 4.08MB/s in 2.2s

2017-05-29 20:33:35 (4.08 MB/s) - ‘latest-de_DE.zip’ saved [9251402/9251402]
$ sudo unzip latest-de_DE.zip
$ sudo rm latest-de_DE.zip
$ sudo mv wordpress/* ./
$ sudo rm -r wordpress
$ sudo chown -R www-data:www-data *

MariaDB / MySQL

Bevor die Installation gestartet wird muss noch eine Datenbank für WordPress angelegt werden. Wie eine Datenbank mit zugehörigem Benutzer angelegt werden kann habe ich im Beitrag MySQL oder MariaDB Datenbank über das Terminal erstellen beschrieben.

Installation

Nun, da nginx, Let’s Encrypt und MariaDB bzw. MySQL konfiguriert wurde kann die Installation gestartet werden. Dazu muss einfach die in nginx konfigurierte Domain aufgerufen werden, hier im Beispiel also https://blog.example.com. Auf der nun angezeigten Webseite kann einfach auf „Los geht’s!“ geklickt werden.

Schritt 1 der WordPress Installation
Schritt 1 der WordPress Installation

Im zweiten Schritt müssen die Verbindungsinformationen zur Datenbank eingegeben werden. Anschließend können diese mit einem Klick auf „Senden“ gespeichert werden.

Schritt 2 der WordPress Installation
Schritt 2 der WordPress Installation

Der dritte Schritt erlaubt es mit einem Klick auf „Installation ausführen“ die eigentliche Installation von WordPress zu starten.

Schritt 3 der WordPress Installation
Schritt 3 der WordPress Installation

Im vierten Schritt werden Angaben wie der Titel der Webseite sowie Benutzername und Passwort verlangt. Nachdem dies ausgefüllt wurde kann einfach auf „WordPress Installieren“ geklickt werden.

Schritt 4 der WordPress Installation
Schritt 4 der WordPress Installation

Der fünfte Schritt besteht lediglich aus einer Bestätigung, dass WordPress erfolgreich installiert wurde. Mit einem Klick auf „Anmelden“ wird der Browser auf die Anmeldeseite von WordPress weitergeleitet.

Schritt 5 der WordPress Installation
Schritt 5 der WordPress Installation

WordPress wurde damit erfolgreich installiert und kann genutzt werden.

WordPress Anmeldung
WordPress Anmeldung

MySQL oder MariaDB Datenbank über das Terminal löschen

Falls man eine bestehende MySQL oder MariaDB Datenbank mit einem zugehörigen User löschen möchte und kein Grafisches Administraiontstool wie phpMyAdmin zur Verfügung steht kann dies auch ganz einfach über das Terminal erledigt werden.

Zuerst muss man sich ins Datenbanksystem einloggen. Dabei authentifiziert man sich über das Passwort des Datebankbenutzers root.

$ mysql -p
> Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 51
Server version: 10.0.29-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Zuerst lassen wir uns alle Benutzer anzeigen.

> MariaDB [(none)]> SELECT User,Host FROM mysql.user;
+--------------+-----------+
| User         | Host      |
+--------------+-----------+
| myseconduser | localhost |
| myuser       | localhost |
| root         | localhost |
+--------------+-----------+
3 rows in set (0.00 sec)

Wir möchten den Benutzer myuser löschen, da er zur Datenbank gehört die wir löschen möchten.

> MariaDB [(none)]> DROP USER 'myuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Nun überprüfen wir, ob der Benutzer wirklich gelöscht wurde indem wir uns nochmals alle Benutzer anzeigen lassen.

> MariaDB [(none)]> SELECT User,Host FROM mysql.user;
+--------------+-----------+
| User         | Host      |
+--------------+-----------+
| myseconduser | localhost |
| root         | localhost |
+--------------+-----------+
2 rows in set (0.00 sec)

Der Benutzer wird nicht mehr gelistet und ist daher erfolgreich gelöscht worden.

Nun lassen wir uns alle Datenbanken ausgeben.

> MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydatabase         |
| myseconddatabase   |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

Wir möchten die Datenbank mydatabase löschen.

> MariaDB [(none)]> DROP DATABASE mydatabase;
Query OK, 0 rows affected (0.00 sec)

Nun überprüfen wir, ob die Datenbank wirklich gelöscht wurde.

> MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myseconddatabase   |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

Da die Datenbank nicht mehr gelistet wird wurde sie erfolgreich gelöscht.

Abschließend kann die Konsole des Datenbanksystems verlassen werden.

> MariaDB [(none)]> quit
Bye

MySQL oder MariaDB Datenbank über das Terminal erstellen

Falls man eine neue MySQL oder MariaDB Datenbank mit einem zugehörigen User erstellen möchte und kein Grafisches Administraiontstool wie phpMyAdmin zur Verfügung steht kann dies auch ganz einfach über das Terminal erledigt werden.

Zuerst muss man sich ins Datenbanksystem einloggen. Dabei authentifiziert man sich über das Passwort des Datebankbenutzers root.

$ sudo mysql -p
> Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 51
Server version: 10.0.29-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Jetzt kann dir neue Datenbank (mydatabase) erstellt werden

> MariaDB [(none)]> create database mydatabase;
Query OK, 1 row affected (0.00 sec)

Jetzt lassen wir uns alle Datenbanken ausgeben – Hier sollte die gerade erstellte bereits auftauchen.

> MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydatabase         |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

Als nächstes muss ein dazugehöriger Benutzer (myuser) angelegt und ihm die Rechte an der Datenbank gegeben werden. Als Passwort sollte auch hier ein sicheres gewählt werden. Ich erstelle immer für jede Datenbank einen neuen Benutzer mit einem individuellen Passwort. So können die Auswirkungen begrenzt werden, falls jemand drittes Zugriff auf einen Benutzer mit Passwort bekommt.

> MariaDB [(none)]> grant all privileges on mydatabase.* to 'myuser'@'localhost' identified by "mySecurePassword";
Query OK, 0 rows affected (0.00 sec)

Auch hier sollte der Benutzer bereits angezeigt werden, wenn wir uns alle Benutzer ausgeben lassen.

> MariaDB [(none)]> SELECT User,Host FROM mysql.user;
+--------+-----------+
| User   | Host      |
+--------+-----------+
| myuser | localhost |
| root   | localhost |
+--------+-----------+
2 rows in set (0.00 sec)

Nun müssen noch die Rechte geschrieben werden.

> MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

Abschließend kann die Konsole des Datenbanksystems verlassen werden.

> MariaDB [(none)]> quit
Bye

Jetzt kann mit dem neu erstellten Benutzer auf die angelegte Datenbank zugegriffen werden.

MySQL oder MariaDB unter Ubuntu Linux 16.04 installieren und konfigurieren

Ich verwende aktuell MariaDB als Datenbanksystem, was aus einem Fork von MySQL entstanden und weiterhin dazu kompatible ist. Es besitzt aber einige zusätzlichen Features. Ich möchte hier nichts über die Vor- und Nachteile zu PostgreSQL oder MySQL schreiben. Jede dieser Datenbanksysteme hat seine Daseinsberechtigung und jeder muss selbst entscheiden welches er einsetzt und ich habe mich aktuell für MariaDB entschieden. Die folgende Anleitung beschreibt wie MariaDB installiert und konfiguriert werden kann. Die Anleitung sollte auch 1:1 mit MySQL funktionieren.

Weiterlesen