Erstellen für die Produktion: Webanwendungen - Bereitstellung

Einführung

In diesem Teil des Tutorials werden wir unsere Beispiel-PHP-Anwendung WordPress und ein privates DNS bereitstellen:

Ihre Benutzer greifen über HTTPS über einen Domain-Namen auf Ihre Anwendung zu, z. "Https://www.example.com" zeigt auf den Load Balancer. Der Load Balancer fungiert als Reverse-Proxy für die Anwendungsserver, die eine Verbindung zum Datenbankserver herstellen. Das private DNS ermöglicht es uns, Namen zu verwenden, um auf die privaten Netzwerkadressen unserer Server zu verweisen, was den Konfigurationsprozess unserer Server vereinfacht.

Wir werden die Komponenten, die wir gerade besprochen haben, in dieser Reihenfolge auf sechs Servern einrichten:

  • Privates DNS (ns1 und ns2)

  • Datenbankserver (db1)

  • Anwendungsserver (App1 und App2)

  • Load Balancer (lb1)

Beginnen wir mit dem DNS-Setup.

Private DNS-Server

Die Verwendung von Namen für Adressen hilft bei der Identifizierung der Server, mit denen Sie arbeiten, und ist für die Wartung eines größeren Server-Setups von entscheidender Bedeutung, da Sie einen Server ersetzen können, indem Sie einfach Ihre DNS-Einträge (an einem einzigen Ort) aktualisieren, anstatt unzählige Konfigurationsdateien mit zu aktualisieren IP-Adressen. In unserem Setup richten wir unseren DNS so ein, dass wir die privaten Netzwerkadressen unserer Server nach Namen anstatt nach IP-Adresse referenzieren können.

Wir werden auf die private Netzwerkadresse jedes Servers durch einen Hostnamen unter der Subdomain "nyc3.example.com" verweisen. Die private Netzwerkadresse des Datenbankservers lautet beispielsweise "db1.nyc3.example.com" und wird in die private IP-Adresse des Datenbankservers aufgelöst. Beachten Sie, dass die Beispiel-Unterdomäne nahezu willkürlich ist und normalerweise aufgrund logischer Organisationszwecke ausgewählt wird. In unserem Fall gibt "nyc3" an, dass sich die Server im NYC3-Datencenter befinden, und "example.com" ist der Domänenname unserer Anwendung.

Befolgen Sie hierzu dieses Lernprogramm und fügen Sie DNS-Einträge für jeden Server in Ihrem Setup hinzu:

Nach Abschluss des DNS-Lernprogramms sollten Sie über zwei BIND-Server verfügen: * ns1 * und * ns2 *. Wenn Sie die privaten IP-Adressen aller Server in Ihrem Setup bereits kennen, fügen Sie sie jetzt Ihrem DNS hinzu. Andernfalls fügen Sie beim Erstellen Ihrer Server die entsprechenden DNS-Einträge hinzu.

Jetzt können Sie Ihren Datenbankserver einrichten.

Richten Sie den Datenbankserver ein

Da wir den Lastausgleich für unsere Anwendungsserver durchführen möchten, d. H. Wenn Sie Apache und PHP ausführen, müssen Sie die Datenbank von den Anwendungsservern entkoppeln, indem Sie sie auf einem separaten Server einrichten. Das Entkoppeln der Datenbank von der Anwendung ist ein wesentlicher Schritt, bevor viele Anwendungstypen horizontal skaliert werden. Dies wird in diesem Blogbeitrag erläutert: https://www.digitalocean.com/company/blog/horizontally-scaling-php-applications/[Horizontally Scaling PHP-Anwendungen: Ein praktischer Überblick.

In diesem Abschnitt werden alle erforderlichen Schritte zum Einrichten unseres Datenbankservers beschrieben. Weitere Informationen zum Einrichten eines entfernten, entkoppelten MySQL-Datenbankservers für eine PHP-Anwendung finden Sie in diesem Lernprogramm: https://www.digitalocean.com/community/ Tutorials / Einrichten einer Remote-Datenbank zur Optimierung der Site-Performance mit MySQL [Einrichten einer Remote-MySQL-Datenbank].

