Nacos 2.5.0 单机部署文档(Docker + MySQL)
Nacos 2.5.0 单机部署文档(Docker + MySQL)
一、部署前准备
1.1 资源清单
| 项 | 说明 |
|---|---|
| 服务器 | 腾讯云 CVM,建议 2C4G 以上 |
| MySQL | 已有实例,5.7+ 或 8.0 |
| Docker | 已安装 docker 和 docker 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.properties 后 docker 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 |
| 客户端注册成功但拉不到配置 | 命名空间/账号/分组不一致 | 核对 namespace、group、username/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) |

浙公网安备 33010602011771号