Versuchen Sie Docker+Nginx, um die Single-Page-Anwendungsmethode bereitzustellen

Versuchen Sie Docker+Nginx, um die Single-Page-Anwendungsmethode bereitzustellen

Von der Entwicklung bis zur Bereitstellung: Machen Sie es selbst

Wenn wir eine Single-Page-Anwendung entwickeln, nach der Ausführung des Builds

npm-Ausführung erstellen

Im Verzeichnis „dist“ wird eine index.html generiert. Wie stellen Sie diese index.html auf dem Server bereit?

Verzeichnisstruktur

  • dist/: statische Dateien, nachdem das Frontend erstellt wurde
  • docker/: für das Image benötigte Konfigurationsdateien

Konfigurieren Sie Nginx

Lassen Sie mich über einige Konfigurationen sprechen. Erstens komprimiert Gzip Ressourcen, um Bandbreite zu sparen und die Ladegeschwindigkeit des Browsers zu erhöhen.

Obwohl Webpack bereits das Generieren von .gz-komprimierten Paketen zur Build-Zeit unterstützt, kann es auch über Nginx aktiviert werden.
gzip an;
gzip_disable "msie6";
# 0-9 Ebenen, je höher die Ebene, desto kleiner das komprimierte Paket, aber desto höher die Anforderung an die Serverleistung gzip_comp_level 9;
gzip_min_länge 100;
# Gzip unterstützt keine komprimierten Bilder, wir müssen nur die Front-End-Ressourcen gzip_types text/css application/javascript komprimieren;

Dann gibt es die Konfiguration des Service-Ports, der die API per Reverse-Proxy an den Backend-Service weiterleitet.

Server {
 hören Sie 8080;
 Servername www.frontend.com;

 root /usr/share/nginx/html/;

 Standort / {
 Index Index.html Index.htm;
 Versuchen Sie, Dateien $uri $uri/ /index.html zu versuchen.
 # Deaktivieren Sie das Zwischenspeichern von HTML, um sicherzustellen, dass auf die neuesten CSS- und JS-Ressourcen verwiesen wird. Läuft ab -1;
 }

 Standort /api/v1 {
 Proxy-Passwort http://backend.com;
 }
}

Die komplette Konfiguration sieht so aus

Arbeiterprozesse 1;

Ereignisse { Worker_Connections 1024; }

http {
 ##
 # Grundeinstellungen
 ##

 sendfile an;
 tcp_nopush ein;
 tcp_nodelay ein;
 KeepAlive-Timeout 65;
 Typen_Hash_max_Größe 2048;

 /etc/nginx/mime.types einschließen;
 Standardtyp Anwendung/Oktett-Stream;

 ##
 # Protokollierungseinstellungen
 ##

 Zugriffsprotokoll /var/log/nginx/access.log;
 Fehlerprotokoll /var/log/nginx/error.log;

 ##
 # Gzip-Einstellungen
 ##

 gzip an;
 gzip_disable "msie6";
 gzip_comp_level 9;
 gzip_min_länge 100;
 gzip_types Text/CSS-Anwendung/Javascript;

 Server {
 hören Sie 8080;
 Servername www.frontend.com;

 root /usr/share/nginx/html/;

 Standort / {
  Index Index.html Index.htm;
  Versuchen Sie, Dateien $uri $uri/ /index.html zu versuchen.
  läuft ab -1;
 }

 Standort /api/v1 {
  Proxy-Passwort http://backend.com;
 }
 }
}

Docker konfigurieren

Hier ist ein einfaches Beispiel. Basierend auf dem Basisabbild kopieren Sie die nginx.conf und index.html, die wir in das Abbild geschrieben haben.

VON nginx:alpine

KOPIEREN Sie nginx.conf /etc/nginx/nginx.conf
KOPIEREN Sie dist /usr/share/nginx/html

Schreiben eines Makefiles

Nachdem Sie die oben genannten Vorbereitungen abgeschlossen haben, können Sie Befehle zum Ausführen der Image-Paketierung schreiben.

Geben Sie dem Image zunächst einen Namen und eine Portnummer

APP_NAME = spa_nginx_docker
PORT = 8080

Verpacken von Bildern durch Build

