Building for Production: Webanwendungen - Übersicht

Einführung

In diesem sechsteiligen Lernprogramm erfahren Sie, wie Sie eine Produktionsanwendung mit mehreren Servern von Grund auf neu einrichten. Das endgültige Setup wird von Sicherungs-, Überwachungs- und zentralen Protokollierungssystemen unterstützt, die Ihnen dabei helfen, Probleme zu erkennen und zu beheben. Das ultimative Ziel dieser Serie ist es, auf eigenständigen Systemverwaltungskonzepten aufzubauen und Sie mit einigen praktischen Überlegungen zum Erstellen einer Produktionsserverkonfiguration vertraut zu machen.

Wenn Sie sich einige der Konzepte ansehen möchten, die in dieser Reihe behandelt werden, lesen Sie diese Tutorials:

Während die verlinkten Artikel allgemeine Richtlinien für die Einrichtung einer Produktionsanwendung enthalten, wird in dieser Reihe gezeigt, wie eine Beispielanwendung von Anfang bis Ende geplant und eingerichtet wird. Dies hilft Ihnen hoffentlich dabei, Ihre eigene Produktionsserverumgebung zu planen und zu implementieren, selbst wenn Sie eine andere Anwendung auf einem völlig anderen Technologie-Stack ausführen. Da dieses Lernprogramm viele verschiedene Systemadministrationsthemen abdeckt, wird die ausführliche Erläuterung häufig auf externe unterstützende Artikel verschoben, die zusätzliche Informationen enthalten.

Unser Ziel

Am Ende dieser Tutorials werden wir ein Produktionsserver-Setup für eine PHP-Anwendung, WordPress, zu Demonstrationszwecken haben, auf das über https://www.example.com/ zugegriffen werden kann. Wir werden auch Server einbeziehen, die die Produktionsanwendungsserver unterstützen. Das endgültige Setup sieht ungefähr so ​​aus (private DNS- und Remote-Backups sind nicht abgebildet):

In diesem Setup werden die Server im Feld * Anwendung * als wesentlich für die ordnungsgemäße Ausführung der Anwendung angesehen. Neben dem Wiederherstellungsplan und dem Remote-Sicherungsserver werden die übrigen Komponenten (Sicherung, Überwachung und Protokollierung) hinzugefügt, um die Einrichtung der Produktionsanwendung zu unterstützen. Jede Komponente wird auf einem separaten Ubuntu 14.04-Server in derselben DigitalOcean-Region, in unserem Beispiel NYC3, installiert, wobei Private Networking aktiviert ist.

Die Servergruppe, aus der die Anwendung besteht, wird als die folgenden Hostnamen bezeichnet:

  • * lb1: * HAProxy Load Balancer, erreichbar über https://example.com/

  • * app1: * Apache- und PHP-Anwendungsserver

  • * app2: * Apache- und PHP-Anwendungsserver

  • * db1: * MySQL-Datenbankserver