Installieren Sie MySQL

Installieren Sie auf dem Datenbankserver * db1 * MySQL Server:

sudo apt-get update
sudo apt-get -y install mysql-server

Geben Sie an der Eingabeaufforderung Ihr gewünschtes MySQL-Root-Passwort ein.

Führen Sie nun Folgendes aus:

sudo mysql_install_db
sudo mysql_secure_installation

Sie müssen das MySQL-Administratorkennwort eingeben, das Sie in den obigen Schritten festgelegt haben. Anschließend werden Sie gefragt, ob Sie dieses Passwort ändern möchten. Geben Sie "N" für "Nein" ein, wenn Sie mit Ihrem aktuellen Passwort zufrieden sind. Beantworten Sie die restlichen Fragen mit den Standardeinstellungen.

Konfigurieren Sie MySQL für die Überwachung der privaten Netzwerkschnittstelle

Öffnen Sie die MySQL-Konfigurationsdatei:

sudo vi /etc/mysql/my.cnf

Suchen Sie die Einstellung "+ bind-address +" und ändern Sie sie in die Adresse der privaten Netzwerkadresse Ihres Datenbankservers:

/etc/mysql/my.cnf

bind-address            =

Speichern und schließen.

Starten Sie MySQL neu:

sudo service mysql restart

Datenbank und Datenbankbenutzer einrichten

Jetzt müssen wir die Datenbank und die Datenbankbenutzer erstellen, mit denen die Anwendungsserver eine Verbindung herstellen.

Rufen Sie die MySQL-Konsole auf:

mysql -u root -p

Geben Sie an der Eingabeaufforderung das MySQL-Root-Passwort ein.

Erstellen Sie an der MySQL-Eingabeaufforderung die Datenbank für Ihre Anwendung:

CREATE DATABASE ;

MySQL ordnet seine Benutzer den Servern zu, von denen sie eine Verbindung herstellen sollen. In unserem Fall haben wir zwei Anwendungsserver, die eine Verbindung herstellen. Daher sollten wir für jeden einen Benutzer einrichten. Erstellen Sie einen Datenbankbenutzer, in unserem Beispiel "appuser", mit dem über die private Netzwerkadresse jedes Ihrer Anwendungsserver (* app1 * und * app2 *) eine Verbindung hergestellt werden kann. Sie sollten für jeden Benutzer dasselbe Passwort verwenden:

CREATE USER ''@'' IDENTIFIED BY '';
CREATE USER ''@'' IDENTIFIED BY '';

Wir werden die endgültigen Datenbankbenutzerrechte später konfigurieren, aber geben wir * appuser * die volle Kontrolle über die * app * -Datenbank:

GRANT ALL PRIVILEGES ON .* TO ''@'';
GRANT ALL PRIVILEGES ON .* TO ''@'';
FLUSH PRIVILEGES;

Diese erweiterten Berechtigungen stellen sicher, dass das Installationsprogramm der Anwendung die Anwendung in der Datenbank installieren kann. Wenn Sie mehr als zwei Anwendungsserver haben, sollten Sie jetzt alle erforderlichen Datenbankbenutzer erstellen.

Verlassen Sie jetzt die MySQL-Eingabeaufforderung:

exit

Die Einrichtung des Datenbankservers ist abgeschlossen. Lassen Sie uns die Anwendungsserver einrichten.

Richten Sie Anwendungsserver ein

Auf den Anwendungsservern wird der Code unserer Anwendung ausgeführt, die eine Verbindung zum Datenbankserver herstellt. Unsere Beispielanwendung ist WordPress, eine PHP-Anwendung, die über einen Webserver wie Apache oder Nginx bereitgestellt wird. Da wir die Anwendungsserver ausgleichen möchten, richten wir zwei identische ein.

