Sign inSign up

minstonehub/nacos-server

By minstonehub

Updated over 1 year ago

nacos server 多数据源镜像

Image
1

772

minstonehub/nacos-server repository overview

获取配置文件和数据库脚本

  镜像内置了多数据库初始化脚本, 通过下面的命令将镜像中的配置文件和数据库脚本拷贝到 /path/to/nacos 目录中!

注意: 请将本文档中的 /path/to/nacos 修改为你本地持久化 nacos 数据的绝对路径

# 通过命令复制出镜像中的配置文件和数据库脚本
docker run --rm --entrypoint "" -v "/path/to/nacos:/data" minstonehub/nacos-server:2.2.3 cp -r /home/nacos/conf/ /data/
文件描述

  通过下面的命令可以查看本次部署中使用到的文件:

# 进入 /path/to/nacos/conf 目录中
cd /path/to/nacos/conf && ls
# 配置文件
application.properties
# 所有的配置项目和描述
application.properties.example
# 日志配置
nacos-logback.xml
# 内置的 derby 数据库脚本
derby-schema.sql
# MySQL 脚本
mysql-schema.sql
# 达梦脚本
nacos-dm.sql
# 翰高脚本
nacos-highgo.sql
# 人大金仓脚本
nacos-kingbase.sql
# Oracle 脚本
nacos-oracle.sql
# 神州通用脚本
nacos-oscar.sql
多数据源部署

  镜像内置多数据源插件, 部署的方法如下:

基础设施配置
  • 创建对应的数据库
  • /path/to/nacos/conf/nacos-*.sql 导入相应的数据库脚本到目标数据库中

注意: 由于人大金仓和 Oracle 默认将空字符串设置为 NULL, 导致默认的命名空间失效, 需要参考下面的配置进行修改!

人大金仓数据库配置

  当前版本 nacos 默认的命名空间为空字符串, 人大金仓数据库存储时会默认将空字符串设置为 NULL, 导致默认的命名空间失效, 处理方法如下:

  • 修改人大金仓数据库配置 kdb/data/kingbase.conf
  • 查找 ora_input_emptystr_isnull 项配置
  • 如果配置为 true 则修改为 false, 如果没有配置, 需要新增 ora_input_emptystr_isnull = false
  • 重启数据库
Oracle 数据库配置

  当前版本 nacos 默认的命名空间为空字符串, Oracle 数据库存储时会默认将空字符串设置为 NULL, 导致默认的命名空间失效, 处理方法如下:

  • 修改 Oracle 数据库配置 init<数据库实例名称>.ora
  • 查找 ora_input_emptystr_isnull 项配置
  • 如果配置为 true 则修改为 false, 如果没有配置, 需要新增 ora_input_emptystr_isnull = false
  • 重启数据库
配置和数据的挂载路径
  • 需要自定义配置时配置文件挂载路径:
    • nacos/conf/application.properties: 应用配置
    • nacos/conf/cluster.properties: 集群配置
  • 可选的挂载文件夹路径:
    • /home/nacos/data: nacos 的数据目录
    • /home/nacos/logs: nacos 的日志目录
暴露端口
端口与主端口的偏移量描述
88480主端口, 客户端、控制台及 OpenAPI 所使用的HTTP端口
98481000客户端 gRPC 请求服务端端口, 用于客户端向服务端发起连接和请求
98491001服务端 gRPC 请求服务端端口, 用于服务间同步等, 部署集群时需要开放
7848-1000Jraft 请求服务端端口, 用于处理服务端间的 Raft 相关请求, 部署集群时需要开放

注意: 使用 VIP/nginx 请求时, 需要配置成 TCP 转发, 不能配置 http2 转发, 否则连接会被 nginx 断开! 9849 和 7848 端口为服务端之间的通信端口, 请勿暴露到外部网络环境和客户端侧!

部署模式

  使用环境变量 MODE 配置, 可选配置如下:

描述
standalone单服务部署
cluster集群部署, 参考集群部署配置
集群部署配置

  集群部署可以通过指定 NACOS_SERVERS 参数来配置, 填写的集群地址需要符合如下格式

p1:port1空格ip2:port2空格ip3:port3

  也可以通过挂载配置文件 nacos/conf/cluster.properties 来指定服务, 参考如下的配置:

#it is ip
#example
192.168.16.101:8847
192.168.16.102
192.168.16.103

  使用环境变量 PREFER_HOST_MODE 来指定 nacos 注册节点时使用 IP 或者主机名, 可以在集群管理 -> 节点列表中查看, 具体值如下:

描述选项
hostname使用主机名
ip 使用 IP默认
服务端鉴权

  nacos-server 提供简单的鉴权实现, 可以通过下面的环境变量配置设置客户端鉴权:

