Implementierungsbeispiel für die Docker-Bereitstellung von Front-End- und Back-End-Trennprojekten

Implementierungsbeispiel für die Docker-Bereitstellung von Front-End- und Back-End-Trennprojekten

1. Umweltvorbereitung

Server

Alibaba Cloud Server 1 Kern + 2 GB

Software

Diese Bereitstellung verwendet Docker, daher befindet sich die Softwareumgebung auf Docker.

Wir benötigen MySQL 8.0.x, Redis, Nginx. Laden Sie einfach das Image im Voraus herunter

2. Ausführen des Images

MySQL-Installation

Ich habe MySQL in der Version 8.0.x verwendet. Während des Bereitstellungsprozesses traten einige Probleme auf. Diese möchte ich hier mit Ihnen teilen.

Docker-Ausführung \
-p 3306:3306 \
--name mysql \
--privilegiert=true \
--restart sofern nicht gestoppt \
-v /home/mysql8.0.20/mysql:/etc/mysql \
-v /home/mysql8.0.20/logs:/logs \
-v /home/mysql8.0.20/data:/var/lib/mysql \
-v /home/mysql8.0.20/mysql-files:/var/lib/mysql-files \
-v /etc/lokaleZeit:/etc/lokaleZeit \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.20 \
--lower_case_table_names=1

Befehlserklärung:

 -p Port-Mapping --privileged=true Berechtigungseinstellung zum Mounten von Dateien --restart unless-stopped Automatischen Neustart des Containers nach dem Start festlegen -v /home/mysql8.0.20/mysql:/etc/mysql Konfigurationsdatei mounten -v /home/mysql8.0.20/logs:/logs \ Protokoll mounten -v /home/mysql8.0.20/data:/var/lib/mysql \ Datendatei dauerhaft auf dem Host mounten -v /home/mysql8.0.20/mysql-files:/var/lib/mysql-files MySQL8 muss diesen Ordner später synchronisieren -v /etc/localtime:/etc/localtime Containerzeit wird mit dem Host synchronisiert -e MYSQL_ROOT_PASSWORD=123456 Passwort festlegen -d mysql:8.0.20 Hintergrundstart,mysql
--lower_case_table_names=1 MySQL nicht mehr zwischen Groß- und Kleinschreibung unterscheiden (0: Groß- und Kleinschreibung beachten; 1: Groß- und Kleinschreibung nicht beachten)

Table XX.QRTZ_LOCKS doesn't exist 的問題tritt auf, bevor --lower_case_table_names=1 konfiguriert ist

Nach einer Suche auf Baidu stellte ich fest, dass die Konfiguration von MySQL 5.x und 8.x geringfügig unterschiedlich ist.

PS: Beim Start von MySQL 8.0.2 werden unterschiedliche lower_case_table_names-Einstellungen für Server ('1') und Datenwörterbuch ('0') gemeldet.

Nach der Installation von MySQL 8.0.20 wurde während der Initialisierung in my.cnf lower_case_table_names=1 gesetzt und beim Starten ein Fehler gemeldet:

Bildbeschreibung hier einfügen

wie folgt

Bildbeschreibung hier einfügen

Schauen Sie in der offiziellen MySQL-Dokumentation nach. Dort finden Sie folgende Einträge:

lower_case_table_names kann nur bei der Initialisierung des
Server. Ändern der Einstellung lower_case_table_names nach dem Server
initialisiert wird, ist verboten.

Dies ist nur wirksam, wenn während der Initialisierung lower_case_table_names=1 festgelegt wird, zum Beispiel:

--initialize --lower-case-table-names=1

Sehen

https://bugs.mysql.com/bug.php?id=90695

Lösung des Problems

Erstellen Sie eine Sicherungskopie, löschen Sie den ursprünglichen MySQL-Container, führen Sie MySQL erneut aus und fügen Sie am Ende des Befehls --lower_case_table_names=1 hinzu.

Seit MySQL 8 muss dieser Schritt während der Initialisierung festgelegt werden

Redis-Installation

docker run -p 6379:6379 --name redis -v /home/redis/data/:/data -d redis:3.2 redis-server --appendonly yes

Befehl Erklärung

-v /home/redis/data/:/data Datenverzeichnis mounten --appendonly yes Redis-Persistenz aktivieren

Nginx-Installation

Da ich das Verzeichnis mounten musste, habe ich den folgenden Befehl ausgeführt

Docker-Ausführung \
-D \
-p 80:80 \
--name nginx \
-v /home/nginx/conf:/etc/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/logs:/var/log/nginx \
nginx

Nach dem Ausführen stellte ich fest, dass es immer automatisch beendet wird. Nachdem ich die Protokollinformationen überprüft und auf Baidu gesucht hatte, stellte ich fest, dass das zu mountende Verzeichnis zuerst erstellt werden muss, wenn nginx gestartet wird, da es sonst automatisch beendet wird.

