结合你已在 Ubuntu 上通过 Podman 搭建好的 MySQL 5.7 主从复制环境,下面是在此基础上部署 Nacos 3.0 并接入该数据库的完整流程。
一、环境与版本说明
| 项目 | 你已有的环境 | Nacos 3.0 要求 |
|---|---|---|
| 操作系统 | Ubuntu | Linux/Unix/macOS |
| 容器运行时 | Podman | Podman 4.0+ |
| 数据库 | MySQL 5.7 主从 | MySQL 5.6.5+,5.7 完全兼容-21 |
| JDK | — | Nacos 3.0 内置 JDK 17,无需额外安装 |
MySQL 5.7 是 Nacos 官方支持的版本,你现有主从架构可以直接作为 Nacos 的外部数据源。
二、MySQL 数据库初始化
2.1 在主库创建 Nacos 数据库和用户
进入你已有的 mysql-master 容器:
podman exec -it mysql-master mysql -uroot -proot
CREATE DATABASE IF NOT EXISTS nacos_config
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'nacos'@'%' IDENTIFIED BY 'Nacos@2024';
GRANT ALL PRIVILEGES ON nacos_config.* TO 'nacos'@'%';
FLUSH PRIVILEGES;
2.2 提取并导入官方 SQL 脚本
Nacos 3.0 的数据库表结构与 2.x 有差异,必须使用对应版本的 mysql-schema.sql-。
# 从 Nacos 3.0 镜像中提取 SQL 脚本
podman run -d --name nacos-temp nacos/nacos-server:v3.0.3
podman cp nacos-temp:/home/nacos/conf/mysql-schema.sql ./nacos-mysql.sql
podman rm -f nacos-temp
# 导入到 MySQL 主库
podman exec -i mysql-master mysql -uroot -proot nacos_config < ./nacos-mysql.sql
2.3 验证表结构
podman exec -it mysql-master mysql -uroot -proot nacos_config -e "SHOW TABLES;"
预期应包含 config_info、users、roles、permissions 等核心表。
主从同步确认:由于你已配置 MySQL 主从复制,导入脚本后,请进入从库验证
nacos_config库和表是否已同步过来。如果未同步,请检查主从复制状态(SHOW SLAVE STATUS\G)。
三、Nacos 配置文件准备
在宿主机创建配置目录和 application.properties:
sudo mkdir -p /opt/nacos/conf /opt/nacos/logs /opt/nacos/data
sudo chown -R wt:wt /opt/nacos
确保nacos与mysql在podman内部的同一网络
创建 /opt/nacos/conf/application.properties:
# ========== MySQL 数据源配置 ==========
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql-master:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
db.user=nacos
db.password=Nacos@2024
# ========== 鉴权配置(Nacos 3.0 必须开启) ==========
nacos.core.auth.enabled=true
nacos.core.auth.admin.enabled=true
nacos.core.auth.console.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.server.identity.key=ServerIdentityKey2024
nacos.core.auth.server.identity.value=ServerIdentityValue2024
nacos.core.auth.plugin.nacos.token.secret.key=<Base64编码的密钥>
关键说明:
-
db.url.0中的mysql-master是你 Podman 网络中的容器名(前提是 Nacos 容器也加入同一网络)。 -
allowPublicKeyRetrieval=true是 MySQL 8.0 的参数,但加上后对 5.7 也无副作用。 -
Token 密钥必须是 Base64 编码且原始字符串长度 ≥ 32 位,用
openssl rand -base64 48生成。 -
鉴权三要素不能为空,否则 Nacos 启动会失败-45。
四、使用 Podman 启动 Nacos 3.0
4.1 确保 Nacos 容器与 MySQL 在同一网络
你之前为 MySQL 主从创建了 mysql-net 网络,Nacos 也加入该网络,即可通过容器名直接访问数据库。
4.2 启动 Nacos 单机模式(连接现有 MySQL 5.7)
podman run -d \
--name nacos-standalone \
--restart always \
--network mysql-net \
-p 8080:8080 \
-p 8848:8848 \
-p 9848:9848 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql-master \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=Nacos@2024 \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_TOKEN=<Base64密钥> \
-e NACOS_AUTH_IDENTITY_KEY=ServerIdentityKey2024 \
-e NACOS_AUTH_IDENTITY_VALUE=ServerIdentityValue2024 \
-e JVM_XMS=512m -e JVM_XMX=512m \
-v /opt/nacos/logs:/home/nacos/logs \
-v /opt/nacos/data:/home/nacos/data \
-v /opt/nacos/conf/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server:v3.0.3
改进版
podman run -d \
--name nacos-standalone \
--restart always \
--network mysql-net \
-p 8080:8080 \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql-master \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=Nacos@2024 \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_TOKEN=+Inm2KnoY8gV9WFoWJuXJBnUXsMlMj4pU/ZYjuJs8XzLgzskDSwQkBodLlqrMEh9 \
-e NACOS_AUTH_IDENTITY_KEY=ServerIdentityKey2024 \
-e NACOS_AUTH_IDENTITY_VALUE=ServerIdentityValue2024 \
-e JVM_XMS=512m -e JVM_XMX=512m \
-v /opt/nacos/logs:/home/nacos/logs \
-v /opt/nacos/data:/home/nacos/data \
-v /opt/nacos/conf/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server:v3.1.1
启动成功可以访问:http://<服务器IP>:8080
为什么同时用环境变量和配置文件? Nacos 3.0 支持两种方式配置数据源:环境变量(
MYSQL_SERVICE_*)和配置文件(db.url.0等)。配置文件方式优先级更高,环境变量作为兜底。生产环境推荐以配置文件为主-21。=======================================下面没试========================================
4.3 生产环境:集群模式(3 节点)
生产环境必须使用集群模式。先在每台节点创建 cluster.conf:
# /opt/nacos/conf/cluster.conf 192.168.1.10:8848 192.168.1.11:8848 192.168.1.12:8848
然后逐台启动:
podman run -d \
--name nacos-cluster \
--restart always \
--network host \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.1.10:8848 192.168.1.11:8848 192.168.1.12:8848" \
-e NACOS_SERVER_IP=192.168.1.10 \
-e JVM_XMS=2g -e JVM_XMX=2g -e JVM_XMN=1g \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql-master \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=Nacos@2024 \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_TOKEN=<Base64密钥> \
-e NACOS_AUTH_IDENTITY_KEY=ServerIdentityKey2024 \
-e NACOS_AUTH_IDENTITY_VALUE=ServerIdentityValue2024 \
-v /opt/nacos/logs:/home/nacos/logs \
-v /opt/nacos/data:/home/nacos/data \
-v /opt/nacos/conf/application.properties:/home/nacos/conf/application.properties \
-v /opt/nacos/conf/cluster.conf:/home/nacos/conf/cluster.conf \
nacos/nacos-server:v3.0.3
集群模式需要额外开放 9848(客户端 gRPC)、9849(服务端 gRPC,仅集群内部)、7848(JRaft,仅集群内部)端口。
五、验证与访问
5.1 检查容器日志
podman logs -f nacos-standalone
# 看到 "Nacos started successfully" 即启动成功
5.2 健康检查
curl http://localhost:8848/nacos/actuator/health
5.3 访问控制台
Nacos 3.0 的控制台端口是 8080,直接访问:
http://<服务器IP>:8080
首次登录用户名和密码均为 nacos,登录后系统会提示修改密码。
六、生产环境注意事项
6.1 数据库高可用
你已有的 MySQL 5.7 主从架构为 Nacos 提供了数据层的高可用基础。Nacos 的所有配置数据、用户权限、审计日志都存储在 MySQL 中,主从复制确保了数据库层面的容灾能力。
6.2 网络隔离与端口收敛
Nacos 是内部微服务组件,严禁暴露到公网。建议仅允许可信网段访问 8848、9848、9849 和控制台 8080 端口-。
6.3 鉴权安全
Nacos 3.0 控制台默认开启访问鉴权,鉴权相关配置必须进行配置-45。⚠️ 重要安全提示:Nacos 3.0.0 ~ 3.2.3 存在一个鉴权作用域错配漏洞,攻击者无需任何凭证即可在 8848 端口创建管理员账户,等同接管整个服务端。请务必升级到 3.2.4 或更高版本。
6.4 systemd 托管
podman generate systemd --name nacos-standalone --files --new
mv container-nacos-standalone.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable container-nacos-standalone.service
systemctl start container-nacos-standalone.service
七、常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
启动失败提示 Failed to initialize database |
数据库连接信息错误或未初始化 | 检查 MYSQL_SERVICE_* 环境变量和 mysql-schema.sql 是否导入-12 |
Unknown database 'nacos_config' |
数据库未创建 | 在主库执行 CREATE DATABASE nacos_config |
Access denied for user |
用户权限或密码错误 | 检查 nacos 用户是否创建,密码是否一致 |
| 连接超时 | Nacos 容器与 MySQL 不在同一网络 | 确认 Nacos 容器加入了 mysql-net 网络 |
| 控制台无法访问 | 端口错误 | Nacos 3.0 控制台端口是 8080,不是 8848 |
| 集群节点无法互相发现 | cluster.conf 配置不一致 |
检查每台节点的 cluster.conf 内容是否相同 |
总结:你现有的 MySQL 5.7 主从环境完全满足 Nacos 3.0 的数据持久化需求。核心步骤是 初始化 nacos_config 库 → 编写 application.properties → 通过 Podman 启动 Nacos 并加入 mysql-net 网络。生产环境务必使用 3 节点集群 + 强鉴权 + 网络隔离,并将版本升级到 3.2.4+ 以规避已知安全漏洞。
浙公网安备 33010602011771号