环境变量名称描述配置
NACOS_AUTH_ENABLE是否开启权限系统默认:false
NACOS_AUTH_TOKEN_EXPIRE_SECONDS用户登陆临时 accessToken 的过期时间默认:18000
NACOS_AUTH_TOKEN默认鉴权插件用于生成用户登陆临时 accessToken 所使用的密钥填写自定义密钥, 集群部署时需要保证所有的服务具有相同的密钥
NACOS_AUTH_CACHE_ENABLE权限缓存开关, 开启后权限缓存的更新默认有 15 秒的延迟默认 : false
NACOS_AUTH_IDENTITY_KEY配置自定义身份识别的 key填写自定义身份识别, 集群部署时需要保证所有的服务具有相同的身份识别
NACOS_AUTH_IDENTITY_VALUE配置自定义身份识别的 value填写自定义身份识别, 集群部署时需要保证所有的服务具有相同的身份识别

  开启客户端鉴权后, 需要配置客户端使用 nacos 用户登录, 可以参考下面的示例:

nacos:
  config:
    server-addr: 127.0.0.1:8848
    # 使用自定义身份的 key 和 value, 或者是有权限的 nacos 账号
    username: 2222
    password: 2xxx
多数据源参数配置

  外置数据库配置的参数, 可以通过以下设置环境变量值或者修改配置文件传值:

环境变量名称描述配置
SPRING_DATASOURCE_PLATFORM数据源选择
derby: 内嵌数据库, 默认值
mysql: MySQL, nacos 内置
base: 当前适配的其他数据源, 包括达梦, 人大金仓, Oracle, 翰高, 神州通用
默认: derby
DATASOURCE_URL数据库连接使用外置数据源时必填
DATASOURCE_USER数据库用户使用外置数据源时必填
DATASOURCE_PASSWORD数据库密码使用外置数据源时必填
DATASOURCE_DRIVER数据库驱动使用外置数据源时必填
DATASOURCE_TEST数据库测试语句非必填
其他参数配置

  更多参数请参考 nacos 官网

使用 docker run
部署单节点的 nacos 并使用内嵌数据源:
docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  minstonehub/nacos-server:2.2.3
部署单节点的 nacos 并使用外置数据源:
  • 人大金仓
docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -e NACOS_AUTH_IDENTITY_KEY=2222 \
  -e NACOS_AUTH_IDENTITY_VALUE=2xxx \
  -e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
  -e SPRING_DATASOURCE_PLATFORM=base \
  -e DATASOURCE_URL="jdbc:kingbase8://IP:PORT/DATABASE?useUnicode=true&characterEncoding=utf-8" \
  -e DATASOURCE_USER=USER \
  -e DATASOURCE_PASSWORD=PASSWORD \
  -e DATASOURCE_DRIVER=com.kingbase8.Driver \
  -v /path/to/nacos/data:/home/nacos/data \
  -v /path/to/nacos/logs:/home/nacos/logs \
  minstonehub/nacos-server:2.2.3
  • MySQL
docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -e SPRING_DATASOURCE_PLATFORM=mysql \
  -e DATASOURCE_URL="jdbc:mysql://IP:PORT/DATABASE?useUnicode=true&characterEncoding=utf8&useSSL=false" \
  -e DATASOURCE_USER=USER \
  -e DATASOURCE_PASSWORD=PASSWORD \
  -e DATASOURCE_DRIVER=com.mysql.jdbc.Driver \
  -v /path/to/nacos/data:/home/nacos/data \
  -v /path/to/nacos/logs:/home/nacos/logs \
  minstonehub/nacos-server:2.2.3
  • 达梦
docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -e SPRING_DATASOURCE_PLATFORM=base \
  -e DATASOURCE_URL="jdbc:dm://IP:PORT/DATABASE" \
  -e DATASOURCE_USER=USER \
  -e DATASOURCE_PASSWORD=PASSWORD \
  -e DATASOURCE_DRIVER=dm.jdbc.driver.DmDriver \
  -v /path/to/nacos/data:/home/nacos/data \
  -v /path/to/nacos/logs:/home/nacos/logs \
  minstonehub/nacos-server:2.2.3
  • Oracle
docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -e SPRING_DATASOURCE_PLATFORM=base \
  -e DATASOURCE_URL="jdbc:oracle:thin://IP:PORT/DATABASE" \
  -e DATASOURCE_USER=USER \
  -e DATASOURCE_PASSWORD=PASSWORD \
  -e DATASOURCE_DRIVER=oracle.jdbc.OracleDriver \
  -v /path/to/nacos/data:/home/nacos/data \
  -v /path/to/nacos/logs:/home/nacos/logs \
  minstonehub/nacos-server:2.2.3
使用 docker-compose
部署单节点的 nacos 并使用内嵌数据源:
nacos:
  image: minstonehub/nacos-server:2.2.3
  container_name: nacos
  environment:
    - MODE=standalone
    - PREFER_HOST_MODE=hostname
  volumes:
    - /path/to/nacos/data:/home/nacos/data
    - /path/to/nacos/logs:/home/nacos/logs
  ports:
    - 8848:8848
    - 9848:9848
  networks:
    - myHost
