Einführung
Mit dem Wachstum Ihrer Anwendung oder Website kann es vorkommen, dass Ihre aktuelle Serverkonfiguration nicht mehr ausreicht. Wenn Sie Webserver und Datenbank auf demselben Rechner betreiben, empfiehlt es sich, die beiden Funktionen zu trennen, sodass jede auf eigener Hardware läuft und die Last der Besucheranfragen verteilt wird.
In dieser Anleitung erfahren Sie, wie Sie einen entfernten MySQL-Datenbankserver konfigurieren, mit dem Ihre Webanwendung eine Verbindung herstellen kann. Wir verwenden WordPress als Beispiel, um die Vorgehensweise zu verdeutlichen. Die beschriebene Technik ist jedoch allgemein auf jede von MySQL unterstützte Anwendung anwendbar.
Voraussetzungen
- Zwei Ubuntu 18.04-Server. Wie im Tutorial „Ersteinrichtung eines Servers mit Ubuntu 18.04“ beschrieben, benötigt jeder Server einen Benutzer mit sudo-Rechten (kein Root-Benutzer) und aktivierter UFW-Firewall. Auf einem dieser Server wird Ihr MySQL-Backend gehostet; wir bezeichnen ihn in dieser Anleitung als Datenbankserver. Der andere Server verbindet sich remote mit Ihrem Datenbankserver und fungiert als Webserver. Auch er wird in dieser Anleitung als Webserver bezeichnet.
- Nginx und PHP sind auf Ihrem Webserver installiert. Unsere Anleitung zur Installation von Linux, Nginx, MySQL und PHP (LEMP-Stack) unter Ubuntu 18.04 führt Sie durch den Prozess. Beachten Sie jedoch, dass Sie Schritt 2 dieser Anleitung, der die Installation von MySQL behandelt, überspringen sollten, da Sie MySQL auf Ihrem Datenbankserver installieren werden.
- MySQL ist auf Ihrem Datenbankserver installiert. Folgen Sie unserer Anleitung zur Installation von MySQL unter Ubuntu 18.04, um es einzurichten.
- Optional (aber dringend empfohlen) können Sie TLS/SSL-Zertifikate von Let's Encrypt auf Ihrem Webserver installieren. Sie benötigen dazu eine Domain und müssen DNS-Einträge für Ihren Server einrichten. Die Zertifikate selbst sind kostenlos. In unserer Anleitung „Nginx unter Ubuntu 18.04 mit Let's Encrypt absichern“ erfahren Sie, wie Sie diese Zertifikate erhalten.
Schritt 1 – MySQL so konfigurieren, dass es auf Remote-Verbindungen wartet
Sobald Sie die Leistungsgrenze einer Einzelrechnerkonfiguration erreicht haben, ist die Speicherung Ihrer Daten auf einem separaten Server eine gute Möglichkeit, die Kapazität schrittweise zu skalieren. Dies bietet zudem die notwendige Grundstruktur für späteren Lastausgleich und die Skalierung Ihrer Infrastruktur. Nach der Installation von MySQL gemäß der Anleitung müssen Sie einige Konfigurationswerte anpassen, um Verbindungen von anderen Computern zu ermöglichen.
Die meisten Änderungen an der MySQL-Serverkonfiguration können in der Datei mysqld.cnf vorgenommen werden, die standardmäßig im Verzeichnis /etc/mysql/mysql.conf.d/ gespeichert ist. Öffnen Sie diese Datei auf Ihrem Datenbankserver mit Root-Rechten in Ihrem bevorzugten Editor. Wir verwenden hier nano.
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfDiese Datei ist in Abschnitte unterteilt, die mit Bezeichnungen in eckigen Klammern ([ und ]) gekennzeichnet sind. Suchen Sie den Abschnitt mit dem Titel mysqld:
. . .
[mysqld]
. . .
Suchen Sie in diesem Abschnitt nach dem Parameter „Bind-Adresse“. Dieser Parameter teilt der Datenbanksoftware mit, an welcher Netzwerkadresse sie auf Verbindungen warten soll.
Standardmäßig ist hier 127.0.0.1 eingestellt, was bedeutet, dass MySQL so konfiguriert ist, dass es nur lokale Verbindungen annimmt. Sie müssen dies ändern, sodass es auf eine externe IP-Adresse verweist, unter der Ihr Server erreichbar ist.
Befinden sich beide Server in einem Rechenzentrum mit privatem Netzwerk, verwenden Sie die private Netzwerk-IP-Adresse Ihres Datenbankservers. Andernfalls können Sie dessen öffentliche IP-Adresse verwenden.
[mysqld]
. . .
bind-address = db_server_ipDa Sie über das Internet auf Ihre Datenbank zugreifen, empfiehlt es sich, verschlüsselte Verbindungen zu verwenden, um Ihre Daten zu schützen. Wenn Sie Ihre MySQL-Verbindung nicht verschlüsseln, kann jeder im Netzwerk sensible Informationen zwischen Ihren Web- und Datenbankservern abfangen. Um MySQL-Verbindungen zu verschlüsseln, fügen Sie die folgende Zeile nach der aktualisierten Zeile mit der Bind-Adresse hinzu:
[mysqld]
. . .
require_secure_transport = on
. . .Wenn Sie fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, drücken Sie dazu STRG+X, Y und anschließend die Eingabetaste.
Damit SSL-Verbindungen funktionieren, müssen Sie Schlüssel und Zertifikate erstellen. MySQL bietet einen Befehl, der diese automatisch einrichtet. Führen Sie den folgenden Befehl aus, um die erforderlichen Dateien zu erstellen. Außerdem werden diese vom MySQL-Server lesbar gemacht, indem die Benutzer-ID (UID) des MySQL-Benutzers angegeben wird:
sudo mysql_ssl_rsa_setup --uid=mysqlUm MySQL zur Aktualisierung der Konfiguration und zum Einlesen der neuen SSL-Informationen zu zwingen, starten Sie die Datenbank neu:
sudo systemctl restart mysqlUm zu überprüfen, ob der Server nun auf der externen Schnittstelle lauscht, führen Sie folgenden netstat-Befehl aus:
sudo netstat -plunt | grep mysqldOutput
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqldnetstat gibt Statistiken über das Netzwerk Ihres Servers aus. Diese Ausgabe zeigt, dass ein Prozess namens mysqld mit db_server_ip auf Port 3306, dem Standardport von MySQL, verbunden ist und bestätigt, dass der Server auf der entsprechenden Schnittstelle lauscht.
Öffnen Sie als Nächstes diesen Port in der Firewall, um den Datenverkehr zu ermöglichen:
sudo ufw allow mysqlDies sind alle Konfigurationsänderungen, die Sie in MySQL vornehmen müssen. Als Nächstes sehen wir uns an, wie Sie die Datenbank und einige Benutzerprofile einrichten, von denen eines für den Fernzugriff auf den Server benötigt wird.
Schritt 2 – WordPress-Datenbank und Remote-Zugangsdaten einrichten
Obwohl MySQL aktuell auf einer externen IP-Adresse lauscht, sind derzeit keine Benutzer oder Datenbanken mit Fernzugriff konfiguriert. Erstellen wir nun eine Datenbank für WordPress und einige Benutzer, die darauf zugreifen können.
Stellen Sie zunächst eine Verbindung zu MySQL als MySQL-Root-Benutzer her:
sudo mysqlErstellen Sie an der MySQL-Eingabeaufforderung eine Datenbank, die WordPress verwenden soll. Es kann hilfreich sein, dieser Datenbank einen aussagekräftigen Namen zu geben, damit Sie sie später leicht wiederfinden. Hier nennen wir sie WordPress:
Nachdem Sie Ihre Datenbank erstellt haben, besteht der nächste Schritt darin, zwei Benutzer anzulegen. Wir erstellen einen lokalen Benutzer sowie einen Remote-Benutzer, der mit der IP-Adresse des Webservers verknüpft ist.
Erstellen Sie zunächst Ihren lokalen Benutzer, wpuser, und ordnen Sie dieses Konto ausschließlich lokalen Verbindungsversuchen zu, indem Sie localhost in der Deklaration verwenden:
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';Gewähren Sie diesem Konto anschließend vollen Zugriff auf die WordPress-Datenbank:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';Dieser Benutzer kann nun alle Datenbankoperationen für WordPress durchführen, jedoch nicht remote, da er nur Verbindungen vom lokalen Rechner zulässt. Erstellen Sie daher ein separates Konto, das ausschließlich Verbindungen von Ihrem Webserver zulässt. Hierfür benötigen Sie die IP-Adresse Ihres Webservers.
Bitte beachten Sie, dass Sie eine IP-Adresse verwenden müssen, die sich im selben Netzwerk befindet wie die in der Datei mysqld.cnf konfigurierte. Wenn Sie also in der Datei mysqld.cnf eine private Netzwerk-IP-Adresse angegeben haben, müssen Sie in den beiden folgenden Befehlen die private IP-Adresse Ihres Webservers eingeben. Wenn Sie MySQL für die Nutzung des öffentlichen Internets konfiguriert haben, müssen Sie die öffentliche IP-Adresse des Webservers verwenden.
CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';Nachdem Sie Ihr Remote-Konto erstellt haben, weisen Sie ihm die gleichen Berechtigungen wie Ihrem lokalen Benutzer zu:
GRANT ALL PRIVILEGES ON wordpress.* TO 'remotewpuser'@'web_server_ip';Zum Schluss müssen die Berechtigungen gelöscht werden, damit MySQL sie verwenden kann:
FLUSH PRIVILEGES;Beenden Sie anschließend den MySQL-Befehl durch Eingabe von:
exitNachdem Sie nun eine neue Datenbank und einen aktiven Remote-Benutzer eingerichtet haben, können Sie testen, ob Sie von Ihrem Webserver aus eine Verbindung zur Datenbank herstellen können.
Schritt 3 – Testen der Remote- und lokalen Verbindungen
Bevor Sie fortfahren, sollten Sie überprüfen, ob Sie sowohl von Ihrem lokalen Rechner – Ihrem Datenbankserver – als auch von Ihrem Webserver aus eine Verbindung zu Ihrer Datenbank herstellen können.
Testen Sie zunächst die lokale Verbindung von Ihrem Datenbankserver, indem Sie versuchen, sich in Ihr neues Konto einzuloggen:
mysql -u wpuser -pGeben Sie bei Aufforderung das Passwort ein, das Sie für dieses Konto festgelegt haben.
Wenn Sie zur Anmeldung bei MySQL aufgefordert werden, war die lokale Verbindung erfolgreich. Sie können das Programm beenden, indem Sie Folgendes eingeben:
exitMelden Sie sich anschließend bei Ihrem Webserver an, um Remote-Verbindungen zu testen:
ssh sammy@web_server_ipUm auf die Remote-Datenbank zuzugreifen, müssen Sie einige MySQL-Client-Tools auf Ihrem Webserver installieren. Aktualisieren Sie zunächst Ihren lokalen Paketcache, falls Sie dies nicht kürzlich getan haben:
sudo apt updateInstallieren Sie anschließend die MySQL-Client-Tools:
sudo apt install mysql-clientStellen Sie anschließend mit folgendem Befehl eine Verbindung zu Ihrem Datenbankserver her:
mysql -u remotewpuser -h db_server_ip -pSie müssen erneut sicherstellen, dass Sie die korrekte IP-Adresse Ihres Datenbankservers verwenden. Wenn Sie MySQL so konfiguriert haben, dass es in einem privaten Netzwerk lauscht, geben Sie die private Netzwerk-IP-Adresse Ihrer Datenbank ein. Andernfalls geben Sie die öffentliche IP-Adresse Ihres Datenbankservers ein.
Sie werden nach dem Passwort für das Remotewpuser-Konto gefragt. Nach der Eingabe und sofern alles wie erwartet funktioniert, wird die MySQL-Eingabeaufforderung angezeigt. Überprüfen Sie mit folgendem Befehl, ob die Verbindung SSL verwendet:
statusWenn die Verbindung tatsächlich SSL verwendet, wird dies in der Zeile „SSL:“ angezeigt, wie hier dargestellt:
Output
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
Connection id: 52
Current database:
Current user: [email protected]
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: 203.0.113.111 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 3 hours 43 min 40 sec
Threads: 1 Questions: 1858 Slow queries: 0 Opens: 276 Flush tables: 1 Open tables: 184 Queries per second avg: 0.138
--------------Nachdem Sie sich vergewissert haben, dass Sie eine Remote-Verbindung herstellen können, beenden Sie den Befehl:
exitDamit haben Sie den lokalen Zugriff und den Zugriff vom Webserver aus überprüft, aber noch nicht, ob andere Verbindungen blockiert werden. Um dies weiter zu bestätigen, führen Sie die gleichen Tests von einem dritten Server aus durch, für den Sie kein Benutzerkonto konfiguriert haben, um sicherzustellen, dass diesem Server kein Zugriff gewährt wird.
Beachten Sie, dass Sie die MySQL-Clientanwendungen möglicherweise wie oben beschrieben installieren müssen, bevor Sie den folgenden Befehl ausführen, um eine Verbindung herzustellen:
mysql -u wordpressuser -h db_server_ip -pDieser Vorgang sollte nicht erfolgreich abgeschlossen werden und eine Fehlermeldung ähnlich der folgenden zurückgeben:
Output
ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL serverDies ist zu erwarten, da Sie keinen MySQL-Benutzer erstellt haben, der von diesem Server aus eine Verbindung herstellen darf, und es ist auch erwünscht, da Sie sicherstellen möchten, dass Ihr Datenbankserver den Zugriff unbefugter Benutzer auf Ihren MySQL-Server verhindert.
Nach erfolgreichem Test Ihrer Remote-Verbindung können Sie mit der Installation von WordPress auf Ihrem Webserver fortfahren.
Schritt 4 – WordPress installieren
Um Ihnen die Möglichkeiten Ihres neuen MySQL-Servers mit Fernsteuerung zu demonstrieren, führen wir Sie durch die Installation und Konfiguration von WordPress – dem beliebten Content-Management-System – auf Ihrem Webserver. Dazu müssen Sie die Software herunterladen und entpacken, Ihre Verbindungsinformationen konfigurieren und sie anschließend über den webbasierten WordPress-Installer ausführen.
Laden Sie auf Ihrem Webserver die neueste Version von WordPress in Ihr Stammverzeichnis herunter:
cd ~
curl -O https://wordpress.org/latest.tar.gzExtrahieren Sie die Dateien. Dadurch wird im Stammverzeichnis ein Verzeichnis namens „wordpress“ erstellt:
tar xzvf latest.tar.gz
WordPress enthält eine Beispielkonfigurationsdatei, die wir als Ausgangspunkt verwenden werden. Erstellen Sie eine Kopie dieser Datei und entfernen Sie das "-" aus dem Dateinamen, damit sie von WordPress geladen wird:
cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.phpSobald Sie die Datei geöffnet haben, müssen Sie als Erstes geheime Schlüssel einrichten, um Ihre Installation sicherer zu machen. WordPress bietet einen sicheren Generator für diese Werte, sodass Sie sich nicht selbst welche ausdenken müssen. Diese werden nur intern verwendet, daher beeinträchtigen komplexe und sichere Werte die Benutzerfreundlichkeit nicht.
Um sichere Werte vom WordPress-Geheimschlüsselgenerator zu erhalten, geben Sie Folgendes ein:
curl -s https://api.wordpress.org/secret-key/1.1/salt/Dadurch werden in Ihrer Ausgabe mehrere Schlüssel angezeigt. Diese fügen Sie dann sofort Ihrer wp-config.php-Datei hinzu:
Output
define('AUTH_KEY', 'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY', 'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY', '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY', 'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT', '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT', '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT', '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');Kopieren Sie die empfangene Ausgabe in Ihre Zwischenablage und öffnen Sie anschließend die Konfigurationsdatei in Ihrem Texteditor:
nano ~/wordpress/wp-config.phpSuchen Sie den Abschnitt, der die Platzhalterwerte für diese Einstellungen enthält. Er sieht etwa so aus:
. . .
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
. . .Löschen Sie diese Zeilen und fügen Sie die Werte ein, die Sie aus der Befehlszeile kopiert haben.
Geben Sie als Nächstes die Verbindungsinformationen für Ihre Remote-Datenbank ein. Diese Konfigurationszeilen befinden sich am Anfang der Datei, direkt über der Stelle, an der Sie Ihre Schlüssel eingefügt haben. Verwenden Sie dabei dieselbe IP-Adresse, die Sie zuvor beim Test Ihrer Remote-Datenbank verwendet haben.
. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'remotewpuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .Fügen Sie abschließend an beliebiger Stelle in der Datei die folgende Zeile hinzu, die WordPress anweist, eine SSL-Verbindung zu unserer MySQL-Datenbank zu verwenden:
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Datei speichern und schließen.
Kopieren Sie anschließend die Dateien und Verzeichnisse aus Ihrem ~/wordpress-Verzeichnis in das Nginx-Dokumentenverzeichnis. Beachten Sie, dass dieser Befehl die Option -a enthält, um sicherzustellen, dass alle bestehenden Berechtigungen übertragen werden:
sudo cp -a ~/wordpress/* /var/www/html
Anschließend müssen Sie nur noch die Dateibesitzrechte ändern. Ändern Sie die Besitzrechte aller Dateien im Dokumentenstammverzeichnis auf www-data, den Standardbenutzer des Ubuntu-Webservers:
sudo chown -R www-data:www-data /var/www/htmlDamit ist WordPress installiert und Sie können es nun mithilfe der webbasierten Einrichtungsprozedur ausführen.
Schritt 5 – WordPress über die Weboberfläche einrichten
WordPress bietet einen webbasierten Einrichtungsprozess. Dabei werden Ihnen einige Fragen gestellt und alle benötigten Tabellen in Ihrer Datenbank installiert. Hier erklären wir Ihnen die grundlegenden Schritte der WordPress-Einrichtung. Diese können Sie als Ausgangspunkt für die Erstellung Ihrer eigenen Website mit einer externen Datenbank nutzen.
Rufen Sie die Domain (oder die öffentliche IP-Adresse) auf, die mit Ihrem Webserver verknüpft ist:
http://example.comSie sehen nun eine Seite zur Sprachauswahl für das WordPress-Installationsprogramm. Wählen Sie die gewünschte Sprache aus und klicken Sie auf die Hauptinstallationsseite:
Nachdem Sie Ihre Informationen übermittelt haben, müssen Sie sich mit Ihrem erstellten Konto in die WordPress-Administrationsoberfläche einloggen. Anschließend gelangen Sie zu einem Dashboard, auf dem Sie Ihre neue WordPress-Website anpassen können.
Ergebnis
Mit dieser Anleitung haben Sie eine MySQL-Datenbank eingerichtet, die SSL-gesicherte Verbindungen von einer entfernten WordPress-Installation akzeptiert. Die hier beschriebenen Befehle und Techniken sind auf jede Webanwendung in jeder Programmiersprache anwendbar, die genauen Implementierungsdetails können jedoch variieren. Weitere Informationen finden Sie in der Datenbankdokumentation Ihrer Anwendung oder Programmiersprache.










