第一次搭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 版本

端口占用

内存

≥ 1.8.0_292
建议 JDK 17 用于 2.4+

8848 / 9848 / 9849
三个端口都不能被占

至少 2G 可用内存

启动前检查三个东西: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
Nacos Server JVM startup.sh Nacos Server JVM startup.sh ./startup.sh -m standalone 检查 JAVA_HOME 设置 JVM 参数 (默认 -Xms512m -Xmx512m -Xmn256m) 启动 jar 包 Spring Boot 初始化 加载 application.properties 初始化 Derby 数据库 启动 HTTP(8848) + gRPC(9848) 端口 启动完成

启动流程: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 数据库。它能用,但有三个问题:

  1. 数据无法共享。集群模式下每个节点有自己的 Derby 实例,数据不同步。
  2. 不支持高并发写入。Derby 是单文件嵌入式数据库,写操作会锁整个库。
  3. 不支持运维操作。没法做主从、没法做备份、没法用 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 步走:

  1. 环境检查:JDK 版本 ≥ 1.8.0_292(推荐 17),8848/9848/9849 三个端口空闲,内存 ≥ 2G。
  2. 下载解压:从 GitHub Releases 下最新版,解压到服务器。
  3. standalone 启动./startup.sh -m standalone,别忘了 -m standalone
  4. 验证:访问 localhost:8848/nacos,默认账号 nacos/nacos,注册一个 Demo 服务。
  5. 切 MySQL:生产环境一定要把 Derby 换成 MySQL。

常见报错记牢五个就行:JDK 版本低、端口占用、忘加 -m standalone、MySQL 连不上、误启集群模式。


你第一次搭 Nacos 踩了什么坑?评论区留个数字:1=JDK版本太低 2=端口被占 3=忘了-m standalone 4=Derby丢数据 5=其他(具体说说)。我看看哪个坑踩的人最多。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