Wie verwenden wir Verschlüsseln mit Docker-container auf der Grundlage der Node.js Bild
Ich einen Express-basierte website, die in einem Docker-container auf der Grundlage der Node.js Bild. Wie verwende ich Let ' s Encrypt mit einem container basierend auf diesem Bild?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das erste, was ich getan habe ist, erstellen Sie eine einfache express-basierte docker-image.
Ich bin mit dem folgenden
app.js
aus express-s Hallo Welt " - Beispiel in Ihre docs:Ich auch am Ende mit den folgenden
packages.json
Datei nach dem ausführen Ihrernpm init
im gleichen doc:Habe ich die folgenden Dockerfile:
Hier ist die Ausgabe, wenn ich meine
docker build
Schritt. Ich habe entfernt die meisten dernpm install
Ausgang für die Kürze Willen:Ausführen dieses Bild funktioniert wie folgt:
Wir reinigen können dies durch tun:
docker rm -f helloworld
Nun, ich habe meine sehr basic-express-basierte website läuft in einem Docker-container, aber es haben noch nicht alle TLS einrichten. Wenn Sie wieder die expressjs-docs, die security-best practice bei der Verwendung von TLS ist die Verwendung von nginx.
Da möchte ich Euch eine neue Komponente (nginx), das mache ich mit einem zweiten container.
Da nginx müssen einige Zertifikate, mit zu arbeiten, lassen Sie uns gehen Sie vor und erzeugen, die mit der letsencrypt client. Die letsencrypt docs, wie letsencrypt im Andockfenster finden Sie hier: http://letsencrypt.readthedocs.io/en/latest/using.html#running-with-docker
Führen Sie die folgenden Befehle ein, um die Initiale Erstellung der Zertifikate. Sie müssen führen Sie diese auf einem system, das sich an das öffentliche internet angeschlossen, und über port 80/443 erreichbar von der letsencrypt-Server. Sie müssen auch über Ihren DNS-Namen einrichten und zeigte auf das Feld, das Sie führen dies auf:
Stellen Sie sicher, ersetzen Sie die Werte für
LETSENCRYPT_EMAIL
undDNSNAME
. Die E-Mail-Adresse wird verwendet für Ablauf-Benachrichtigungen.Nun, lassen Sie uns einen nginx-server, wird das neu generierte Zertifikat. Zuerst brauchen wir eine nginx-config-Datei, die konfiguriert ist für TLS:
Können wir in dieser config-Datei in unserem eigenen nginx-image mit dem folgenden Dockerfile:
Diese aufbauen kann mit dem folgenden Befehl:
docker build -t expressnginx .
Als Nächstes erstellen wir eine benutzerdefinierte Netzwerk-so können wir nutzen, Docker ' s service-discovery-Funktion:
Nun können wir das Feuer bis auf die helloworld-und nginx-Container:
Überprüfen Sie, dass nginx kam ordnungsgemäß, indem Sie einen Blick auf die Ausgabe von
docker logs expressnginx
.Die nginx-config-Datei sollte Umleitung alle Anfragen auf port 80 über port 443. Wir können testen, ob Sie durch ausführen der folgenden:
Sollten wir auch, an diesem Punkt, in der Lage sein, um einen erfolgreichen TLS-Verbindung, und sehen unsere
Hello World!
Antwort zurück:Nun, um die Verlängerung. Die nginx.conf oben genannten Bestimmungen für die letsencrypt .bekannten Pfad zum webroot überprüfungsmethode. Wenn Sie führen Sie den folgenden Befehl, es handle Erneuerung. Normalerweise werden Sie diesen Befehl ausführen, auf eine Art cron so, dass Ihre Zertifikate erneuert werden, bevor Sie verfallen:
Gibt es viele Möglichkeiten, dies zu erreichen, je nach Ihrem setup. Ein beliebter Weg, um das setup nginx vor Ihrem Docker-container, und Griff die Zertifikate vollständig innerhalb Ihrer nginx config.
Die nginx-config enthalten kann eine Liste von 'usptreams" (Ihre Docker-Container) und 'Server', die im wesentlichen anzeigen, Anfragen zu bestimmten upstreams. Als Teil dieser Zuordnung können Sie auch mit SSL.
Können Sie certbot, um Ihnen zu helfen dies einzurichten.
Habe ich vor kurzem implementiert https mit let ' s encrypt mithilfe von nginx. Ich bin die Auflistung der Herausforderungen, die ich konfrontiert haben, und die Art und Weise habe ich umgesetzt-Schritt für Schritt hier.
Herausforderung:
Schritte, Sie zu überwinden:
Unten guide ist unabhängig der Art der app, die Sie haben, als es nur um die nginx und docker.
Nun aufhören, diese nginx server und starten Sie den Aufbau Ihrer app. Installieren Sie nginx auf Ihrem Behälter und öffnen Sie den port 80, 443 auf Ihrem docker-container. (wenn sich die Verwendung von aws öffnen Sie auf der ec2-Instanz auch als standardmäßig aws öffnen, nur port 80)
Nächsten Lauf Ihre container und mount der volumes, die Zertifikat-Datei direkt auf dem Behälter. Ich habe geantwortet hier eine Frage, wie das gleiche zu tun.
Damit wird https auf Ihre app. Incase Sie sind nicht in der Lage zu beobachten, und sind mit chrome versuchen clearing dns cache für chrome
Auto-Erneuerung :
Sie können einen Blick hier haben : https://certbot.eff.org/docs/using.html?highlight=docker#running-with-docker
Dann, was ich persönlich mache ist :
Nun, wenn Sie nginx konfiguriert richtig (zeigen Sie auf den richtigen Weg für das TLS-certs-und proxy an die richtige URL, wie http://my-app:3210) sollten Sie haben Zugriff auf Ihre app in https.
Front-end - - NGINX - die listening-port 443, und Proxys zu beck Ende
Back-end - Sie docker-container