节点规划
主机名 | IP 地址 | 端口号 |
---|---|---|
nacos-nginx | 172.16.1.180 | 8845 |
nacos-server01 | 172.16.1.180 | 8846 |
nacos-server02 | 172.16.1.180 | 8847 |
nacos-server03 | 172.16.1.180 | 8848 |
nacos-mysql | 172.16.1.180 | 3306 |
拉取 docker 镜像
镜像列表
镜像名 | 版本号 |
---|---|
nginx | 1.21.1 |
nacos/nacos-server | 2.0.2 |
mysql | 5.7.33 |
拉取命令
拉取 Nginx 镜像
$ docker pull nginx:1.21.1
拉取 Nacos 镜像
$ docker pull nacos/nacos-server:2.0.2
拉取 MySQL 镜像
$ docker pull mysql:5.7.33
部署容器
部署 MySQL
如果已经安装过 MySQL 或拥有其他可用的 MySQL,则跳过此步骤。
编排 MySQL
version: "3"
services:
mysql:
container_name: MySQL5.7.33
image: mysql:5.7.33
environment:
- MYSQL_ROOT_PASSWORD=ok
volumes:
- /Users/shengyao/worker/environment/mysql/conf:/etc/mysql
- /Users/shengyao/worker/environment/mysql/logs:/var/log/mysql
- /Users/shengyao/worker/environment/mysql/data:/var/lib/mysql
restart: on-failure
ports:
- 3306:3306
privileged: true
stdin_open: true
tty: true
重点说明:
环境变量 - 编排中的
MYSQL_ROOT_PASSWORD
环境变量指定了 MySQL 的 root 账户密码。数据卷挂载 - 编排中需要挂载三部分内容,分别为:MySQL 配置、MySQL 日志、MySQL 数据文件。
重启策略 - 编排中设置的策略为
报错后重启
。暴露端口 - ports 中的参数,左边为容器外部端口,即宿主机端口,右边为容器内部端口。
privileged - 为 true,则让容器内的 root 账户拥有真正的 root 权限。
stdin_open 和 tty - 为 true,则允许交互输入输出。
使用编排部署 MySQL
$ docker-compose -f <编排文件路径> up -d
初始化 Nacos 数据库
创建数据库
create database nacos-db;
如果有 Navicat 、SQLYog 等图形化管理器,也可以使用其进行手工创建。
nacos-db 表初始化
初始化 sql 语句可以从 GitHub 上下载
$ curl https://raw.githubusercontent.com/alibaba/nacos/2.0.2/distribution/conf/nacos-mysql.sql > nacos-mysql.sql
也可以复制以下脚本执行
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info */
/******************************************/
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(255) DEFAULT NULL,
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_aggr */
/******************************************/
CREATE TABLE `config_info_aggr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(255) NOT NULL COMMENT 'group_id',
`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
`content` longtext NOT NULL COMMENT '内容',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_beta */
/******************************************/
CREATE TABLE `config_info_beta` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_tag */
/******************************************/
CREATE TABLE `config_info_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_tags_relation */
/******************************************/
CREATE TABLE `config_tags_relation` (
`id` bigint(20) NOT NULL COMMENT 'id',
`tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
`tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`nid` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`nid`),
UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = group_capacity */
/******************************************/
CREATE TABLE `group_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(64) unsigned NOT NULL,
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data_id` varchar(255) NOT NULL,
`group_id` varchar(128) NOT NULL,
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL,
`md5` varchar(32) DEFAULT NULL,
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`src_user` text,
`src_ip` varchar(50) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
PRIMARY KEY (`nid`),
KEY `idx_gmt_create` (`gmt_create`),
KEY `idx_gmt_modified` (`gmt_modified`),
KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = tenant_capacity */
/******************************************/
CREATE TABLE `tenant_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
CREATE TABLE `tenant_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`kp` varchar(128) NOT NULL COMMENT 'kp',
`tenant_id` varchar(128) default '' COMMENT 'tenant_id',
`tenant_name` varchar(128) default '' COMMENT 'tenant_name',
`tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
`create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
`gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
`gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
CREATE TABLE `users` (
`username` varchar(50) NOT NULL PRIMARY KEY,
`password` varchar(500) NOT NULL,
`enabled` boolean NOT NULL
);
CREATE TABLE `roles` (
`username` varchar(50) NOT NULL,
`role` varchar(50) NOT NULL,
UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
`role` varchar(50) NOT NULL,
`resource` varchar(255) NOT NULL,
`action` varchar(8) NOT NULL,
UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
部署 Nacos 集群
编排 Nacos 集群
version: "3"
services:
nacos1:
container_name: nacos-server01
hostname: nacos-server01
image: nacos/nacos-server:2.0.2
environment:
- MODE=cluster
- PREFER_HOST_MODE=hostname
- NACOS_SERVERS=nacos-server01:8848 nacos-server02:8848 nacos-server03:8848
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=172.16.1.180
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=ok
- MYSQL_SERVICE_DB_NAME=nacos-db
- JVM_XMS=128m
- JVM_XMX=128m
- JVM_XMN=128m
volumes:
- /Users/shengyao/worker/environment/nacos/cluster-logs/nacos-server01:/home/nacos/logs
- /Users/shengyao/worker/environment/nacos/init.d:/home/nacos/init.d
ports:
- 8846:8848
- 9555:9555
restart: on-failure
nacos2:
container_name: nacos-server02
hostname: nacos-server02
image: nacos/nacos-server:2.0.2
environment:
- MODE=cluster
- PREFER_HOST_MODE=hostname
- NACOS_SERVERS=nacos-server01:8848 nacos-server02:8848 nacos-server03:8848
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=172.16.1.180
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=ok
- MYSQL_SERVICE_DB_NAME=nacos-db
- JVM_XMS=128m
- JVM_XMX=128m
- JVM_XMN=128m
volumes:
- /Users/shengyao/worker/environment/nacos/cluster-logs/nacos-server02:/home/nacos/logs
- /Users/shengyao/worker/environment/nacos/init.d:/home/nacos/init.d
ports:
- 8847:8848
restart: on-failure
nacos3:
container_name: nacos-server03
hostname: nacos-server03
image: nacos/nacos-server:2.0.2
environment:
- MODE=cluster
- PREFER_HOST_MODE=hostname
- NACOS_SERVERS=nacos-server01:8848 nacos-server02:8848 nacos-server03:8848
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=172.16.1.180
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=ok
- MYSQL_SERVICE_DB_NAME=nacos-db
- JVM_XMS=128m
- JVM_XMX=128m
- JVM_XMN=128m
volumes:
- /Users/shengyao/worker/environment/nacos/cluster-logs/nacos-server03:/home/nacos/logs
- /Users/shengyao/worker/environment/nacos/init.d:/home/nacos/init.d
ports:
- 8848:8848
restart: on-failure
重要说明:
环境变量说明
MODE=cluster
运行模式,默认为单机模式,cluster 为集群模式。
PREFER_HOST_MODE=hostname
节点主机访问模式,hostname 为使用主机名访问。
NACOS_SERVERS=nacos-server01:8848 nacos-server02:8848 nacos-server03:8848
Nacos 服务节点列表,本次搭建的是三节点集群。格式:主机名:端口号 或 IP:端口号。
SPRING_DATASOURCE_PLATFORM=mysql
数据源平台,默认为空。mysql 为使用 MySQL 作为数据源。
MYSQL_SERVICE_HOST=172.16.1.180
MySQL 的主机地址,注意不能使用 127.0.0.1,127.0.0.1 在部署 Docker 时指的是容器内的本地地址,而不是宿主机的本地地址。如果部署 MySQL 时,配置了 hostname ,也可以使用 hostname 作为地址。
MYSQL_SERVICE_PORT=3306
MySQL 的端口号。
MYSQL_SERVICE_USER=root
MySQL 的用户名。
MYSQL_SERVICE_PASSWORD=ok
MySQL 的账户密码。
MYSQL_SERVICE_DB_NAME=nacos-db
要连接的数据库名称。
JVM_XMS=128m
JVM_XMX=128m
JVM_XMN=128m
以上三个环境变量配置的是 Nacos 的 JVM,默认情况下 Nacos 分配的内存为 2G,如果是单机多容器部署,注意要加上此环境变量的配置,否则会一直重启。如果是多机单容器部署则不需要。
数据卷挂载说明
此次编排配置了两个挂载,分别为 Nacos 节点日志、Nacos 节点配置。其中节点日志为每个节点单独挂载了一个目录,节点配置则是三个节点共用一个配置,以保证三个节点的配置统一。
如果是多机环境,则每个节点的挂载各自独立,但如果修改其中一个主机的 nacos 节点配置,则最好将其他剩余节点的配置也统一修改。
使用编排部署 Nacos 集群
$ docker-compose -f <编排文件路径> up -d
部署结束后,使用 docker logs 分别查看容器运行日志。
$ docker logs -f <容器ID>
如果返回如下内容,则说明此节点启动成功。
,--.
,--.'|
,--,: : | Nacos 2.0.2
,`--.'`| ' : ,---. Running in cluster mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 1
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://nacos-server01:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
2021-07-27 11:21:15,725 INFO The server IP list of Nacos is [nacos-server01:8848, nacos-server02:8848, nacos-server03:8848]
2021-07-27 11:21:16,738 INFO Nacos is starting...
2021-07-27 11:21:16,738 INFO Nacos is starting...
2021-07-27 11:22:06,052 INFO Nacos started successfully in cluster mode. use external storage
打开浏览器,分别输入:http://
、http://
、http://
,如果显示如下页面,则说明集群部署并启动成功。
输入默认账户和密码,即:nacos
,用户名和密码一样。进入到管理后台。进入到集群管理 -> 节点列表
,页面显示如下:
从页面中我们可以看到,三个节点的状态均为 UP(在线)。至此 Nacos 集群就搭建完毕了,接下来我们通过 Nginx 来为 Nacos 增加一个统一的访问入口,以便于后续的管理和维护。
我们可以在其中一个 Nacos 节点上创建一个配置文件,然后通过其他节点访问,如果都可以看到相同的配置文件,则说明集群可用。另外,创建完配置文件后,查看 MySQL 的 nacos-db 数据中的config_info
表,如果可以看到我们新建的配置,则说明 nacos 可以使用 MySQL 进行持久化。
部署 Nginx
拷贝 Nginx 配置
Nginx 的部署与其他服务部署略有不同,我们需要先启动一个 Nginx 容器实例,然后从容器事例中拷贝出 Nginx 的配置文件到指定目录,之后我们将复制出的配置文件与 Nginx 容器的数据卷进行挂载,从而达到可以在容器外部修改配置文件的目的。这么做是因为,如果直接挂载,那么容器实例中的的目录将会被外部的挂载所覆盖。这是官方 Nginx 镜像的一个小缺陷,注意一下就行了。
-
运行 Nginx 容器
$ docker run --name temp-nginx -p 8080:8080 -d nginx:1.21.1
-
在宿主机创建 Nginx 的挂载目录
# 实际创建时以自己的机器环境为准 $ mkdir -p <宿主机挂载目录>
-
拷贝容器中的配置到宿主机的挂载目录
$ docker cp
:/etc/nginx/ <宿主机挂载目录> -
停止并删除容器实例
$ docker stop
$ docker rm
修改 Nginx 配置文件
位置:<宿主机挂载目录>/conf.d/default.conf
配置文件主要修改两个部分,一个是新增 upstream,通过负载均衡来配置 Nacos 服务的节点;第二个是修改 server 下的 location,在其中添加反向代理配置。另外,如果你的 Nginx 没有配置过 server_name,那么还需要修改 server 下的 server_name 配置。
完整配置文件如下:
# 添加负载均衡配置
upstream nacos {
server nacos-server01:8846 weight=1 max_fails=2 fail_timeout=10s;
server nacos-server01:8847 weight=1 max_fails=2 fail_timeout=10s;
server nacos-server01:8848 weight=1 max_fails=2 fail_timeout=10s;
}
server {
listen 80;
listen [::]:80;
# 修改为宿主机的 IP地址
server_name 172.16.1.180;
#access_log /var/log/nginx/host.access.log main;
location / {
# 添加代理配置
proxy_pass http://nacos;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
#root /usr/share/nginx/html;
#index index.html index.htm;
}
#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;
#}
}
编排 Nginx
version: "3"
services:
nacos-nginx:
container_name: nacos-nginx
image: nginx:1.21.1
volumes:
- /Users/shengyao/worker/environment/nacos-nginx/conf:/etc/nginx
- /Users/shengyao/worker/environment/nacos-nginx/www:/usr/share/nginx
ports:
- 8845:80
restart: on-failure
重要说明:
数据卷挂载 - 本例中分别将 Nginx 的配置文件目录和静态文件资源目录挂载到了宿主机,如果不需要提供静态资源访问,可以不用挂载此目录。
端口 - 本例中,为了避免与其他 Nginx 端口冲突,我们暴露的端口为 8845,其中 80 端口为容器内部端口。
使用编排部署 Nginx
$ docker-compose -f <编排文件路径> up -d
访问测试
打来浏览器输入:http://
,如果显示如下界面,则说明部署成功。
部署成功后,多刷新几次页面,如果每次显示的都是同一个页面则说明 Nginx 可以正常提供负载。因为我们在配置 Nginx 时,使用的是轮询负载策略。