Es ist wichtig zu beachten, dass dieses Setup ausgewählt wurde, um zu demonstrieren, wie Komponenten einer Anwendung auf mehreren Servern erstellt werden können. Ihr eigenes Setup sollte auf Ihre eigenen Bedürfnisse zugeschnitten sein. Diese spezielle Serverkonfiguration weist einzelne Fehlerquellen auf, die durch Hinzufügen eines weiteren Lastenausgleichs (und https://www.digitalocean.com/community/tutorials/how-to-configure-dns-round-robin-load-balancing-) behoben werden können. für Hochverfügbarkeit (Round-Robin-DNS) und database server replication oder Hinzufügen eines statische IP, die entweder auf einen aktiven oder einen passiven Load Balancer verweist, auf den wir kurz eingehen werden.

Die Komponenten, die die Anwendungsserver unterstützen, werden als die folgenden Hostnamen bezeichnet:

  • * Backups: * Bacula Backup-Server

  • * monitoring: * Nagios Überwachungsserver

  • * Protokollierung: * Elasticsearch, Logstash, Kibana (ELK) -Stack für die zentrale Protokollierung

Darüber hinaus sind die drei folgenden unterstützenden Komponenten in der Abbildung nicht dargestellt:

  • * ns1: * Primärer BIND-Nameserver für privates DNS

  • * ns2: * Sekundärer BIND-Nameserver für privates DNS

  • * Remotebackups: * Remote-Server in einer anderen Region zum Speichern von Kopien der Bacula-Backups im Falle eines physischen Ausfalls im Produktionsdatencenter - === \

Wir werden auch grundlegende Wiederherstellungspläne für Fehler in den verschiedenen Komponenten der Anwendung entwickeln.

Wenn wir unser Ziel erreicht haben, werden wir insgesamt 10 Server haben. Wir erstellen sie alle auf einmal (dies vereinfacht Dinge wie das Einrichten von DNS), können sie jedoch nach Bedarf erstellen. Wenn Sie DigitalOcean-Backups zusätzlich zu oder anstelle von Bacula als Backup-Lösung verwenden möchten, müssen Sie diese Option beim Erstellen Ihrer Droplets auswählen.

Hochverfügbarkeit (optional)

Ein einzelner Fehlerpunkt liegt vor, wenn ein Teil Ihrer Infrastruktur ausfällt und der gesamte Standort oder Dienst nicht mehr verfügbar ist. Wenn Sie die einzelnen Fehlerquellen in diesem Setup beheben möchten, können Sie die hohe Verfügbarkeit erhöhen, indem Sie einen weiteren Load Balancer hinzufügen. Hochverfügbare Dienste werden bei einem Ausfall automatisch auf ein Backup- oder passives System umgeschaltet. Das Vorhandensein von zwei Load Balancern in einer Konfiguration mit hoher Verfügbarkeit schützt vor Ausfallzeiten, indem sichergestellt wird, dass immer ein Load Balancer passiv für die Annahme von Datenverkehr verfügbar ist, wenn der aktive Load Balancer nicht verfügbar ist.

Es gibt verschiedene Möglichkeiten, ein Hochverfügbarkeits-Setup zu implementieren. Weitere Informationen finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-use-floating-ips-on-digitalocean#how-to-implement-an-ha-setup[this section of How To Verwenden Sie Floating IPs.

Virtuelles privates Netzwerk (optional)

Wenn Sie die Netzwerkkommunikation zwischen Ihren Servern sichern möchten, können Sie ein VPN einrichten. Das Sichern von Netzwerkübertragungen mit Verschlüsselung ist besonders wichtig, wenn die Daten über das Internet übertragen werden. Ein weiterer Vorteil der Verwendung eines VPN besteht darin, dass die Identität der Hosts durch den Schlüsselauthentifizierungsprozess überprüft wird, wodurch Ihre Dienste vor nicht autorisierten Quellen geschützt werden.

Wenn Sie nach einer Open-Source-VPN-Lösung suchen, sollten Sie Tinc oder OpenVPN in Betracht ziehen. In diesem speziellen Fall ist Tinc, das Mesh-Routing verwendet, die bessere Lösung. Tutorials zu beiden VPN-Lösungen finden Sie hier:

Voraussetzungen

Jeder Ubuntu 14.04-Server sollte einen Superuser ohne Rootberechtigung haben, den Sie in diesem Tutorial einrichten können: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [ Erstes Server-Setup mit Ubuntu 14.04]. Alle Befehle werden auf jedem Server als dieser Benutzer ausgeführt.

Wir gehen davon aus, dass Sie mit grundlegenden Linux-Sicherheitskonzepten vertraut sind, auf die wir nicht näher eingehen werden. Wenn Sie eine kurze Einführung in die Linux-Sicherheit benötigen, lesen Sie diesen Artikel: 7 Sicherheitsmaßnahmen zum Schutz Ihrer Server.

Domain Name

Wir gehen davon aus, dass Ihre Bewerbung über einen Domainnamen wie „example.com“ bereitgestellt wird. Wenn Sie noch keinen besitzen, erwerben Sie einen bei einem Domainnamen-Registrar.

Sobald Sie einen Domainnamen Ihrer Wahl haben, können Sie diesem Tutorial folgen, um ihn mit dem DigitalOcean-DNS zu verwenden: https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from- Common-Domain-Registrare [So verweisen Sie von Common Domain-Registraren auf DigitalOcean-Nameserver].

Neben der Erleichterung der Erreichbarkeit Ihrer Website (im Vergleich zu einer IP-Adresse) ist ein Domänenname erforderlich, um die Vorteile der Domänen- und Identitätsprüfung durch die Verwendung von SSL-Zertifikaten zu erzielen, die auch die Verschlüsselung für die Kommunikation zwischen Ihrer Anwendung und ihren Benutzern ermöglichen.

SSL-Zertifikat

TLS / SSL ermöglicht die Verschlüsselung und Domänenüberprüfung zwischen Ihrer Anwendung und ihren Benutzern. Daher verwenden wir in unserem Setup ein SSL-Zertifikat. In unserem Beispiel geben wir diesen Namen als Common Name (CN) des Zertifikats an, damit Benutzer auf unsere Website unter "http://www.example.com [www.example.com]" zugreifen können. Das Zertifikat wird auf dem HAProxy-Server installiert (* lb1 *), daher möchten Sie möglicherweise die Zertifikatsschlüssel und die CSR dort zur Vereinfachung generieren.

Wenn Sie ein Zertifikat benötigen, das eine Identitätsüberprüfung ermöglicht, können Sie ein SSL-Zertifikat kostenlos mit Let’s Encrypt erwerben oder eines von einer kommerziellen Zertifizierungsstelle erwerben. Einzelheiten zur Option Let’s Encrypt finden Sie unter How To Install an SSL-Zertifikat von einer kommerziellen Zertifizierungsstelle. Überspringen Sie den Abschnitt * Zertifikat auf Webserver installieren *.

Alternativ können Sie auch ein selbstsigniertes SSL-Zertifikat verwenden, das mit diesem Befehl generiert werden kann:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.key -out ~/.crt

Schritte, um unser Ziel zu erreichen

Nachdem wir nun einen Überblick über die Einrichtung unserer Produktionsanwendung erhalten haben, erstellen wir einen allgemeinen Plan, um unser Ziel zu erreichen.

Die Komponenten, aus denen sich die Anwendung zusammensetzt, sind die wichtigsten. Deshalb möchten wir, dass diese frühzeitig einsatzbereit sind. Da wir jedoch die Verwendung der namensbasierten Adressauflösung für unsere privaten Netzwerkverbindungen planen, * sollten wir zuerst unseren DNS einrichten *.

Sobald unser DNS bereit ist, richten wir die Server ein, aus denen sich die Anwendung zusammensetzt, um sie in Betrieb zu nehmen. Da die Datenbank von der Anwendung benötigt wird und die Anwendung vom Load Balancer benötigt wird, richten wir die Komponenten in dieser Reihenfolge ein:

  1. Datenbankserver

  2. Anwendungsserver

  3. Lastenausgleicher

Sobald wir die Schritte zum Einrichten unserer Anwendung durchlaufen haben, können wir einen * Wiederherstellungsplan * für verschiedene Szenarien erstellen. Dieser Plan wird bei der Festlegung unserer Sicherungsstrategie hilfreich sein.

Nachdem wir unsere verschiedenen Wiederherstellungspläne erstellt haben, möchten wir sie unterstützen, indem wir * Backups * einrichten. Anschließend können wir die Überwachung einrichten, um sicherzustellen, dass sich unsere Server und Dienste in einem einwandfreien Zustand befinden. Zuletzt richten wir die * zentralisierte Protokollierung * ein, damit wir unsere Protokolle anzeigen, Probleme beheben und Trends identifizieren können.

Fazit

Wenn unser allgemeiner Plan fertig ist, können wir die Einrichtung unserer Produktionsanwendung implementieren. Denken Sie daran, dass dieses Setup, obwohl es voll funktionsfähig ist, ein Beispiel ist, aus dem Sie nützliche Informationen abrufen und das Gelernte verwenden sollten, um Ihr eigenes Anwendungssetup zu verbessern.

Fahren Sie mit dem nächsten Lernprogramm fort, um mit dem Einrichten der Anwendung zu beginnen: Building for Production: Web Applications - Deploying.