之前已经编写过有关 nacos 的单机部署和集群部署,是直接在 CentOS7 上直接部署的,之前的博客链接如下:
单机版 nacos 部署:https://www.cnblogs.com/studyjobs/p/17380184.html
集群版 nacos 部署:https://www.cnblogs.com/studyjobs/p/17383397.html
为了进一步简化部署,本篇博客介绍如何采用 docker-compose 进行部署,与之前博客重复的细节,这里就不再赘述。
我的 CentOS7 虚拟机 ip 地址是 192.168.136.128,已经安装好了 docker 和 docker-compose
nacos 默认使用自带的 derby 数据库(类似于 sqlite 的文件型数据库),在开发环境部署单机版 nacos ,可以直接使用。
在虚拟机上创建 /app/nacos-single1 目录,里面放置一个 logs 目录和 docker-compose.yml
编写 docker-compose.yml 文件内容如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
version: '3.5' services: nacos: image: nacos/nacos-server:v2.2.2 container_name: nacos restart: always ports: # web 界面访问端口 - 8848:8848 # 程序使用 grpc 连接的端口 - 9848:9848 environment: - MODE=standalone volumes: - /app/nacos-single1/logs:/home/nacos/logs |
然后运行 docker-compose up -d 命令启动服务,访问 http://192.168.136.128:8848/nacos 即可
下面列出使用 mysql 数据库的 docker-compose.yml 内容,我的虚拟机上已经安装过了 mysql。首先需要在 mysql 中随便创建一个数据库(比如数据库名叫做 nacos),然后运行 nacos 提供的 sql 脚本初始化数据库,具体细节可参考上面贴出来的之前博客内容。
在虚拟机上创建 /app/nacos-single2 目录,里面放置一个 logs 目录和 docker-compose.yml
编写 docker-compose.yml 文件内容如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
version: '3.5' services: nacos: image: nacos/nacos-server:v2.2.2 container_name: nacos restart: always ports: # web 界面访问端口 - 8848:8848 # 程序使用 grpc 连接的端口 - 9848:9848 environment: - MODE=standalone # 使用 mysql 作为数据库 - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=192.168.136.128 - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=root # 设置连接 mysql 的连接参数 - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai" volumes: - /app/nacos-single2/logs:/home/nacos/logs |
然后运行 docker-compose up -d 命令启动服务,访问 http://192.168.136.128:8848/nacos 即可
集群版部署主要满足以下几个条件即可:(注意:nacos 集群至少需要 3 个节点)
在虚拟机上创建 /app/nacos-cluster 目录,里面放置 3 个 logs 目录、nginx.conf、docker-compose.yml
编写 docker-compose.yml 文件内容如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
version: '3.5' services: nacos1: image: nacos/nacos-server:v2.2.2 container_name: nacos1 hostname: nacos1 restart: always ports: # web 界面访问端口 - 8841:8848 # 程序使用 grpc 连接的端口 - 9841:9848 environment: - MODE=cluster - PREFER_HOST_MODE=hostname - NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848 - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=192.168.136.128 - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=root - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai" volumes: - /app/nacos-cluster/logs1:/home/nacos/logs networks: - nacos_net nacos2: image: nacos/nacos-server:v2.2.2 container_name: nacos2 hostname: nacos2 restart: always ports: # web 界面访问端口 - 8842:8848 # 程序使用 grpc 连接的端口 - 9842:9848 environment: - MODE=cluster - PREFER_HOST_MODE=hostname - NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848 - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=192.168.136.128 - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=root - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai" volumes: - /app/nacos-cluster/logs3:/home/nacos/logs networks: - nacos_net nacos3: image: nacos/nacos-server:v2.2.2 container_name: nacos3 hostname: nacos3 restart: always ports: # web 界面访问端口 - 8843:8848 # 程序使用 grpc 连接的端口 - 9843:9848 environment: - MODE=cluster - PREFER_HOST_MODE=hostname - NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848 - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=192.168.136.128 - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=root - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai" volumes: - /app/nacos-cluster/logs3:/home/nacos/logs networks: - nacos_net nginx: image: nginx container_name: nginx privileged: true restart: always volumes: - /app/nacos-cluster/nginx.conf:/etc/nginx/nginx.conf ports: - 80:80 - 1080:1080 networks: - nacos_net depends_on: - nacos1 - nacos2 - nacos3 # 网络配置 networks: nacos_net: driver: bridge |
下面列出 nginx 的配置文件内容,由于 nginx 跟 3 个 nacos 节点在相同的网络 nacos_net,因此可以直接通过服务名称访问 3 个 nacos 节点,并直接对 3 个容器内部的 8848 和 9848 端口进行转发,其中 8848 采用 http 转发,9848 采用 tcp 转发,nginx 在 1.19 版本开始支持 tcp 的转发。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } # 配置 http 服务 http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; upstream nacos-cluster { server nacos1:8848; server nacos2:8848; server nacos3:8848; } server { listen 80; server_name localhost; location / { proxy_pass http://nacos-cluster; } } } # 配置 tcp 服务 stream { upstream grpc-cluster { server nacos1:9848; server nacos2:9848; server nacos3:9848; } server { listen 1080; proxy_pass grpc-cluster; } } |
然后运行 docker-compose up -d 命令启动服务,由于我们既把每个节点的端口都映射出来,也采用 nginx 对容器内部的端口进行了转发,因此以下 4 个地址都可以访问 nacos 网站:
http://192.168.136.128/nacoshttp://192.168.136.128:8841/nacoshttp://192.168.136.128:8842/nacoshttp://192.168.136.128:8843/nacos
默认情况下,nacos 不需要用户名和密码验证,以上部署后的成果,直接访问就会进入 nacos 配置界面中。
对于 nacos 来说,一般情况下都是在内网使用,所以可以不启用账号密码验证。
如果想要启动账号密码访问,只需要在上面的 docker-compose.yml 中的 environment 下面增加以下环境变量配置即可:
|
1 2 3 4 5 6 7 8 9 10 |
# 设置以下环境变量时,启用账号密码登录(默认的账号和密码都是 nacos) environment: # 启用账号密码验证 - NACOS_AUTH_ENABLE=true # 随便使用一个32个字符组成的字符串,生成 base64 字符串,填写到这里即可 - NACOS_AUTH_TOKEN=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg= # 随便填写 - NACOS_AUTH_IDENTITY_KEY=JobsKey # 随便填写 - NACOS_AUTH_IDENTITY_VALUE=JobsValue |
对于 nacos 集群来说,以上环境变量的配置内容必须保持一致。
OK,以上就是采用 docker-compose 部署单机 nacos 和 集群 nacos 的全部内容,有关 java 的连接操作,可以参考我之前发布的博客。
from:https://www.cnblogs.com/studyjobs/p/18014237