In diesem Abschnitt werden alle erforderlichen Schritte zum Einrichten unserer Anwendungsserver beschrieben. Das Thema wird jedoch im folgenden Lernprogramm ausführlich behandelt, beginnend mit dem Abschnitt * Einrichten des Webservers *: https://www.digitalocean.com/community / tutorials / wie-man-eine-entfernte-datenbank-einrichtet-um-die-standortleistung-mit-mysql-zu optimieren [wie man eine entfernte datenbank einrichtet].

Installieren Sie Apache und PHP

Installieren Sie auf beiden Anwendungsservern * app1 * und * app2 * Apache und PHP:

sudo apt-get update
sudo apt-get -y install apache2 php5-mysql php5 libapache2-mod-php5 php5-mcrypt

Konfigurieren Sie Apache

Wir werden HAProxy auf dem Load Balancer-Server verwenden, um die SSL-Beendigung zu handhaben, sodass unsere Benutzer nicht direkt auf die Anwendungsserver zugreifen sollen. Als solches binden wir Apache an die private Netzwerkadresse jedes Servers.

Öffnen Sie auf jedem Anwendungsserver * app1 * und * app2 * Ihre Apache-Port-Konfigurationsdatei. Standardmäßig ist dies die Datei "+ ports.conf +":

sudo vi /etc/apache2/ports.conf

Suchen Sie die Zeile mit der Aufschrift "+ Listen 80 +" und fügen Sie Ihre private IP-Adresse hinzu (ersetzen Sie die tatsächliche IP-Adresse Ihres Servers):

Apache ports.conf - Lauscht auf der privaten Schnittstelle

Listen :80

Speichern und schließen. Dadurch wird Apache so konfiguriert, dass es nur die private Netzwerkschnittstelle überwacht. Auf diese kann also nicht über die öffentliche IP-Adresse oder den Hostnamen zugegriffen werden.

Starten Sie Apache neu, damit die Änderungen wirksam werden:

sudo service apache2 restart

Auf Apache kann jetzt nur über die private Netzwerkadresse Ihrer Anwendungsserver zugegriffen werden. Wir werden den Load Balancer so konfigurieren, dass Benutzeranforderungen in Kürze hier gesendet werden.

Laden Sie die Anwendung herunter und konfigurieren Sie sie

In unserem Beispiel verwenden wir WordPress als unsere Anwendung. Wenn Sie eine andere PHP-Anwendung verwenden, laden Sie sie herunter und führen Sie eine relevante Konfiguration durch (z. Datenbankverbindungsinformationen), fahren Sie dann mit dem nächsten Abschnitt fort.

Laden Sie auf dem ersten Anwendungsserver, * app1 *, das WordPress-Archiv herunter:

cd ~
wget http://wordpress.org/latest.tar.gz

Extrahieren Sie das WordPress-Archiv:

tar xvf latest.tar.gz

Wechseln Sie in das extrahierte Verzeichnis:

cd wordpress

WordPress benötigt ein Verzeichnis für seine Uploads, + wp-content / uploads +. Machen wir das jetzt:

mkdir wp-content/uploads

Wir werden die WordPress-Beispielkonfigurationsdatei als Vorlage verwenden. Kopieren Sie es an den richtigen Ort:

cp wp-config-sample.php wp-config.php

Öffnen Sie nun die Konfigurationsdatei zur Bearbeitung:

vi wp-config.php

Konfigurieren Sie die WordPress-Datenbankverbindung, indem Sie die hervorgehobenen Informationen in den folgenden Zeilen ändern:

wp-config.php

/** The name of the database for WordPress */
define('DB_NAME', '');

/** MySQL database username */
define('DB_USER', '');

/** MySQL database password */
define('DB_PASSWORD', '');

/** MySQL hostname */
define('DB_HOST', '');