bauen:
 cp docker/Dockerfile.
 cp docker/nginx.conf .
 Docker-Build -t $(APP_NAME).
 rm Docker-Datei
 rm nginx.conf

Starten Sie das Image durch Bereitstellen

einsetzen:
 docker run -d -it -p=$(PORT):$(PORT) --name="$(APP_NAME)" $(APP_NAME)

Zum Schluss gibt es noch einen Stopp, um anzuhalten und das Bild zu bereinigen.

stoppen:
 Docker-Stopp $(APP_NAME)
 Docker rm $(APP_NAME)
 Docker RMI $(APP_NAME)

Die komplette Konfiguration sieht so aus

APP_NAME = spa_nginx_docker
PORT = 8080

bauen:
 cp docker/Dockerfile.
 cp docker/nginx.conf .
 Docker-Build -t $(APP_NAME).
 rm Docker-Datei
 rm nginx.conf

einsetzen:
 docker run -d -it -p=$(PORT):$(PORT) --name="$(APP_NAME)" $(APP_NAME)

stoppen:
 Docker-Stopp $(APP_NAME)
 Docker rm $(APP_NAME)
 Docker RMI $(APP_NAME)

Der vollständige Befehl sieht folgendermaßen aus:

# Statischer Ressourcenaufbau npm run build

# Image-Verpackung erstellen

# Stoppen und das alte Image löschen (kann beim ersten Mal ignoriert werden)
halt machen

# Image-Startup make deploy

Zusammenfassen

Die aktuelle Bereitstellungsmethode ist relativ einfach. Die Verwendung grundlegender Bilder und Bild-Repositorys wird später hinzugefügt. Lassen Sie uns zunächst den weiteren Weg erkunden.

Das könnte Sie auch interessieren:
  • Docker erstellt eine Nginx+PHP+MySQL-Umgebung und implementiert WordPress-Praxis
  • So stellen Sie nginx mit Docker bereit und ändern die Konfigurationsdatei
  • Docker für Anfänger und detaillierte Schritte zum Bereitstellen von NGINX
  • Docker nginx Beispielmethode zum Bereitstellen mehrerer Projekte
  • Docker-Bereitstellung - Nginx-Implementierungsprozess - Grafik und Text - detaillierte Erläuterung
  • Docker stellt Nginx bereit und konfiguriert Reverse-Proxy
  • Implementierungsmethode für die Produktion und Bereitstellung von Docker Nginx-Containern
  • So stellen Sie Nginx auf Docker bereit

<<:  Nodejs-Fehlerbehandlungsprozessaufzeichnung

>>:  Lösung für das Datenasymmetrieproblem zwischen MySQL und Elasticsearch

Artikel empfehlen

So verwalten Sie Docker über die Benutzeroberfläche

Docker wird in immer mehr Szenarien verwendet. Fü...

Implementierung des CSS-Animationseffekts für dynamische Höhenübergänge

Diese Frage stammt aus einer Nachricht auf Nugget...

Basierend auf den Sonderzeichen in der URL-Escape-Kodierung

Inhaltsverzeichnis Sonderzeichen in URLs Escapeze...

Schritte zur Einführung von PWA in ein Vue-Projekt

Inhaltsverzeichnis 1. Abhängigkeiten installieren...

Implementierung der MySQL-Mehrversions-Parallelitätskontrolle MVCC

Einstellungen für die Transaktionsisolationsebene...

So verwenden Sie die ElementUI-Paginierungskomponente Paginierung in Vue

Die Verwendung der ElementUI-Paging-Komponente Pa...

Tutorial zum schnellen Bereitstellen von Clickhouse mit Docker-Compose

ClickHouse ist ein spaltenorientiertes Open-Sourc...

JavaScript-Implementierung eines einfachen Additionsrechners

In diesem Artikelbeispiel wird der spezifische Ja...

Praktische TypeScript-Tipps, die Sie vielleicht nicht kennen

Inhaltsverzeichnis Vorwort Funktionsüberladung Zu...

Mit CSS3 implementierte Text-Popup-Effekte

Ergebnisse erzielenImplementierungscode html <...

HTML-Formular_PowerNode Java Academy

1. Formular 1. Die Rolle des Formulars HTML-Formu...