部署单节点的 nacos 并使用外置数据源:
  • 人大金仓
nacos:
  image: minstonehub/nacos-server:2.2.3
  container_name: nacos
  environment:
    - MODE=standalone
    - PREFER_HOST_MODE=hostname
    - SPRING_DATASOURCE_PLATFORM=base
    - DATASOURCE_URL="jdbc:kingbase8://IP:PORT/DATABASE?useUnicode=true&characterEncoding=utf-8"
    - DATASOURCE_USER=USER
    - DATASOURCE_PASSWORD=PASSWORD
    - DATASOURCE_DRIVER=com.kingbase8.Driver
  volumes:
    - /path/to/nacos/data:/home/nacos/data
    - /path/to/nacos/logs:/home/nacos/logs
  ports:
    - 8848:8848
    - 9848:9848
  networks:
    - myHost
  • MySQL
nacos:
  image: minstonehub/nacos-server:2.2.3
  container_name: nacos
  environment:
    - MODE=standalone
    - PREFER_HOST_MODE=hostname
    - SPRING_DATASOURCE_PLATFORM=mysql
    - DATASOURCE_URL="jdbc:mysql://IP:PORT/DATABASE?useUnicode=true&characterEncoding=utf8&useSSL=false"
    - DATASOURCE_USER=USER
    - DATASOURCE_PASSWORD=PASSWORD
    - DATASOURCE_DRIVER=com.mysql.jdbc.Driver
  volumes:
    - /path/to/nacos/data:/home/nacos/data
    - /path/to/nacos/logs:/home/nacos/logs
  ports:
    - 8848:8848
    - 9848:9848
  networks:
    - myHost
  • 达梦
nacos:
  image: minstonehub/nacos-server:2.2.3
  container_name: nacos
  environment:
    - MODE=standalone
    - PREFER_HOST_MODE=hostname
    - SPRING_DATASOURCE_PLATFORM=base
    - DATASOURCE_URL="jdbc:dm://IP:PORT/DATABASE"
    - DATASOURCE_USER=USER
    - DATASOURCE_PASSWORD=PASSWORD
    - DATASOURCE_DRIVER=dm.jdbc.driver.DmDriver
  volumes:
    - /path/to/nacos/data:/home/nacos/data
    - /path/to/nacos/logs:/home/nacos/logs
  ports:
    - 8848:8848
    - 9848:9848
  networks:
    - myHost
  • Oracle
nacos:
  image: minstonehub/nacos-server:2.2.3
  container_name: nacos
  environment:
    - MODE=standalone
    - PREFER_HOST_MODE=hostname
    - SPRING_DATASOURCE_PLATFORM=base
    - DATASOURCE_URL="jdbc:oracle:thin://IP:PORT/DATABASE"
    - DATASOURCE_USER=USER
    - DATASOURCE_PASSWORD=PASSWORD
    - DATASOURCE_DRIVER=oracle.jdbc.OracleDriver
  volumes:
    - /path/to/nacos/data:/home/nacos/data
    - /path/to/nacos/logs:/home/nacos/logs
  ports:
    - 8848:8848
    - 9848:9848
  networks:
    - myHost
使用自定义配置文件

  可以通过自定义配置文件进行数据库参数配置, 或者新增其他配置:

# 单数据库
db.num=1
# 第一个数据库参数配置, 这里以外置的人大金仓数据库为例子
db.url.0=jdbc:kingbase8://IP:PORT/DATABASE?useUnicode=true&characterEncoding=utf-8
db.user.0=USER
db.password.0=PASSWORD
# 数据库通用配置
db.pool.config.driverClassName=com.kingbase8.Driver
db.pool.config.connectionTestQuery=SELECT 1

  使用 docker run 挂载配置文件:

docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -v /path/to/nacos/data:/home/nacos/data \
  -v /path/to/nacos/logs:/home/nacos/logs \
  -v /path/to/nacos/conf/application.properties:/home/nacos/conf/application.properties \
  minstonehub/nacos-server:2.2.3

  使用 docker-compose 时需要增加挂载点:

nacos:
  image: minstonehub/nacos-server:2.2.3
  container_name: nacos
  environment:
    - MODE=standalone
    - PREFER_HOST_MODE=hostname
  volumes:
    - /path/to/nacos/data:/home/nacos/data
    - /path/to/nacos/logs:/home/nacos/logs
    - /path/to/nacos/conf/application.properties:/home/nacos/conf/application.properties
  ports:
    - 8848:8848
    - 9848:9848
  networks:
    - myHost
错误排查

  启动错误时需要查看日志 /path/to/nacos/logs/config-fatal.log 进行排查!

  • 出现编码问题需要定义环境变量 JAVA_OPT="-Dfile.encoding=UTF8" 再启动 nacos

Tag summary

Content type

Image

Digest

sha256:694b110b5

Size

228.6 MB

Last updated

over 1 year ago

docker pull minstonehub/nacos-server