Da wir die TLS / SSL-Verschlüsselung auf dem Load-Balancer-Server verwenden, müssen wir die folgenden Zeilen hinzufügen, damit WordPress erkennt, dass sich hinter einem Reverse-Proxy, der SSL verwendet, Folgendes befindet:

define('FORCE_SSL_ADMIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
      $_SERVER['HTTPS']='on';

Sie möchten auch die Schlüssel und Salze aktualisieren, damit Sie Cookies ungültig machen können, wenn Sie möchten. Wir werden dies hier nicht behandeln, aber stellen Sie sicher, dass sie auf allen Ihren Anwendungsservern identisch sind.

Speichern und schließen.

WordPress ist jetzt konfiguriert, aber die Dateien müssen an den richtigen Speicherort kopiert werden, damit sie von unserer Webserver-Software bereitgestellt werden können.

Kopieren Sie die Anwendungsdateien in das Document Root-Verzeichnis

Nachdem wir unsere Anwendung konfiguriert haben, müssen wir sie in Apaches Dokumentenstamm kopieren, um sie den Besuchern unserer Website zur Verfügung zu stellen.

Der Standardspeicherort von Apaches DocumentRoot ist "+ / var / www / html +", daher werden wir diesen in unserem Beispiel verwenden.

Löschen Sie zunächst die Standarddatei "+ index.html":

sudo rm /var/www/html/index.html

Verwenden Sie dann rsync, um die WordPress-Dateien nach "+ / var / www / html " zu kopieren, und machen Sie " www-data +" (den Benutzer, als den Apache ausgeführt wird) zum Eigentümer:

sudo rsync -avP ~/wordpress/ /var/www/html
sudo chgrp -R www-data /var/www/html/*

Unser erster Anwendungsserver, app1, ist fertig. Wir werden den anderen Anwendungsserver einrichten.

Replizieren Sie Anwendungsdateien auf andere Server

Damit die Dateien Ihrer Anwendung auf Ihren verschiedenen Anwendungsservern konsistent bleiben, sollten Sie die Dateireplikation des Dokumentenstamms Ihres Webservers einrichten. Im Falle von WordPress speichert die Verwendung der Weboberfläche zum Hochladen von Dateien und Installieren von Plug-ins die Dateien auf dem jeweiligen Server, der die Anforderung verarbeitet. Wenn diese Dateien nicht auf alle Anwendungsserver repliziert werden, werden einigen Benutzern Seiten mit fehlenden Bildern und fehlerhaften Plug-ins bereitgestellt. Wenn Ihre PHP-Anwendung nicht WordPress ist und keine ihrer Daten speichert (z. Hochgeladene Dateien oder heruntergeladene Plugins) auf dem Anwendungsserver können Sie die Anwendungsdateien nur einmal manuell kopieren. In diesem Fall kopieren Sie Ihre Anwendungsdateien mit rsync von * app1 * nach * app2 *.

Mit GlusterFS können Sie ein repliziertes Volume der erforderlichen Dateien erstellen. Dies wird im Abschnitt * Webanwendungsdateien synchronisieren * dieses Lernprogramms erläutert: https://www.digitalocean.com/community/tutorials/how-to-use -haproxy-als-Layer-4-Load-Balancer-für-WordPress-Anwendungsserver-auf-Ubuntu-14-04 # Synchronisieren-von-Webanwendungsdateien [Verwendung von HAProxy als Load Balancer für WordPress-Anwendungen Server]. Befolgen Sie die Anweisungen (überspringen Sie den Speicherort der Hosts-Datei, da Ihr DNS dies erledigt) und richten Sie die Replikation zwischen * app1 * und * app2 * ein.

Sobald Ihre Replikation ordnungsgemäß eingerichtet ist, sollten beide Anwendungsserver ordnungsgemäß konfiguriert sein. Richten wir jetzt unseren Load Balancer ein.

Richten Sie Load Balancer Server ein

Auf unserem Load-Balancer-Server wird HAProxy ausgeführt, das als Reverse-Proxy-Load-Balancer für unsere Anwendungsserver dient. Ihre Benutzer greifen über den Load-Balancer-Server über eine URL wie "+ https: // www.example.com +" auf Ihre Anwendung zu.

In diesem Abschnitt werden alle erforderlichen Schritte zum Einrichten unseres Load Balancer-Servers beschrieben. Das Thema wird jedoch in den folgenden Lernprogrammen ausführlich behandelt:

Kopieren Sie das SSL-Zertifikat

Führen Sie diese Schritte auf dem Load Balancer-Server * lb1 * aus.

Kombinieren Sie in dem Verzeichnis, das Ihr SSL-Zertifikat enthält (eine der Voraussetzungen aus Teil 1), Ihr Zertifikat, ein Zwischenzertifizierungsstellenzertifikat und den Schlüssel Ihres Zertifikats in einer einzigen "+ .pem " - Datei. Zum Beispiel (unsere Zertifikate befinden sich in ` / root / certs +`:

cd /root/certs
cat www.example.com.crt CAintermediate.ca-bundle www.example.com.key > www.example.com.pem

Dann kopieren Sie die pem-Datei nach + / etc / ssl / private +:

sudo cp www.example.com.pem /etc/ssl/private/

Diese Datei wird von HAProxy für die SSL-Beendigung verwendet.

Installieren Sie HAProxy

Installieren Sie auf dem Load Balancer-Server * lb1 * HAProxy:

sudo add-apt-repository ppa:vbernat/haproxy-1.5
sudo apt-get update
sudo apt-get -y install haproxy

Jetzt konfigurieren wir HAProxy.

HAProxy-Konfiguration

Wir müssen HAProxy mit einigen sinnvollen Einstellungen, SSL-Terminierung und den entsprechenden Frontends und Backends konfigurieren, damit es mit unseren Anwendungsservern funktioniert.

Öffnen Sie die HAProxy-Konfigurationsdatei zum Bearbeiten:

sudo vi /etc/haproxy/haproxy.cfg
HAProxy-Konfiguration: Allgemeine Einstellungen

Das erste, was Sie tun möchten, ist maxconn auf eine vernünftige Zahl zu setzen. Diese Einstellung wirkt sich darauf aus, wie viele gleichzeitige Verbindungen HAProxy zulässt. Dies kann sich auf die QoS auswirken und verhindern, dass Ihre Webserver abstürzen und versuchen, zu viele Anforderungen zu bedienen. Sie müssen damit herumspielen, um herauszufinden, was für Ihre Umgebung funktioniert. Fügen Sie die folgende Zeile (mit einem Wert, den Sie für sinnvoll halten) zum globalen Abschnitt der Konfiguration hinzu:

haproxy.cfg - maxconn

  maxconn

Fügen Sie diese Zeile hinzu, um die maximale Größe der generierten temporären DHE-Schlüssel zu konfigurieren:

haproxy.cfg - tune.ssl.default-dh-param

  tune.ssl.default-dh-param 2048

Fügen Sie im Abschnitt "Standardeinstellungen" die folgenden Zeilen unter der Zeile "Modus http" hinzu:

haproxy.cfg

  option forwardfor
  option http-server-close

Wenn Sie die HAProxy-Statistikseite aktivieren möchten, fügen Sie die folgenden Zeilen im Abschnitt "Standardeinstellungen" hinzu (ersetzen Sie Benutzer und Kennwort durch sichere Werte):

haproxy.cfg

  stats enable
  stats uri /
  stats realm Haproxy\ Statistics
  stats auth :

Auf diese Weise können Sie die Seite mit den HAProxy-Statistiken aufrufen, indem Sie zu Ihrer Domain unter / stats (z. "Https://www.example.com/stats%22[https://www.example.com/stats"]).

Schließen Sie die Konfigurationsdatei noch nicht! Als nächstes werden wir die Proxy-Konfiguration hinzufügen.

HAProxy-Konfiguration: Proxies

Das erste, was wir hinzufügen möchten, ist ein Frontend für die Verarbeitung eingehender HTTP-Verbindungen. Fügen Sie am Ende der Datei ein Frontend mit dem Namen www-http hinzu:

frontend www-http
  bind :80
  reqadd X-Forwarded-Proto:\ http
  default_backend app-backend

Der Zweck dieses Frontends besteht darin, HTTP-Verbindungen zu akzeptieren, damit sie zu HTTPS umgeleitet werden können.

Fügen Sie nun ein Frontend hinzu, um die eingehenden HTTPS-Verbindungen zu verarbeiten. Stellen Sie sicher, dass Sie das entsprechende + pem + Zertifikat angeben:

frontend www-https
  bind :443 ssl crt /etc/ssl/private/.pem
  reqadd X-Forwarded-Proto:\ https
  default_backend app-backend

Wenn Sie mit der Konfiguration der Frontends fertig sind, fügen Sie Ihr Backend mit den folgenden Zeilen hinzu:

backend app-backend
  redirect scheme https if !{ ssl_fc }
  server app1 :80 check
  server app2 :80 check

Dieses Backend gibt an, an welche Anwendungsserver der Datenverkehr mit Lastenausgleich gesendet werden soll. Außerdem weist die Zeile "+ redirect scheme https +" an, HTTP-Verbindungen zu HTTPS umzuleiten.

Speichern und beenden Sie nun haproxy.cfg. HAProxy kann jetzt gestartet werden. Aktivieren Sie jedoch zuerst die Protokollierung.

Aktivieren Sie die HAProxy-Protokollierung

Öffnen Sie die rsyslog-Konfigurationsdatei:

sudo vi /etc/rsyslog.conf

Suchen Sie dann die folgenden Zeilen und kommentieren Sie sie aus, um den UDP-Syslog-Empfang zu aktivieren. Es sollte wie folgt aussehen, wenn Sie fertig sind:

/etc/rsyslog.conf

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

Starten Sie nun rsyslog neu, um die neue Konfiguration zu aktivieren:

sudo service rsyslog restart

Die HAProxy-Protokollierung ist jetzt aktiviert! Die Protokolldatei wird nach dem Start von HAProxy unter + / var / log / haproxy.log + erstellt.

Starten Sie HAProxy neu

Starten Sie HAProxy neu, damit die Änderungen wirksam werden:

sudo service haproxy restart

Unser Load Balancer ist nun eingerichtet.

Jetzt müssen wir das Installationsskript der Anwendung ausführen.

Installieren Sie WordPress

Wir müssen das WordPress-Installationsskript ausführen, das die Datenbank für die Verwendung vorbereitet, bevor wir sie verwenden können.

Öffnen Sie Ihre Website in einem Webbrowser:

Open in a Web Browserhttps:///wp-admin/install.php

Dadurch wird der WordPress-Installationsbildschirm angezeigt. Füllen Sie die Formulare aus und klicken Sie auf die Schaltfläche * WordPress installieren *.

Nach der Installation von WordPress kann die Anwendung verwendet werden.

Fazit

Die Server, aus denen Ihre Anwendung besteht, sind nun eingerichtet und Ihre Anwendung kann verwendet werden. Sie können sich als Administrator anmelden und Ihre Benutzer können über HTTPS über den richtigen Domainnamen auf die Site zugreifen.

Testen Sie Ihre Anwendung unbedingt und stellen Sie sicher, dass sie wie erwartet funktioniert, bevor Sie fortfahren.

Fahren Sie mit dem nächsten Lernprogramm fort, um den Wiederherstellungsplan für die Einrichtung Ihrer Produktionsanwendung zu bearbeiten: https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-recovery-planning[Building for Production: Webanwendungen - Wiederherstellungsplanung.