Nacos单机部署入门:避坑指南与实战
第一次搭Nacos踩了5个坑:单机部署从入门到第一个服务注册
下载、解压、启动、报错,循环了4次
第一次搭 Nacos 是在一台刚装好的 CentOS 上。
wget https://github.com/alibaba/nacos/releases/download/2.3.2/nacos-server-2.3.2.zip
unzip nacos-server-2.3.2.zip
cd nacos/bin
./startup.sh -m standalone
然后盯着终端看了 10 秒。没有报错。访问 http://localhost:8848/nacos——打不开。
查了 20 分钟,发现 JDK 版本是 1.8.0_144,而 Nacos 2.3 需要 1.8.0_292 以上。
从那以后我每次搭 Nacos 都走一套固定流程。这篇文章就是把这套流程写出来,附上每个环节最常踩的坑和解决办法。
第一步:环境检查
启动前检查三个东西:JDK 版本、端口占用、可用内存。三个有一个不对,Nacos 都起不来。
JDK 版本对照
| Nacos 版本 | 最低 JDK | 推荐 JDK |
|---|---|---|
| 1.x | 1.8.0_60 | 1.8.0_292+ |
| 2.0 ~ 2.2 | 1.8.0_292 | 11 |
| 2.3+ | 1.8.0_292 | 17 |
# 确认 JDK 版本
java -version
# 如果不是高版本,安装 OpenJDK 17
# Ubuntu
sudo apt install openjdk-17-jdk -y
# CentOS
sudo yum install java-17-openjdk-devel -y
# Windows
# 去 https://adoptium.net 下载 msi 安装包
Nacos 需要三个端口
8848 → HTTP 主端口(控制台 + OpenAPI)
9848 → gRPC 客户端通信(2.x 新增)
9849 → gRPC 集群节点间通信(2.x 新增)
# 检查端口是否被占用
# Linux/Mac
lsof -i :8848
lsof -i :9848
# Windows PowerShell
netstat -ano | findstr "8848"
坑1:很多人只检查 8848,忘了 9848。 8848 空闲但 9848 被占,Nacos 能启动但 gRPC 通道不通,2.x 客户端连不上。
第二步:下载 & 目录结构
# 最新稳定版(以 2.3.2 为例)
wget https://github.com/alibaba/nacos/releases/download/2.3.2/nacos-server-2.3.2.zip
# 解压
unzip nacos-server-2.3.2.zip -d ./nacos
# 目录结构
cd nacos
tree -L 2
解压后的关键目录:
nacos/
├── bin/
│ ├── startup.sh # Linux/Mac 启动脚本
│ ├── startup.cmd # Windows 启动脚本
│ └── shutdown.sh # 停止脚本
├── conf/
│ ├── application.properties # 核心配置文件
│ ├── cluster.conf.example # 集群配置示例
│ └── nacos-logback.xml # 日志配置
├── target/
│ └── nacos-server.jar # 主 jar 包
└── logs/ # 启动后生成
第三步:启动 standalone 模式
Linux / Mac
# standalone 模式启动(不分集群,单机运行)
cd nacos/bin
./startup.sh -m standalone
# 输出大致是这样的:
# nacos is starting with standalone
# nacos is starting,you can check the /opt/nacos/logs/start.out
坑2:-m standalone 不写的话,默认以集群模式启动。 单机跑集群模式会报错,因为找不到集群其他节点。
Windows
cd nacos\bin
startup.cmd -m standalone
确认启动成功
# 方法1:看日志
tail -f nacos/logs/start.out
# 看到这一行就是启动成功了:
# Nacos started successfully in stand alone mode.
# 方法2:看端口
netstat -tlnp | grep 8848
# 方法3:直接访问
curl http://127.0.0.1:8848/nacos/v1/console/health/readiness
# 返回 ok
启动流程:Shell 脚本 → JVM 参数设置 → Spring Boot 初始化 → 内嵌 Derby 初始化 → 双端口监听。
第四步:访问控制台 & 注册第一个服务
打开浏览器访问 http://localhost:8848/nacos:
- 默认账号:
nacos - 默认密码:
nacos
坑3:2.2+ 版本首次登录必须改密码。 用默认密码登录后会出现修改密码的页面。记得把这个密码记下来。
用 Spring Boot 注册一个服务
<!-- pom.xml -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2023.0.1.0</version>
</dependency>
# application.yml
spring:
application:
name: demo-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
@SpringBootApplication
@EnableDiscoveryClient
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
启动后,回到 Nacos 控制台 → 服务管理 → 服务列表,看到 demo-service 就说明部署成功了。
第五步:Derby vs MySQL —— 别在生产环境用 Derby
内置 Derby 的问题
Nacos 默认使用内嵌的 Apache Derby 数据库。它能用,但有三个问题:
- 数据无法共享。集群模式下每个节点有自己的 Derby 实例,数据不同步。
- 不支持高并发写入。Derby 是单文件嵌入式数据库,写操作会锁整个库。
- 不支持运维操作。没法做主从、没法做备份、没法用 Navicat 看数据。
坑4:很多团队 standalone 模式用 Derby 跑着跑着就开始丢数据。 尤其是配置多了之后。
切换到 MySQL
# conf/application.properties
# 把原来的 Derby 配置注释掉:
# spring.sql.init.platform=derby
# 换成 MySQL:
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
db.user.0=root
db.password.0=your_password
-- 创建一个空数据库
CREATE DATABASE IF NOT EXISTS nacos_config DEFAULT CHARACTER SET utf8mb4;
重启 Nacos 后,它会自动在 MySQL 里创建所有表。配置数据和服务注册信息都会落到 MySQL。
启动失败 5 大原因速查
| 报错 | 原因 | 解决 |
|---|---|---|
java.lang.UnsupportedClassVersionError |
JDK 版本太低 | 升级到 JDK 17 |
Address already in use |
端口 8848/9848 被占用 | lsof -i :8848 找到进程 kill 掉 |
cluster.conf 找不到 |
standalone 模式没指定 -m |
加上 -m standalone |
Unable to connect to database |
MySQL 配置错了 | 检查 db.url.0 和用户名密码 |
nacos is starting with cluster |
误启动了集群模式 | 确认用了 -m standalone 参数 |
一键脚本(懒得手动敲的可以用)
#!/bin/bash
# nacos-standalone-quickstart.sh
# 使用方法: chmod +x nacos-standalone-quickstart.sh && ./nacos-standalone-quickstart.sh
NACOS_VERSION="2.3.2"
NACOS_HOME="/opt/nacos"
# 1. 下载
wget -q https://github.com/alibaba/nacos/releases/download/${NACOS_VERSION}/nacos-server-${NACOS_VERSION}.zip -O /tmp/nacos.zip
# 2. 解压
unzip -qo /tmp/nacos.zip -d ${NACOS_HOME}
# 3. 启动
cd ${NACOS_HOME}/nacos/bin
./startup.sh -m standalone
# 4. 等 5 秒后检查
sleep 5
curl -s http://127.0.0.1:8848/nacos/v1/console/health/readiness && echo "Nacos 启动成功!" || echo "启动失败,请查看日志:${NACOS_HOME}/nacos/logs/start.out"
总结
单机部署 5 步走:
- 环境检查:JDK 版本 ≥ 1.8.0_292(推荐 17),8848/9848/9849 三个端口空闲,内存 ≥ 2G。
- 下载解压:从 GitHub Releases 下最新版,解压到服务器。
- standalone 启动:
./startup.sh -m standalone,别忘了-m standalone。 - 验证:访问
localhost:8848/nacos,默认账号nacos/nacos,注册一个 Demo 服务。 - 切 MySQL:生产环境一定要把 Derby 换成 MySQL。
常见报错记牢五个就行:JDK 版本低、端口占用、忘加 -m standalone、MySQL 连不上、误启集群模式。
你第一次搭 Nacos 踩了什么坑?评论区留个数字:1=JDK版本太低 2=端口被占 3=忘了-m standalone 4=Derby丢数据 5=其他(具体说说)。我看看哪个坑踩的人最多。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)