基于docker搭建nginx+nacos集群(十一)
1. nacos单机安装搜索镜像:docker search nacos第一个便是我们需要的。// 下载最新版本的Nacos镜像docker pull nacos/nacos-server按理,不写版本号,默认会来取最新的,但是本人拉取启动后进入页面,发现其是1.1.4版本的,与spring-cloud-alibaba-dependencies(2.1.0.RELEASE)不兼容,于是我重新拉取了
1. nacos单机安装
搜索镜像:docker search nacos
第一个便是我们需要的。
// 下载最新版本的Nacos镜像
docker pull nacos/nacos-server
按理,不写版本号,默认会来取最新的,但是本人拉取启动后进入页面,发现其是1.1.4版本的,与spring-cloud-alibaba-dependencies(2.1.0.RELEASE)不兼容,于是我重新拉取了新的镜像:
docker pull nacos/nacos-server:1.3.2
docker run -d -p 8848:8848 -e MODE=standalone -v /opt/nacos/logs:/home/nacos/logs -v /opt/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties --network=host --restart=always --name nacos-node nacos/nacos-server:1.3.2
-d:后台服务启动
-p:指定映射端口
-e MODE=standalone :单机模式启动(nacos默认集群启动,集群启动是无法访问页面的)
-v:指定挂载文件(不熟悉的,去学习一下docker)
–name:指定容器名
查看一下我们的容器是否启动成功
docker ps
最后测试Nacos是否启动成功
浏览器访问http://<nacos所在服务器的IP>:8848/nacos,并输入用户名和密码进行登录。(默认的用户名和密码都是nacos,远程访问的话不要忘记开启端口,可以直接关闭防火墙:systemctl stop firewalld)
2. nacos集群搭建
单机的nacos单机起来很容易,接下来我们搭建集群,搭建其集群相对比较复杂。
我们的架构图如下:
这里我们就不搭建nginx的集群了。
我们先拉取以下镜像:
nginx,mysql,nacos
2.1 docker安装mysql
安装mysql,并启动容器: docker run -p 3306:3306 --name mysql -v /usr/local/dockerData/mysql/conf:/etc/mysql/conf.d -v /usr/local/dockerData/mysql/logs:/logs -v /usr/local/dockerData/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
查看容器文件目录:ls(不支持ll)
进入容器:docker exec -it 容器ID /bin/bash
并登录mysql,密码是123456
退出mysql:exit
容器不停止推出:ctrl+P+Q
我们已经安装好了mysql,下面我们就可以初始化我们的nacos的sql脚本了。
初始化sql
sql脚本入口: https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
创建一个自己的数据库,把该脚本复制粘贴执行即可。到此,我们的数据库就安装完成了。
2.2 docker安装nacos
准备机器3台
192.168.1.160
192.168.1.161
192.168.1.162
linux设置固定ip:https://www.linuxidc.com/Linux/2017-12/149910.htm
linux虚拟机克隆:https://www.linuxidc.com/Linux/2017-06/144719.htm
2.2.1 创建Nacos的工作目录
// 每个节点都创建
mkdir -p /usr/local/docker/nacos-server
mkdir -p /usr/local/docker/nacos-server/env
mkdir -p /usr/local/docker/nacos-server/logs
mkdir -p /usr/local/docker/nacos-server/init.d
为啥要创建这些目录呢?怎么知道要创建这些目录文件?
我们学习docker可以知道文件挂载的概念,我们创建的这些目录就是为了映射容器内的相应文件。
从截图可以看到,我们进入nacos的容器后,可以看到容器内含有我们上述创建的目录,我们创建的目录就是为了映射这些文件。我们启动nacos时,指定这些映射文件,就可以读取到我们linux本机的配置而非容器内的配置。(这只是简单解释,基础差的赶紧的去学习docker了)。
2.2.2 修改我们的配置文件
custom.properties
vim /usr/local/docker/nacos-server/init.d/custom.properties
// 添加以下配置
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for prometheus
management.endpoints.web.exposure.include=*
# metrics for elastic search
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
nacos-hostname.env
vim /usr/local/docker/nacos-server/env/nacos-hostname.env
#nacos dev env
# 首选主机模式
PREFER_HOST_MODE=hostname
# 当前主机的IP
NACOS_SERVER_IP=192.168.1.160
# 集群的各个节点
NACOS_SERVERS=192.168.1.160:8848 192.168.1.161:8848 192.168.1.162:8848
# 数据库的配置
MYSQL_SERVICE_HOST=192.168.1.160
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=123456
# 从节点 这里就使用单节点测试,因此就不配置从节点
#MYSQL_SLAVE_SERVICE_HOST=xxx
#MYSQL_SLAVE_SERVICE_PORT=3306
# JVM参数 默认是2G 如果使用虚拟机,内存没有2G,就需要调整这里的参数,否则将无法启动
JVM_XMS=256m
JVM_XMX=256m
JVM_XMN=256m
将我们创建的工作目录拷贝到另外两个机子:
scp -r /usr/local/docker/nacos-server root@192.168.1.161:/usr/local/docker/nacos-server
scp -r /usr/local/docker/nacos-server root@192.168.1.162:/usr/local/docker/nacos-server
2.2.3 docker启动(3个节点)
docker run \
-p 8848:8848 \
--restart=always \
--name nacos-node \
--env-file=/usr/local/docker/nacos-server/env/nacos-hostname.env \
-v /usr/local/docker/nacos-server/logs:/home/nacos/logs \
-v /usr/local/docker/nacos-server/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-d nacos/nacos-server
分别在我们的三个机子启动:
到此,我们先理一理:
我们有三台机子,都分别启动了一个nacos容器
192.168.1.160:8848
192.168.1.161:8848
192.168.1.162:8848
这三个容器是集群模式启动,且使用的数据库都是同一个
192.168.1.160:3306(简单说明,数据库可以是任意能远程访问的数据库)
测试
访问任意节点的8848端口; 如: 192.168.1.160:8848/nacos 默认用户名和密码为: nacos/nacos ;登录之后查看节点即可看到如下效果.
特别说明:我们前面说过的,nacos默认是集群模式启动且未指定单机模式启动时是无法访问此页面的,如此,进一步说明我们的nacos集群已经搭建成功了。
**若你遇到页面无响应的情况,那就是集群未启动成功,nacos集群启动成功的条件如下:
- 集群内的三个nacos容器都成功启动
- 三个容器指定的mysql容器成功启动
- 防火墙关闭(或者开发指定端口)
异常查看
// 如果出现异常,可以在/usr/local/docker/nacos-server/logs目录下查看
tail -f /usr/local/docker/nacos-server/logs/nacos.log
2.3 docker安装Nginx并实现代理Nacos集群
2.3.1 简单安装
参考:https://blog.csdn.net/qq_40140473/article/details/98632019
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
开始搭建:
# 拉取镜像
docker pull nginx
# 简单运行
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
是的,你没有看错,一个简单的Nginx服务器就这样搭建起来了,访问http://localhost即可看到Nginx的欢迎页。需要使用它我们必须进入到容器内部进行更改配置文件操作,第一不是很方便,第二容器内没有现有的文件编辑器。所以这个时候我们需要在宿主机中集中管理Nginx的配置及日志等文件,接下来继续。
拷贝简单运行的Nginx容器中的文件到宿主机将要映射的目录地址中,我选择映射的目录在/data/nginx下(文件目录需先创建)。
Nginx配置文件:/etc/nginx/nginx.conf
Nginx默认配置文件:/etc/nginx/conf.d/default.conf
Nginx日志文件:/var/log/nginx(默认路径,可以在nginx.conf中更改)
Nginx静态文件:/usr/share/nginx/html
# 复制some-nginx容器中的静态文件
docker cp some-nginx:/usr/share/nginx/html /data/nginx/html
# 复制some-nginx容器中的配置文件
docker cp some-nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
# 复制some-nginx容器中的默认配置文件
docker cp some-nginx:/etc/nginx/conf.d/default.conf /data/nginx/conf.d/default.conf
接下来运行一个全新的Nginx容器并进行目录、端口的映射(目录映射必须和刚拷贝的地址一一对应)
docker run -it -d --name nginx --restart=on-failure:5 -p 8888:80 -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /data/nginx/log:/var/log/nginx --privileged nginx
至此安装完成,我们就可以直接在宿主机内对Nginx进行配置了,也可以查看日志等信息了
2.3.2 修改配置文件实现反向代理集群
我们先看看本地文件:
我们可以看到一行配置:
include /etc/nginx/conf.d/*.conf;
可以知道,这里包含了conf.d文件夹下的文件
我们先拷贝一份default.conf 为default.conf.cp,这是初始化文件。然后我们修改default.conf如下:
upstream nacosserver {
server 192.168.1.160:8848;
server 192.168.1.161:8848;
server 192.168.1.162:8848;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
proxy_pass http://nacosserver;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
注意:nacosserver 这个命名不能有下划线
温馨提示:对nginx不熟悉的,感觉去学了。
2.3.3 测试
完成上述配置,直接重启nginx容器。
访问:http://192.168.1.160:8888/nacos/#/login
到此,我们的基于docker搭建nginx+nacos搭建的集群,已经完成了。
2.4 使用不同端口实现naocs集群
参考:https://blog.csdn.net/weixin_48255807/article/details/111755510
2.4.1 docker 集群命令
docker run -d \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS=192.168.229.128:38848,192.168.229.128:38849,192.168.229.128.130:38850 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.229.128 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=192.168.229.128 \
-e JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m \
-p 38848:8848 \
--name nacos48 \
--restart=always \
nacos/nacos-server:1.3.2
docker run -d \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS=192.168.229.128:38848,192.168.229.128:38849,192.168.229.128.130:38850 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.229.128 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=192.168.229.128 \
-e JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m \
-p 38849:8848 \
--name nacos49 \
--restart=always \
nacos/nacos-server:1.3.2
docker run -d \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS=192.168.229.128:38848,192.168.229.128:38849,192.168.229.128.130:38850 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.229.128 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=192.168.229.128 \
-e JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m \
-p 38850:8848 \
--name nacos50 \
--restart=always \
nacos/nacos-server:1.3.2
2.4.2 命令参数说明
MODE=cluster 集群模式
NACOS_APPLICATION_PORT=8848 容器nacos端口
NACOS_SERVERS=ip:38848,ip:38849,ip:38850 集群每个nacos-server服务
SPRING_DATASOURCE_PLATFORM=mysql 独立支持mysql
NACOS_SERVER_IP=ip 可选值hostname/ip 默认ip
MYSQL_* 相关
MYSQL_SERVICE_DB_NAME=nacos_config 数据库初始化脚本数据库名称
数据库初始化脚本:https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql
JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m
-p 38850:8848 38850宿主机端口:8848 nacos访问端口
–restart=always 重启docker服务会启动该容器
nacos/nacos-server:1.3.2 nacos镜像版本
2.4.3 提示
若遇到页面无法响应的情况,要学会看naocs的日志,根据日志就能解决一切问题了。
3、搭建过程中遇到的问题
3.1 Docker容器做端口映射报错
Docker容器做端口映射报错
docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp3 (46b7917c940f7358948e55ec2df69a4dec2c6c7071b002bd374e8dbf0d40022c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 86 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
解决方法
docker服务启动时定义的自定义链DOCKER被清除
重启即可systemctl restart docker
3.2 搭建完成后,访问nginx出现404
查看一下路径:http://192.168.1.160:8888/nacos/#/login
必须加上/nacos/#/login
3.3 搭建完成后,访问nginx出现400
先查看nginx的日志:
没有发现报错。
再看三个容器的日志:
2021-09-02 16:22:43,754 INFO The host [nacos_server] is not valid
Note: further occurrences of request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
at org.apache.tomcat.util.http.parser.HttpParser
D
o
m
a
i
n
P
a
r
s
e
S
t
a
t
e
.
n
e
x
t
(
H
t
t
p
P
a
r
s
e
r
.
j
a
v
a
:
926
)
a
t
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
h
t
t
p
.
p
a
r
s
e
r
.
H
t
t
p
P
a
r
s
e
r
.
r
e
a
d
H
o
s
t
D
o
m
a
i
n
N
a
m
e
(
H
t
t
p
P
a
r
s
e
r
.
j
a
v
a
:
822
)
a
t
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
h
t
t
p
.
p
a
r
s
e
r
.
H
o
s
t
.
p
a
r
s
e
(
H
o
s
t
.
j
a
v
a
:
71
)
a
t
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
h
t
t
p
.
p
a
r
s
e
r
.
H
o
s
t
.
p
a
r
s
e
(
H
o
s
t
.
j
a
v
a
:
45
)
a
t
o
r
g
.
a
p
a
c
h
e
.
c
o
y
o
t
e
.
A
b
s
t
r
a
c
t
P
r
o
c
e
s
s
o
r
.
p
a
r
s
e
H
o
s
t
(
A
b
s
t
r
a
c
t
P
r
o
c
e
s
s
o
r
.
j
a
v
a
:
288
)
a
t
o
r
g
.
a
p
a
c
h
e
.
c
o
y
o
t
e
.
h
t
t
p
11.
H
t
t
p
11
P
r
o
c
e
s
s
o
r
.
p
r
e
p
a
r
e
R
e
q
u
e
s
t
(
H
t
t
p
11
P
r
o
c
e
s
s
o
r
.
j
a
v
a
:
809
)
a
t
o
r
g
.
a
p
a
c
h
e
.
c
o
y
o
t
e
.
h
t
t
p
11.
H
t
t
p
11
P
r
o
c
e
s
s
o
r
.
s
e
r
v
i
c
e
(
H
t
t
p
11
P
r
o
c
e
s
s
o
r
.
j
a
v
a
:
384
)
a
t
o
r
g
.
a
p
a
c
h
e
.
c
o
y
o
t
e
.
A
b
s
t
r
a
c
t
P
r
o
c
e
s
s
o
r
L
i
g
h
t
.
p
r
o
c
e
s
s
(
A
b
s
t
r
a
c
t
P
r
o
c
e
s
s
o
r
L
i
g
h
t
.
j
a
v
a
:
66
)
a
t
o
r
g
.
a
p
a
c
h
e
.
c
o
y
o
t
e
.
A
b
s
t
r
a
c
t
P
r
o
t
o
c
o
l
DomainParseState.next(HttpParser.java:926) at org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:822) at org.apache.tomcat.util.http.parser.Host.parse(Host.java:71) at org.apache.tomcat.util.http.parser.Host.parse(Host.java:45) at org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:288) at org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:809) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol
DomainParseState.next(HttpParser.java:926)atorg.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:822)atorg.apache.tomcat.util.http.parser.Host.parse(Host.java:71)atorg.apache.tomcat.util.http.parser.Host.parse(Host.java:45)atorg.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:288)atorg.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:809)atorg.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384)atorg.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)atorg.apache.coyote.AbstractProtocolConnectionHandler.process(AbstractProtocol.java:791)
at org.apache.tomcat.util.net.NioEndpoint
S
o
c
k
e
t
P
r
o
c
e
s
s
o
r
.
d
o
R
u
n
(
N
i
o
E
n
d
p
o
i
n
t
.
j
a
v
a
:
1417
)
a
t
o
r
g
.
a
p
a
c
h
e
.
t
o
m
c
a
t
.
u
t
i
l
.
n
e
t
.
S
o
c
k
e
t
P
r
o
c
e
s
s
o
r
B
a
s
e
.
r
u
n
(
S
o
c
k
e
t
P
r
o
c
e
s
s
o
r
B
a
s
e
.
j
a
v
a
:
49
)
a
t
j
a
v
a
.
u
t
i
l
.
c
o
n
c
u
r
r
e
n
t
.
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
r
u
n
W
o
r
k
e
r
(
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
j
a
v
a
:
1149
)
a
t
j
a
v
a
.
u
t
i
l
.
c
o
n
c
u
r
r
e
n
t
.
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
SocketProcessor.doRun(NioEndpoint.java:1417) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor
SocketProcessor.doRun(NioEndpoint.java:1417)atorg.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)atjava.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2021-09-02 16:27:36,397 INFO [capacityManagement] start correct usage
可以看到,我们的三个容器都报出这个错误,如果遇到这个错误,是因为我们配置nginx的时候定义如下配置信息时,nacos_server 命名含有下划线,把下划线去掉就好了。
upstream nacos_server {
server 192.168.1.160:8848;
server 192.168.1.161:8848;
server 192.168.1.162:8848;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
proxy_pass http://nacos_server;
}
三个容器都报错,从另一个角度来说,我们的集群已经搭建成功了,nginx,默认是集群访问。
3.4 nacos搭建完成后,访问无响应
排查问题:
- 防火墙未关闭(关闭防火墙即可)
- 查看naocs日志
进入容器:docker exec -it 容器id /bin/bash
查看后两百行日志:tail -n 200 /home/nacos/logs/nacos.log
从日志可以看到错误信息,有可能是mysql服务未开启,也有可能是数据库名有误。 - 若是日志无报错,那就等一等,刚启动的nacos,访问会出现网络延迟,我遇到的不是一次两次了。
4. 参考的文章
- VMware 下快速克隆出多个 Linux
系统:https://www.linuxidc.com/Linux/2017-06/144719.htm - CentOS
7虚拟机下设置固定IP详解:https://www.linuxidc.com/Linux/2017-12/149910.htm - 基于Docker搭建Nacos集群:https://lupengfei.blog.csdn.net/article/details/107414969
- 【个人笔记】基于Docker的Nacos的安装与启动:https://blog.csdn.net/qq_37964378/article/details/109411783
- Docker容器做端口映射报错:https://blog.csdn.net/qq_41545647/article/details/102679560
- 使用docker搭建Nginx服务:https://blog.csdn.net/qq_40140473/article/details/98632019
- docker搭建mysql+nacos+nginx集群:https://blog.csdn.net/weixin_48255807/article/details/111755510
更多推荐
所有评论(0)