Daher müssen wir zuerst das Mount-Verzeichnis erstellen und dann den Befehl ausführen

3. Paketprojekt

Frontend

Ändern Sie devServer -Knotenzuordnungsport in vue.config.js damit er mit dem Backend-Port übereinstimmt.

Führen Sie den folgenden Befehl aus:

npm führt build:prod aus

Ein dist -Verzeichnis wird lokal generiert

hinteres Ende

  • Ändern Sie application.yml
  • Ändern Sie logback.xml log.path
  • MySQL- und Redis-Adressen ändern

Führen Sie den folgenden Befehl aus:

mvn sauber
MVN-Paket

Ein JAR-Paket wird unter target ruoyi-admin generiert, was wir brauchen

IV. Bereitstellung

Frontend

Konfigurieren Sie nginx. Ich habe mit der Konfiguration unter /nginx/conf/conf.d/default.conf begonnen, aber festgestellt, dass die Konfiguration nicht wirksam wurde. Später wurde es unter /nginx/conf/conf.d/nginx.conf konfiguriert. Die spezifische Konfiguration lautet wie folgt:

 Server {
        hören Sie 80;
        server_name localhost; # Sie können die Server-IP anstelle des Standorts / { verwenden.
            root /usr/share/nginx/html/dist/;
            index index.html index.htm index-Anmeldung;
            try_files $uri $uri/ /index.html zuletzt;
        }
        Standort /prod-api/ {
            Proxy_set_header Host $http_host;
            Proxy_Set_Header X-Real-IP $Remote_Addr;
            Proxy_Set_Header REMOTE-HOST $remote_addr;
            proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:7777/; # kann durch Server-IP ersetzt werden}
     }

Nachdem ich es bereitgestellt hatte, stellte ich fest, dass beim Aktualisieren in einem anderen Verzeichnis als dem Stammverzeichnis 404 Not Found angezeigt wurde. Ich habe die folgende Lösung gefunden:

Fügen Sie beim Konfigurieren des Speicherorts try_files $uri $uri/ /index.html last;

hinteres Ende

Ich verwende Dockerfile + jar verpackt in einer gespiegelten Bereitstellungsmethode

Docker-Datei

VON java:8

VOLUMEN /jiang

ADD ruoyi-admin.jar app.jar

EXPOSE 7777

EINSTIEGSPUNKT ["java","-jar","app.jar"]

Erstellen Sie einen Ordner auf dem Server, legen Sie Dockerfile 和jar包darin ab und führen Sie den folgenden Befehl aus, um das Image zu generieren

docker build -t ruoyi-vue.

Hinweis: Am Ende gibt es noch eine .

An diesem Punkt müssen wir nur noch das generierte Bild ausführen

docker run -d -p 7777:7777 --name nflj-vue ruoyi-vue

Dies ist das Ende dieses Artikels über das Implementierungsbeispiel der Docker-Bereitstellung von Front-End- und Back-End-Trennprojekten. Weitere verwandte Docker-Bereitstellungen von Front-End- und Back-End-Trennprojekten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So verwenden Sie Docker-Compsoe zum Bereitstellen eines Projekts mit Front-End- und Back-End-Trennung

<<:  So implementieren Sie mehrere Parameter in el-dropdown in ElementUI

>>:  Beispiel für die Zuweisung von Werten zu ActiveX-Steuerelementeigenschaften anhand des Parameternamens in einer Webseite

Artikel empfehlen

Kreativer Eröffnungseffekt durch die Kombination von CSS 3.0 mit Video

Ich möchte Ihnen einen kreativen Einstieg vorstel...

Untersuchung des Wertes des Positionsattributs in CSS (Zusammenfassung)

Das CSS-Positionsattribut gibt den Positionierung...

CSS-Isolationsproblem in Blazor

1. Umwelt VS 2019 16.9.0 Vorschau 1.0 .NET SDK 5....

Docker-Overlay realisiert die Container-Kommunikation zwischen Hosts

Inhaltsverzeichnis 1. Docker-Konfiguration 2. Ers...

VMware Workstation-Installation (Linux-Kernel) Kylin-Grafik-Tutorial

In diesem Artikel erfahren Sie, wie Sie Kylin auf...

Bedingte Kommentare im Internet Explorer für XHTML

<br />Bedingte Kommentare sind eine einzigar...

React-Implementierungsbeispiel mit Amap (react-amap)

Die PC-Version von React wurde für die Verwendung...

Tutorial zum Verbinden und Verwenden von MySQL 8.0 im Maven-Projekt von IDEA

Schauen wir uns zunächst meine grundlegende Entwi...