Loading

Nacos 2.5.0 单机部署文档(Docker + MySQL)

Nacos 2.5.0 单机部署文档(Docker + MySQL)


一、部署前准备

1.1 资源清单

说明
服务器 腾讯云 CVM,建议 2C4G 以上
MySQL 已有实例,5.7+ 或 8.0
Docker 已安装 dockerdocker compose
网络 Nacos 服务器与 MySQL 网络互通

1.2 腾讯云安全组放行端口

端口 协议 来源 用途
8848 TCP 客户端 IP / VPC 内网段 控制台 + HTTP API
9848 TCP 客户端 IP / VPC 内网段 客户端 gRPC(必开)
9849 TCP 仅内网 服务端 gRPC(可选)
3306 TCP Nacos 服务器 IP MySQL(仅当 MySQL 在另一台机器)
22 TCP 运维公网 IP SSH

严禁 将 8848/9848 直接对 0.0.0.0/0 开放。Nacos 历史漏洞多发,公网直暴露风险极高。


二、初始化 MySQL

2.1 创建数据库

CREATE DATABASE nacos_config DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2.2 导入表结构

下载 2.5.0 对应 的 SQL 脚本:

https://github.com/alibaba/nacos/blob/2.5.0/distribution/conf/mysql-schema.sql

执行:

mysql -h <MYSQL_HOST> -P 3306 -u root -p nacos_config < mysql-schema.sql

2.3 创建专用账号

CREATE USER 'nacos'@'%' IDENTIFIED BY 'Nacos@123456';
GRANT ALL PRIVILEGES ON nacos_config.* TO 'nacos'@'%';
FLUSH PRIVILEGES;

2.4 【2.5.0 必做】补建 config_info_beta 兼容表

2.5.0 重构了灰度配置功能,但代码中仍有路径会查询 config_info_beta 表,若不补建会持续刷错误日志:

USE nacos_config;

CREATE TABLE IF NOT EXISTS `config_info_beta` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) DEFAULT NULL,
  `app_name` varchar(128) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT 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,
  `tenant_id` varchar(128) DEFAULT '',
  `encrypted_data_key` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='config_info_beta';

三、宿主机目录与配置文件

3.1 创建目录

mkdir -p /data/nacos/conf
mkdir -p /data/nacos/logs
mkdir -p /data/nacos/data

3.2 配置文件 application.properties

路径:/data/nacos/conf/application.properties

#*************** Spring Boot Related Configurations ***************#
server.servlet.contextPath=/nacos
server.port=8848

#*************** Config Module Related Configurations ***************#
spring.sql.init.platform=mysql

db.num=1
db.url.0=jdbc:mysql://<MYSQL_HOST>:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=nacos
db.password.0=Nacos@123456

db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

#*************** Naming Module Related Configurations ***************#
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000

#*************** Metrics Related Configurations ***************#
management.endpoints.web.exposure.include=*

#*************** Access Log Related Configurations ***************#
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=file:.

#*************** Auth Related Configurations ***************#
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.system.type=nacos

# JWT 签名密钥(必须自定义,长度 ≥ 32 字节 Base64)
nacos.core.auth.plugin.nacos.token.secret.key=<你生成的随机串>
nacos.core.auth.plugin.nacos.token.expire.seconds=18000

# 服务端内部 identity(必须自定义,单机也要配,否则存在 CVE 级别越权漏洞)
nacos.core.auth.server.identity.key=X-Internal-Auth
nacos.core.auth.server.identity.value=nacos_<你生成的随机串>

#*************** Istio Related Configurations ***************#
nacos.istio.mcp.server.enabled=false

3.3 关键参数说明

参数 说明
db.url.0 <MYSQL_HOST> 替换为实际 MySQL 地址
nacos.core.auth.plugin.nacos.token.secret.key JWT 签名密钥,生产环境必须重新生成,命令:openssl rand -base64 32
nacos.core.auth.plugin.nacos.token.expire.seconds Token 有效期(秒),默认 18000 = 5 小时
nacos.core.auth.server.identity.key/value 服务端内部 API 共享密钥,必须改成不可猜测值,单机也要配。value生成命令:openssl rand -hex 16

四、容器部署

4.1 docker run

docker run -d \
  --name nacos \
  --restart=always \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -e TZ=Asia/Shanghai \
  -v /data/nacos/conf/application.properties:/home/nacos/conf/application.properties \
  -v /data/nacos/logs:/home/nacos/logs \
  -v /data/nacos/data:/home/nacos/data \
  nacos/nacos-server:v2.5.0

五、验证

5.1 查看启动日志

docker logs -f nacos

关键成功标志:

Nacos started successfully in stand alone mode. use external storage

❌ 不应出现:

错误日志 原因
use embedded storage MySQL 配置没生效,检查 application.properties 挂载
Table 'nacos_config.config_info_beta' doesn't exist 步骤 2.4 未执行
token.secret.key must be set secret.key 缺失或长度不够
Communications link failure 网络不通或安全组未放行 3306

5.2 控制台访问

  • 地址:http://<服务器IP>:8848/nacos
  • 默认账号:nacos / nacos
  • 登录后立即修改密码

5.3 端口连通性测试(在客户端机器执行)

# Linux
nc -zv <NACOS_IP> 8848
nc -zv <NACOS_IP> 9848

# Windows PowerShell
Test-NetConnection <NACOS_IP> -Port 8848
Test-NetConnection <NACOS_IP> -Port 9848

两个端口都通才算部署成功。


六、常用运维命令

操作 命令
启动 docker start nacos
停止 docker stop nacos
重启 docker restart nacos
查日志 docker logs -f nacos
进入容器 docker exec -it nacos bash
修改配置生效 conf/application.propertiesdocker restart nacos

七、安全 Checklist(上线前必查)


八、常见问题速查

现象 原因 解决
控制台能打开,客户端报 Client not connected 9848 端口未放行 安全组放行 9848
启动日志 use embedded storage MySQL 配置文件没挂载到容器 检查 -v 路径,确认容器内 /home/nacos/conf/application.properties 是你的配置
启动报 secret.key must be set 密钥不合规 openssl rand -base64 32 重新生成
MySQL 8 报时区错误 URL 缺时区参数 serverTimezone=Asia/Shanghai
客户端注册成功但拉不到配置 命名空间/账号/分组不一致 核对 namespacegroupusername/password
日志一直刷 config_info_beta 不存在 2.5.0 schema 缺表 执行步骤 2.4

附录 A:目录结构

/data/nacos/
├── docker-compose.yml
├── conf/
│   └── application.properties     # 主配置文件(挂载到容器)
├── data/                          # 持久化数据
└── logs/                          # 运行日志

附录 B:版本信息

组件 版本
Nacos Server v2.5.0
镜像 nacos/nacos-server:v2.5.0
MySQL Schema https://github.com/alibaba/nacos/blob/2.5.0/distribution/conf/mysql-schema.sql
客户端最低版本 nacos-client 2.x(建议 ≥ 2.3.0)
posted @ 2026-05-20 14:06  多久会在  阅读(52)  评论(0)    收藏  举报