Die perfekte ISPConfig Multi-Server Anleitung auf Ubuntu 16.04 mit Dediziertem Web-, Mail-, NS1-, NS2-, Datenbank-Server
Auf dieser Seite befindet sich die Einleitung mit ersten Schritten die Ihr auf allen Servern schon mal installieren / vorbereiten könnt. Die Anleitung ist nach bestem Wissen erstellt. Jedoch übernehme ich keinerlei Haftung. Die Digital Ocean Server habe ich alle selber aus eigener Tasche bezahlt. Alle erwähnten Marken-Name dienen hier nur der Veranschaulichung. Solltet Ihr einen der Digital Ocean Links in dieser Anleitung klicken, und da was bestellen, erhalte ich eine Gutschrift auf Basis deren Affiliate Programmes. Diese Anleitung kann auf Ubuntu 16.04 Servern anderer Anbieter genau so übernommen werden.
- Einleitung & Vorbereitung der ISPConfig Multi Server
- ISPConfig Web Server installieren
- ISPConfig NS1 DNS Server installieren
- ISPConfig NS2 DNS Server installieren
- ISPConfig MariaDB Datenbank Server installieren
- ISPConfig Mail Server installieren
Auf dieser Seite wird behandelt:
- Prologue / Einleitung
- Übersicht der Digital Ocean Server
- SSL für Roundcube & phpMyAdmin
- Internes Netzwerk zur Kommunikation untereinander
- Server Liste & Details
- Wer hat geholfen?
- Auf los geht es los!
Prologue / Einleitung
In dieser Anleitung will ich euch zeigen, wie Ihr mit ISPConfig ein Multi Server Cluster mit dedizierten Ubuntu 16.04 Servern für Web- und File- Server, Datenbank Server, Mail Server, primären (NS1) und sekundärem (NS2) DNS Servern installiert. Natürlich kann man alle Dienste auch direkt in einem einzigen Server unterbringen (bis auf NS2), jedoch hat ein Multi Server Setup den Vorteil, dass man Ressourcen sehr viel dynamischer anpassen kann. Sollte eine der Maschinen vor Überlastung fast kochen, so kann man bei Digital Ocean (und anderen VPS Anbietern auch) genau diesem Server etwas mehr Ram & CPU Power dazu schalten. Sollten etwas weniger Ressourcen benötigt werden, so kann man auch wieder etwas runter regulieren. Ganz dynamisch halt.
In dieser Anleitung werde ich fünf unterschiedliche Digital Ocean Server mit externen und internen (Private Networking) IP Adressen konfigurieren. Die Server sollen und werden dabei untereinander nur über die Internen IP Adressen kommunizieren. Die Kommunikation der Server untereinander erfolgt dabei nur intern im selben Netzwerk und vermeidet unnötige Kommunikation nach außen. Dies bedeutet ebenfalls einen enormen Performance Vorteil weil das interne Netzwerk in der Regel wesentlich höhere Bandbreiten bereit hält und die Latenzzeiten wesentlich geringer sind. Dienste wie phpMyAdmin, Roundcube, Mail Server (Postfix & Dovecot), Apache2 Web Server und PureFTPD Server bleiben weiterhin auch von außen erreichbar.
Hier einmal eine Übersicht der Server die Ich dazu erstellt habe. Bitte beachtet, dass die Auswahl der Server im Bezug auf RAM / CPU nicht geeignet ist um darauf Kunden zu hosten. Die Server, insbesondere der Mail Server, wird bei den ersten E-Mails ganz sicher schon in die Knie gehen. Aber für den Anfang, zum “spielen & probieren” reicht es aus.
Roundcube und phpMyAdmin werden, mit gültigem Let‘s Encrypt Zertifikat per https, auf dem Master Server ausgeliefert und agieren nur als Web-Clients, welche sich dann nur auf dem Datenbank Server, bzw. Mail Server anmelden und Daten abrufen, bzw. abspeichern. Damit Postfix und Dovecot ein gültiges SSL Zertifikat zur Transportverschlüsselung ausliefert, wird auf dem Mail Server ebenfalls Let‘s Encrypt installiert und konfiguriert.
Um einen Überblick über die Passwörter und IP Adressen zu behalten, habe ich mir Hilfsweise eine Tabelle erstellt, welche auch direkt verrät in welcher Reihenfolge die Server installiert werden. Bitte denkt daran, dass ich in dieser Anleitung meine eigene Domain und die von Digital Ocean erhaltenen IP Adressen verwenden werde. Ich denke nicht erwähnen zu müssen, dass Ihr die IP‘s und Domains & Subdomains an euren Bedarf anpassen solltet. IP EXT steht hierbei für die externe IP, IP INT ist die interne IP Adresse der Server. Pro Server werde zwei Passwörter benötigt. Eins für den Root login und eins für den MySQL Root user. Ich hoffe ich kann Zusammenhänge leichter erkennbar machen, indem ich in dieser Anleitung echte Daten, echte Domains und echte IP Adressen verwende.
## Master ## HOST: host.ispconfig-server.space IP EXT:165.227.152.75 IP INT: 10.135.53.63 Root:69XallowXFACTORSXhappenX35 DB Root:33XthingXHEALTHXcakeX42
## NS1 ## HOST: ns1.ispconfig-server.space IP EXT: 138.68.100.36 IP INT: 10.135.50.182 Root:41XcauseXALWAYSXlaborX33 DB Root:20XduringXPLAINSXwindowX52
## NS2 ## HOST: ns2.ispconfig-server.space IP EXT: 46.101.150.61 IP INT: 10.135.14.243 Root:96XenergyXEXERCISEXstrongX71 DB Root:92XkeptXQUITEXcontrolX01
## DB Server ## HOST: db.ispconfig-server.space IP EXT: 46.101.142.124 IP INT: 10.135.49.117 Root:46XlendXMAJORXfromX81 DB Root:90XbookXFORESTXpaidX86
## Mail Server ## HOST: mx.ispconfig-server.space IP EXT: 46.101.132.69 IP INT: 10.135.1.181 Root:50XmakeXBLOWXtrainX86 DB Root:15XfullXROOTXplayX71
Diese Anleitung umfasst neben der Installation der Server, auch die Konfiguration einzelner Dienste (Postfix, Fail2Ban, Apache,etc). Zudem wird Apache mit Mod Pagespeed, Header, Expires und so weiter ausgestattet, damit Webseiten direkt eine sehr gute Performance haben. Ihr solltet von beginn an, direkt alle 5 Server parat haben, um zu wissen welcher Server welche interne und externe IP Adresse hat. Die IP Adressen müssen auf jedem Server in die Hosts Datei eingetragen sein, damit Abfragen der Server selbst, nur über das Interne Netzwerk erfolgen. Ebenfalls solltet Ihr euch ein paar Tassen Kaffee bereit stellen damit ihr gut versorgt seit.
Diese Anleitung habe ich mit Hilfe der Anleitung für Debian Squeeze ( Multiserver Setup With Dedicated Web, Email, DNS & MySQL Database Servers On Debian Squeeze With ISPConfig 3 ) von Till Brehm erstellt, der auch einer der Haupt-Entwickler und Gründer von ISPConfig ist. Damit es zwischen drin nicht zu Verzögerungen kommt, würde ich empfehlen, die entsprechenden DNS A Eintrage in eurem DNS zu erstellen, sobald Ihr die externen IP Adressen habt.
Beginn und Vorbereitung.
(Die folgenden Schritte, könnt ihr so direkt auf allen fünf Servern ausführen.)
Sobald die Server erreichbar sind, könnt ihr, auf allen Boxen die IP Adressen und die Domains / Subdomains für die jeweiligen anderen Server in der Hosts Datei hinterlegen. Als kurzes Beispiel, auf dem Master Server werden nur die internen IP‘s von: ns1.ispconfig-server.space, ns2.ispconfig-server.space, db.ispconfig-server.space, mx.ispconfig-server.space eingetragen. Auf NS1 nur: host.ispconfig-server.space, ns2.ispconfig-server.space, db.ispconfig-server.space, mx.ispconfig-server.space, und so weiter und so fort. Die Hosts Datei öffne ich mit:
nano /etc/hosts
Bei allen Servern trage ich also folgendes in die Hosts Datei ein. Jedoch kommentiere ich den Eintrag des jeweiligen Servers aus, weil jeder Server an sich die IP 127.0.0.1 hat.
10.135.53.63 host.ispconfig-server.space 10.135.50.182 ns1.ispconfig-server.space 10.135.14.243 ns2.ispconfig-server.space 10.135.49.117 db.ispconfig-server.space 10.135.1.181 mx.ispconfig-server.space
Damit ISPConfig ordentlich arbeiten kann, muss die dash einmal nach bash umgestellt werden. Das machen wir mit:
dpkg-reconfigure dash
Use dash as the default system shell (/bin/sh)? <== No
Anschließend werde ich die Locales mithilfe von:
dpkg-reconfigure locales
rekonfigurieren, diese Fehlermeldung zu beseitigen.
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_PAPER = "de_DE.UTF-8", LC_ADDRESS = "de_DE.UTF-8", LC_MONETARY = "de_DE.UTF-8", LC_NUMERIC = "de_DE.UTF-8", LC_TELEPHONE = "de_DE.UTF-8", LC_IDENTIFICATION = "de_DE.UTF-8", LC_MEASUREMENT = "de_DE.UTF-8", LC_TIME = "de_DE.UTF-8", LC_NAME = "de_DE.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US.UTF-8"). locale: Cannot set LC_ALL to default locale: No such file or directory /usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory
Die Abfragen beantworte ich folgendermaßen:
Locales to be generated: <== All locales Default locale for the system enviroment: <== en_US.UTF-8
Das dauert einen Moment. Zeit für Kaffee.
Anschließend installiere ich die letzten Updates mit:
apt update && apt upgrade -y
Damit der Server selber weiß in welcher Zeitzone er sich befindet, konfiguriere ich diese einmal neu mit:
dpkg-reconfigure tzdata
Geographic area: <== Europe Time zone: <== Berlin
In Digital Ocean habe ich als Datacenter „Frankfurt“ für alle Server ausgewählt, damit befinden sich die Server in der deutschen Zeitzone; Berlin. Damit die Uhrzeit immer synchron gehalten, und weil auf allen Servern Fail2Ban und die Ubuntu Firewall UFW gebraucht wird, installieren wir auf allen Servern einmal:
apt install ntp ntpdate fail2ban ufw -y
ISPConfig kann nicht so sehr gut mit AppArmor und deshalb stelle ich es wie folgt ab:
service apparmor stop update-rc.d -f apparmor remove apt remove apparmor apparmor-utils
Dann starte ich alle Maschinen einmal neu um ggf. die letzten Kernel Updates zu aktivieren.
reboot
Nach dem die Server wieder erreichbar sind, entferne ich unnötige Pakete mit:
apt autoremove -y
Auf allen Servern werde ich MariaDB als client und als Server benötigen. Deswegen installiere ich MariaDB schonmal auf allen Maschinen mit:
apt install mariadb-client mariadb-server
Um sicher zu stellen, dass ein Zugriff von Außen möglich ist, kommentiere ich „bind-address = 127.0.0.1“ in der MariaDB Konfiguration auf allen Maschinen aus.
nano /etc/mysql/mariadb.conf.d/50-server.cnf
[…] # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. # bind-address = 127.0.0.1 […]
Um MariaDB zu konfigurieren, führe ich ein:
mysql_secure_installation
aus, und mache folgende Angaben:
Enter current password for root (enter for none): <== Enter Set root password? [Y/n] <== Enter New password: <== Passwort für den DB Root des jeweiligen Servers eintragen Re-enter new password: <== Passwort für den DB Root des jeweiligen Servers wiederholen Remove anonymous users? [Y/n] <== Enter Disallow root login remotely? [Y/n] <== Enter Remove test database and access to it? <== Enter Reload privilege tables now? [Y/n] <== Enter
Und starte MySQL einmal neu mit:
service mysql stop && service mysql start
Damit ist die Vorbereitung der Server abgeschlossen. Holt euch jetzt eine Tasse Kaffee. Weiter geht es mit dem ISPConfig Web Server installieren