Skip to content

Linux 部署微服务 SpringBoot 项目

本文档介绍如何在 Linux 环境下部署基于 Nacos 的微服务 SpringBoot 项目。

微服务架构说明

项目采用 Spring Cloud 微服务架构,包含以下核心服务:

  1. jpwise-boot-gateway (端口 30000): 网关服务,统一入口和路由转发
  2. jpwise-boot-platform (端口 30001): 平台服务,包含系统管理、工作流、文件管理等
  3. jpwise-boot-business (端口 30002): 业务服务,包含HR、设计、协同办公等业务模块

所有服务通过 Nacos 实现服务注册与发现,配置统一在 Nacos 配置中心管理。

0 前置条件

在开始部署微服务之前,需要先安装以下基础环境组件。本节将详细介绍每个组件的完整安装步骤。

0.1 JDK 17 安装

0.1.1 下载JDK

从项目共享目录或JDK官网下载 microsoft-jdk-17.0.8.1-linux-x64.tar.gz (或其他JDK 17版本) 到 /root/ 目录

0.1.2 解压安装

bash
# 解压到指定目录
tar -zxvf /root/microsoft-jdk-17.0.8.1-linux-x64.tar.gz -C /usr/local/

# 创建软链接方便管理
ln -s /usr/local/jdk-17.0.8.1 /usr/local/jdk

0.1.3 配置环境变量

bash
# 编辑环境变量配置文件
vim /etc/profile

# 在文件末尾添加以下内容
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

# 使配置生效
source /etc/profile

0.1.4 验证安装

bash
# 查看Java版本
java -version

# 应该显示类似以下信息:
# openjdk version "17.0.8.1" 2023-08-24 LTS
# OpenJDK Runtime Environment Microsoft-8902769 (build 17.0.8.1+1-LTS)
# OpenJDK 64-Bit Server VM Microsoft-8902769 (build 17.0.8.1+1-LTS, mixed mode, sharing)

0.2 MySQL 5.7 安装

MySQL 数据库的详细安装步骤请参考 Linux数据库安装

0.3 Redis 安装

0.3.1 安装依赖

bash
# 安装编译依赖
yum install -y gcc gcc-c++ make

0.3.2 下载Redis

ftp/java/linux/ 下载 redis-7.4.6.tar.gz/root/ 目录

0.3.3 解压编译

bash
# 解压
tar -zxvf /root/redis-7.4.6.tar.gz -C /usr/local/

# 进入Redis目录
cd /usr/local/redis-7.4.6

# 编译安装
make
make install PREFIX=/usr/local/redis

# 复制配置文件
mkdir -p /usr/local/redis/etc
cp /usr/local/redis-7.2.0/redis.conf /usr/local/redis/etc/

0.3.4 配置Redis

bash
# 编辑配置文件
vim /usr/local/redis/etc/redis.conf

# 修改以下配置项:
# 1. 允许后台运行
daemonize yes

# 2. 绑定地址(允许远程访问,注释掉或修改为0.0.0.0)
bind 0.0.0.0

# 3. 保护模式(关闭以允许远程访问)
protected-mode no

# 4. 设置密码(可选,建议设置,将 YOUR_REDIS_PASSWORD 替换为实际密码)
requirepass YOUR_REDIS_PASSWORD

# 5. 持久化配置
appendonly yes
appendfilename "appendonly.aof"

# 6. 日志文件
logfile "/usr/local/redis/redis.log"

# 7. 数据目录
dir /usr/local/redis/data

0.3.5 创建数据目录

bash
# 创建数据存储目录
mkdir -p /usr/local/redis/data

0.3.6 启动Redis

bash
# 启动Redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

0.3.7 配置Redis开机自启

创建systemd服务文件:

bash
# 创建服务文件
vim /etc/systemd/system/redis.service

# 添加以下内容:
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target

启用服务:

bash
# 重载systemd配置
systemctl daemon-reload

# 设置开机自启
systemctl enable redis

# 启动服务
systemctl start redis

# 查看状态
systemctl status redis

0.3.8 开放Redis端口

bash
# 开放6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

0.3.9 验证Redis安装

bash
# 测试连接(如果设置了密码,将 YOUR_REDIS_PASSWORD 替换为实际密码)
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a YOUR_REDIS_PASSWORD ping

# 应该返回:PONG

# 或者进入Redis命令行
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
# 如果设置了密码,需要先认证(将 YOUR_REDIS_PASSWORD 替换为实际密码)
AUTH YOUR_REDIS_PASSWORD
# 测试命令
SET test "Hello Redis"
GET test

0.3.10 配置环境变量(可选)

bash
# 编辑环境变量配置文件
vim /etc/profile

# 在文件末尾添加
export PATH=$PATH:/usr/local/redis/bin

# 使配置生效
source /etc/profile

0.4 Minio 安装

如果项目需要对象存储服务,需要在前置条件中安装Minio。

0.4.1 下载Minio

ftp/java/linux 下载 minio 到指定目录,如 /root/

0.4.2 赋予执行权限

bash
chmod +x /root/minio

0.4.3 创建数据目录

bash
mkdir -p /root/data/jpwise-resources

0.4.4 启动Minio

bash
# 设置管理员账号密码 (请将 YOUR_MINIO_USER 和 YOUR_MINIO_PASSWORD 替换为实际值)
# 默认账号密码为: minioadmin/minioadmin,建议修改
export MINIO_ROOT_USER=YOUR_MINIO_USER
export MINIO_ROOT_PASSWORD=YOUR_MINIO_PASSWORD

# 后台启动
nohup /root/minio server /root/data/jpwise-resources --console-address ":9090" > /root/data/jpwise-resources/minio.log 2>&1 &

0.4.5 设置Minio开机自启

创建systemd服务文件:

bash
vim /etc/systemd/system/minio.service

添加以下内容:

ini
[Unit]
Description=MinIO
After=network.target

[Service]
Type=simple
User=root
Environment="MINIO_ROOT_USER=YOUR_MINIO_USER"
Environment="MINIO_ROOT_PASSWORD=YOUR_MINIO_PASSWORD"
# 请将 YOUR_MINIO_USER 和 YOUR_MINIO_PASSWORD 替换为实际值
ExecStart=/root/minio server /root/data/jpwise-resources --console-address ":9090"
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target

启用并启动服务:

bash
systemctl daemon-reload
systemctl enable minio
systemctl start minio
systemctl status minio

0.4.6 开放Minio端口

bash
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload

0.4.7 验证Minio安装

访问Minio控制台:http://服务器IP:9090

使用设置的管理员账号密码登录(默认:minioadmin/minioadmin)

重要提示

  • Minio API端口:9000
  • Minio控制台端口:9090
  • 首次登录后建议立即修改默认密码
  • 需要在Minio控制台中创建项目所需的Bucket

0.5 Nginx 安装

0.5.1 安装依赖

bash
# 安装编译依赖
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

0.5.2 下载Nginx

ftp/java/linux/ 下载 nginx-1.24.0.tar.gz/root/ 目录

0.5.3 解压编译

bash
# 解压
tar -zxvf /root/nginx-1.24.0.tar.gz -C /usr/local/src/

# 进入Nginx目录
cd /usr/local/src/nginx-1.24.0

# 配置编译参数(包含常用模块)
./configure \
  --prefix=/usr/local/nginx \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_realip_module \
  --with-http_addition_module \
  --with-http_sub_module \
  --with-http_dav_module \
  --with-http_flv_module \
  --with-http_mp4_module \
  --with-http_gunzip_module \
  --with-http_gzip_static_module \
  --with-http_random_index_module \
  --with-http_secure_link_module \
  --with-http_stub_status_module \
  --with-http_auth_request_module \
  --with-threads \
  --with-stream \
  --with-stream_ssl_module \
  --with-http_slice_module \
  --with-file-aio

# 编译安装
make
make install

0.5.4 配置Nginx

bash
# 备份原配置文件
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

# 编辑配置文件
vim /usr/local/nginx/conf/nginx.conf

替换为以下配置:

nginx
#user  nobody;
worker_processes  auto;

error_log  logs/error.log  warn;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    # 优化静态资源的访问性能
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    # 超时设置
    keepalive_timeout  65;
    client_max_body_size 100m;

    # 启用gzip压缩
    gzip  on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types
        text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
        text/javascript application/javascript application/x-javascript
        text/x-json application/json application/x-web-app-manifest+json
        text/css text/plain text/x-component
        font/opentype application/x-font-ttf application/vnd.ms-fontobject
        image/x-icon;
    gzip_disable "MSIE [1-6]\.";

    # 前端项目服务器配置
    server {
        listen       3000;
        server_name  localhost;

        # 前端静态资源
        location / {
            root   html/web;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

        # 错误页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

0.5.5 创建前端资源目录

bash
# 创建前端文件存放目录
mkdir -p /usr/local/nginx/html/web

0.5.6 测试配置

bash
# 测试配置文件语法
/usr/local/nginx/sbin/nginx -t

# 应该显示:
# nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
# nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

0.5.7 启动Nginx

bash
# 启动Nginx
/usr/local/nginx/sbin/nginx

# 重新加载配置(修改配置后使用)
/usr/local/nginx/sbin/nginx -s reload

# 停止Nginx
/usr/local/nginx/sbin/nginx -s stop

# 优雅停止(等待处理完当前请求)
/usr/local/nginx/sbin/nginx -s quit

0.5.8 配置Nginx开机自启

创建systemd服务文件:

bash
# 创建服务文件
vim /etc/systemd/system/nginx.service

添加以下内容:

ini
[Unit]
Description=Nginx HTTP Server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target

启用服务:

bash
# 重载systemd配置
systemctl daemon-reload

# 设置开机自启
systemctl enable nginx

# 启动服务
systemctl start nginx

# 查看状态
systemctl status nginx

0.5.9 开放Nginx端口

bash
# 开放HTTP端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 开放HTTPS端口(如果需要)
firewall-cmd --zone=public --add-port=443/tcp --permanent
# 开放前端项目端口
firewall-cmd --zone=public --add-port=3000/tcp --permanent
# 重载防火墙
firewall-cmd --reload

0.5.10 验证Nginx安装

bash
# 查看Nginx进程
ps -ef | grep nginx

# 查看端口监听
netstat -tunlp | grep nginx

# 访问测试
curl http://localhost:3000

# 或在浏览器访问:http://服务器IP:3000

0.5.11 配置环境变量(可选)

bash
# 编辑环境变量配置文件
vim /etc/profile

# 在文件末尾添加
export PATH=$PATH:/usr/local/nginx/sbin

# 使配置生效
source /etc/profile

前置条件检查清单

完成以上安装后,请确认以下服务都已正常运行:

bash
# 检查JDK
java -version

# 检查MySQL
systemctl status mysqld
mysql -uroot -pYOUR_PASSWORD -e "SELECT VERSION();"  # 替换 YOUR_PASSWORD

# 检查Redis
systemctl status redis
redis-cli -a YOUR_REDIS_PASSWORD ping  # 替换 YOUR_REDIS_PASSWORD

# 检查Minio
systemctl status minio
curl http://localhost:9000/minio/health/live

# 检查Nginx
systemctl status nginx
curl http://localhost:3000

所有服务正常后,即可继续进行微服务部署。

1 Nacos 安装(微服务注册中心和配置中心)

1.1 下载Nacos

ftp/java/常用软件/ 下载 nacos-server-2.5.1.zip (或更高版本) 到指定目录,如 /root/

注意: 项目使用 Nacos 2.2.3+,建议使用与项目兼容的版本。

1.2 解压Nacos

bash
unzip /root/nacos-server-2.5.1.zip -d /opt/
cd /opt/nacos

1.3 配置Nacos数据库(生产环境推荐)

Nacos默认使用内嵌数据库,生产环境建议使用外部数据库存储配置和服务信息。

数据库支持说明:

Nacos 2.2+支持以下数据库:

  • MySQL 5.7+:官方推荐,兼容性最好
  • 达梦数据库 DM8:国产数据库,支持信创环境
  • 其他数据库需要自行适配

根据实际环境选择对应的数据库配置方案:


方案一:使用MySQL数据库(推荐)

1.3.1-MySQL 创建Nacos数据库

登录MySQL,创建数据库:

bash
mysql -uroot -p

# 创建数据库
CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
1.3.2-MySQL 导入Nacos表结构

执行Nacos自带的MySQL脚本:

bash
mysql -uroot -p nacos_config < /opt/nacos/conf/mysql-schema.sql
1.3.3-MySQL 修改Nacos配置文件

编辑 /opt/nacos/conf/application.properties

bash
vim /opt/nacos/conf/application.properties

添加或修改以下配置:

properties
# 数据库配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://YOUR_MYSQL_HOST:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=YOUR_MYSQL_PASSWORD

# 说明:
# YOUR_MYSQL_HOST: MySQL服务器地址,本机可用 127.0.0.1 或 localhost,远程填IP地址
# YOUR_MYSQL_PASSWORD: MySQL root用户密码

# 服务器配置
server.port=8848

# 开启认证(生产环境必须开启,与项目配置保持一致)
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
# 用户名密码(需与微服务配置的用户名密码一致)
# 默认用户名密码为: nacos/TrZjaLzXfU
# 注意:首次启动后请登录控制台修改默认密码

方案二:使用达梦数据库DM8(国产化环境)

1.3.1-DM 前置准备

1. 确认达梦数据库已安装并运行

bash
# 检查达梦数据库服务状态
ps -ef | grep dm

# 或使用systemctl检查(如果配置了systemd服务)
systemctl status DmServiceDMSERVER

2. 添加达梦JDBC驱动到Nacos

从达梦数据库安装目录复制JDBC驱动到Nacos的plugins目录:

bash
# 创建plugins目录
mkdir -p /opt/nacos/plugins/mysql

# 复制达梦JDBC驱动(DmJdbcDriver18.jar或dm8.jar)
cp /opt/dmdbms/drivers/jdbc/DmJdbcDriver18.jar /opt/nacos/plugins/mysql/
# 或
cp /opt/dmdbms/drivers/jdbc/dm8.jar /opt/nacos/plugins/mysql/

注意

  • 驱动文件名可能因达梦版本而异,通常为 DmJdbcDriver18.jardm8.jar
  • 达梦安装路径根据实际情况调整,常见路径为 /opt/dmdbms/
1.3.2-DM 创建Nacos数据库

登录达梦数据库,创建数据库和用户:

bash
# 使用disql连接达梦数据库(以SYSDBA用户登录)
/opt/dmdbms/bin/disql SYSDBA/SYSDBA@localhost:5236

# 或使用DM管理工具连接

在DM数据库中执行以下SQL:

sql
-- 创建Nacos专用用户
CREATE USER nacos_user IDENTIFIED BY "YOUR_DM_PASSWORD" DEFAULT TABLESPACE MAIN;
-- 请将 YOUR_DM_PASSWORD 替换为实际密码,建议使用强密码

-- 授予权限
GRANT DBA TO nacos_user;
GRANT RESOURCE TO nacos_user;
GRANT PUBLIC TO nacos_user;

-- 如果需要远程连接,授予远程访问权限
-- 注意:达梦数据库的用户默认就支持远程访问,无需额外配置
1.3.3-DM 初始化Nacos表结构

1. 获取达梦适配的SQL脚本

Nacos官方提供了达梦数据库的SQL脚本,需要下载或转换:

bash
# 方案1:使用Nacos官方适配的达梦脚本(如果有)
# 从Nacos GitHub仓库下载dm8适配脚本
wget https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/dm8-schema.sql -O /opt/nacos/conf/dm8-schema.sql

# 方案2:手动转换MySQL脚本为达梦脚本
# 达梦数据库与MySQL语法基本兼容,但需注意以下差异:
# - AUTO_INCREMENT 改为 IDENTITY(1,1)
# - ENGINE=InnoDB 删除或改为对应的达梦存储引擎
# - 某些数据类型需要调整(如longtext改为CLOB)

2. 执行SQL脚本初始化表结构

bash
# 使用disql执行SQL脚本
/opt/dmdbms/bin/disql nacos_user/YOUR_DM_PASSWORD@localhost:5236 < /opt/nacos/conf/dm8-schema.sql
# 请将 YOUR_DM_PASSWORD 替换为实际密码

# 或者在disql交互模式中执行 (将 YOUR_DM_PASSWORD 替换为实际密码)
/opt/dmdbms/bin/disql nacos_user/YOUR_DM_PASSWORD@localhost:5236
START /opt/nacos/conf/dm8-schema.sql;

如果没有现成的达梦脚本,可以手动修改MySQL脚本:

bash
# 复制MySQL脚本
cp /opt/nacos/conf/mysql-schema.sql /opt/nacos/conf/dm8-schema.sql

# 编辑脚本进行达梦适配
vim /opt/nacos/conf/dm8-schema.sql

主要修改点:

sql
-- 1. 删除或注释ENGINE=InnoDB
-- 2. 将AUTO_INCREMENT改为IDENTITY(1,1)
-- 3. 将longtext改为CLOB
-- 4. 将datetime(0)改为TIMESTAMP

-- 示例:原MySQL语句
CREATE TABLE config_info (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  data_id varchar(255) NOT NULL,
  content longtext NOT NULL,
  gmt_create datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
) ENGINE=InnoDB;

-- 修改后的达梦语句
CREATE TABLE config_info (
  id bigint NOT NULL IDENTITY(1,1),
  data_id varchar(255) NOT NULL,
  content CLOB NOT NULL,
  gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
);
1.3.4-DM 修改Nacos配置文件

编辑 /opt/nacos/conf/application.properties

bash
vim /opt/nacos/conf/application.properties

添加或修改以下达梦数据库配置:

properties
# 数据库配置 - 达梦数据库
spring.datasource.platform=mysql
db.num=1

# 达梦数据库JDBC URL(注意:platform仍为mysql,但URL使用达梦驱动)
# 格式:jdbc:dm://host:port/schemaName
# 请将 YOUR_DM_HOST 替换为达梦数据库服务器地址
db.url.0=jdbc:dm://YOUR_DM_HOST:5236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=NACOS_USER

# 达梦数据库用户名密码 (请将 YOUR_DM_PASSWORD 替换为实际密码)
db.user.0=nacos_user
db.password.0=YOUR_DM_PASSWORD

# 达梦数据库驱动类
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver

# 服务器配置
server.port=8848

# 开启认证(生产环境必须开启)
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

# 用户名密码(需与微服务配置的用户名密码一致)
# 默认用户名密码为: nacos/TrZjaLzXfU
# 注意:首次启动后请登录控制台修改默认密码

达梦数据库配置参数说明:

  • spring.datasource.platform=mysql:保持为mysql(Nacos内部兼容处理)
  • db.url.0:达梦JDBC连接URL
    • 格式:jdbc:dm://host:port
    • schema=NACOS_USER:指定数据库模式名(即用户名,达梦区分大小写)
    • 端口默认为 5236
  • spring.datasource.driver-class-name:达梦驱动类名
    • 驱动类:dm.jdbc.driver.DmDriver
  • db.user.0:达梦数据库用户名
  • db.password.0:达梦数据库密码
1.3.5-DM 验证配置

启动Nacos前,验证达梦数据库连接:

bash
# 使用disql测试连接
/opt/dmdbms/bin/disql nacos_user/YOUR_DM_PASSWORD@YOUR_DM_HOST:5236
# 请将 YOUR_DM_PASSWORD 和 YOUR_DM_HOST 替换为实际值

# 查看表是否创建成功
SELECT table_name FROM user_tables;

# 应该能看到Nacos的所有表,如:
# config_info
# config_info_aggr
# config_info_beta
# config_info_tag
# config_tags_relation
# group_capacity
# his_config_info
# tenant_capacity
# tenant_info
# users
# roles
# permissions

常见问题:

  1. 驱动加载失败

    bash
    # 错误:ClassNotFoundException: dm.jdbc.driver.DmDriver
    # 解决:检查驱动jar包是否正确放置在/opt/nacos/plugins/mysql/目录
  2. 连接失败

    bash
    # 错误:Connection refused
    # 解决:检查达梦数据库是否启动,端口是否正确
    # 检查dm_svc.conf中的监听端口配置
  3. Schema不存在

    bash
    # 错误:Schema NACOS_USER does not exist
    # 解决:确认URL中的schema参数与创建的用户名一致(注意大小写)
  4. SQL语法错误

    bash
    # 错误:执行SQL时出现语法错误
    # 解决:检查dm8-schema.sql是否正确适配达梦语法

1.4 启动Nacos

1.4.1 单机模式启动(开发/测试环境)

bash
cd /opt/nacos/bin
sh startup.sh -m standalone

1.4.2 集群模式启动(生产环境)

配置集群节点 /opt/nacos/conf/cluster.conf

bash
# 配置集群节点IP和端口
NACOS_SERVER_1_IP:8848
NACOS_SERVER_2_IP:8848
NACOS_SERVER_3_IP:8848

# 说明: 将 NACOS_SERVER_X_IP 替换为实际的服务器IP地址
# 示例:
# 192.168.1.100:8848
# 192.168.1.101:8848
# 192.168.1.102:8848

启动集群:

bash
sh startup.sh

1.5 设置Nacos开机自启

创建systemd服务文件:

bash
vim /etc/systemd/system/nacos.service

添加以下内容:

ini
[Unit]
Description=Nacos Server
After=network.target

[Service]
Type=forking
ExecStart=/opt/nacos/bin/startup.sh -m standalone
ExecStop=/opt/nacos/bin/shutdown.sh
Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target

启用并启动服务:

bash
systemctl daemon-reload
systemctl enable nacos
systemctl start nacos
systemctl status nacos

1.6 开放Nacos端口

bash
firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --zone=public --add-port=9848/tcp --permanent
firewall-cmd --zone=public --add-port=9849/tcp --permanent
firewall-cmd --reload

1.7 验证Nacos安装

访问Nacos控制台:http://服务器IP:8848/nacos

默认用户名/密码:nacos/nacos

重要提示

  • 首次登录后,请立即修改默认密码
  • 确保创建的用户名密码与微服务配置中的一致(项目配置为: nacos/TrZjaLzXfU)

1.8 查看Nacos日志

bash
# 启动日志
tail -f /opt/nacos/logs/start.out

# 服务日志
tail -f /opt/nacos/logs/nacos.log

1.9 停止Nacos

bash
cd /opt/nacos/bin
sh shutdown.sh

1.10 配置Nacos命名空间和配置文件

项目采用命名空间隔离不同环境的配置,需要手动创建命名空间和配置文件。

快速配置参考:

为方便快速部署,可从 ftp/JAVA/linux/ 下载 nacos_config_export.zip,该压缩包包含了项目所需的所有Nacos配置文件参考模板。

下载并解压后,可查看各配置文件的详细内容和结构,然后在Nacos控制台中手动创建这些配置,或使用Nacos的配置导入功能批量导入。

1.10.1 创建命名空间

登录Nacos控制台,进入"命名空间"页面:

  1. 点击"新建命名空间"
  2. 命名空间ID:dev(开发环境)/ test(测试环境)/ prod(生产环境)
  3. 命名空间名:开发环境 / 测试环境 / 生产环境
  4. 点击"确定"

1.10.2 创建配置文件

项目需要在Nacos中创建以下配置文件,所有配置文件的Group统一为:JPWISE_GROUP

1. 公共配置文件:jpwise-common.yml

在对应的命名空间下创建配置文件:

  • Data ID: jpwise-common.yml
  • Group: JPWISE_GROUP
  • 配置格式: YAML
  • 配置内容: 包含Redis、日志等公共配置

2. 数据源配置文件:jpwise-datasource.yml

  • Data ID: jpwise-datasource.yml
  • Group: JPWISE_GROUP
  • 配置格式: YAML
  • 配置内容: 包含数据库连接配置

3. 网关配置文件:jpwise-gateway.yml

  • Data ID: jpwise-gateway.yml
  • Group: JPWISE_GROUP
  • 配置格式: YAML
  • 配置内容: 网关路由、限流等配置

4. 平台服务配置文件:jpwise-platform.yml

  • Data ID: jpwise-platform.yml
  • Group: JPWISE_GROUP
  • 配置格式: YAML
  • 配置内容: 平台服务特有配置

5. 业务服务配置文件:jpwise-business.yml

  • Data ID: jpwise-business.yml
  • Group: JPWISE_GROUP
  • 配置格式: YAML
  • 配置内容: 业务服务特有配置

1.10.3 配置文件动态刷新

项目已启用配置动态刷新功能(refresh-enabled=true),修改Nacos中的配置后,微服务会自动加载最新配置,无需重启。

注意事项

  • 所有配置文件必须在对应的命名空间下创建
  • Group必须统一为 JPWISE_GROUP
  • 配置文件格式必须为YAML
  • 建议在开发环境验证配置正确后,再同步到生产环境

2 SpringBoot 微服务项目部署

2.1 创建项目目录

bash
mkdir -p /opt/jpwise/{gateway,platform,business}

2.2 上传jar包

将打包好的jar文件上传到对应目录:

  • 网关服务:/opt/jpwise/gateway/jpwise-boot-gateway.jar
  • 平台服务:/opt/jpwise/platform/jpwise-platform-admin.jar
  • 业务服务:/opt/jpwise/business/jpwise-business-admin.jar

注意:

  • jar包命名根据Maven打包配置自动生成,通常为 模块名.jar模块名-版本号.jar
  • 建议使用统一的命名规范便于管理

2.3 配置application.yml

各微服务的Nacos配置已内置在jar包中,通常无需修改。如需调整,请参考以下配置示例:

网关服务配置示例(jpwise-gateway):

yaml
server:
  port: 30000

spring:
  config:
    import:
      - optional:nacos:jpwise-common.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
      - optional:nacos:jpwise-gateway.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
  cloud:
    nacos:
      # 服务注册与发现配置
      discovery:
        server-addr: YOUR_NACOS_SERVER:8848  # 修改为实际Nacos服务器地址(如: 192.168.1.100:8848)
        username: nacos
        password: TrZjaLzXfU
        namespace: dev  # 环境命名空间:dev/test/prod
        group: JPWISE_GROUP
        enabled: true
        heart-beat-interval: 5000
        heart-beat-timeout: 15000
        instance-enabled: true
        ephemeral: true
        weight: 1.0
        metadata:
          version: 2.2.0-RELEASE
          service-type: gateway
      # 配置中心配置
      config:
        server-addr: YOUR_NACOS_SERVER:8848  # 修改为实际Nacos服务器地址(如: 192.168.1.100:8848)
        username: nacos
        password: TrZjaLzXfU
        namespace: dev
        group: JPWISE_GROUP
        enabled: true
        file-extension: yml
        refresh-enabled: true

平台服务配置示例(jpwise-platform):

yaml
server:
  port: 30001

spring:
  config:
    import:
      - optional:nacos:jpwise-common.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
      - optional:nacos:jpwise-datasource.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
      - optional:nacos:jpwise-platform.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
  cloud:
    nacos:
      # 服务注册与发现配置
      discovery:
        server-addr: YOUR_NACOS_SERVER:8848  # 修改为实际Nacos服务器地址(如: 192.168.1.100:8848)
        username: nacos
        password: TrZjaLzXfU
        namespace: dev
        group: JPWISE_GROUP
        enabled: true
        heart-beat-interval: 5000
        heart-beat-timeout: 15000
        instance-enabled: true
        ephemeral: true
        weight: 1.0
        cluster-name: DEFAULT
        metadata:
          version: 2.2.0-RELEASE
          service-type: platform
          modules: system,file,workflow,visualdev,app
      # 配置中心配置
      config:
        server-addr: YOUR_NACOS_SERVER:8848  # 修改为实际Nacos服务器地址(如: 192.168.1.100:8848)
        username: nacos
        password: TrZjaLzXfU
        namespace: dev
        group: JPWISE_GROUP
        enabled: true
        file-extension: yml
        refresh-enabled: true

业务服务配置示例(jpwise-business):

yaml
server:
  port: 30002

spring:
  config:
    import:
      - optional:nacos:jpwise-common.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
      - optional:nacos:jpwise-datasource.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
      - optional:nacos:jpwise-business.yml?group=JPWISE_GROUP&namespace=${spring.profiles.active}&refresh-enabled=true
  cloud:
    nacos:
      # 服务注册与发现配置
      discovery:
        server-addr: YOUR_NACOS_SERVER:8848  # 修改为实际Nacos服务器地址(如: 192.168.1.100:8848)
        username: nacos
        password: TrZjaLzXfU
        namespace: dev
        group: JPWISE_GROUP
        enabled: true
        heart-beat-interval: 5000
        heart-beat-timeout: 15000
        instance-enabled: true
        ephemeral: true
        weight: 1.0
        cluster-name: DEFAULT
        metadata:
          version: 2.2.0-RELEASE
          service-type: business
          modules: hr,design,cooperate,docSystem,officeAuto,extend,essential,infra
      # 配置中心配置
      config:
        server-addr: YOUR_NACOS_SERVER:8848  # 修改为实际Nacos服务器地址(如: 192.168.1.100:8848)
        username: nacos
        password: TrZjaLzXfU
        namespace: dev
        group: JPWISE_GROUP
        enabled: true
        file-extension: yml
        refresh-enabled: true

配置说明:

  • server-addr: Nacos服务器地址
    • 单机模式: YOUR_NACOS_SERVER:8848 (单个地址,如: 192.168.1.100:8848)
    • 集群模式: SERVER1_IP:8848,SERVER2_IP:8848,SERVER3_IP:8848 (多个地址用逗号分隔,如: 192.168.1.100:8848,192.168.1.101:8848,192.168.1.102:8848)
    • 生产环境建议使用集群模式以提高可用性
  • username/password: Nacos认证用户名密码,需与Nacos服务端配置一致
  • namespace: 命名空间,用于环境隔离(dev/test/prod)
  • group: 配置分组,统一使用 JPWISE_GROUP
  • cluster-name: 微服务实例所属集群名称,默认 DEFAULT
  • heart-beat-interval: 心跳间隔时间(毫秒)
  • heart-beat-timeout: 心跳超时时间(毫秒)
  • ephemeral: 是否为临时实例,true表示临时实例(服务下线后立即删除)
  • weight: 实例权重,用于负载均衡
  • metadata: 实例元数据,可添加自定义信息
  • refresh-enabled: 启用配置动态刷新
  • spring.config.import: 从Nacos导入的配置文件列表,支持动态刷新

重要提示:

  1. 所有微服务配置中的 server-addr 必须保持一致
  2. 如果修改了jar包内的配置,需要重新打包
  3. 建议将环境相关配置(如Nacos地址)通过启动参数传递,避免修改jar包:
    bash
    java -jar app.jar --spring.cloud.nacos.discovery.server-addr=YOUR_NACOS_SERVER:8848
    # 请将 YOUR_NACOS_SERVER 替换为实际上的Nacos服务器IP,如: 192.168.1.100

2.4 创建启动脚本

创建 /opt/jpwise/start.sh

bash
#!/bin/bash

# 启动网关服务
nohup java -jar /opt/jpwise/gateway/jpwise-boot-gateway.jar --spring.profiles.active=dev > /opt/jpwise/gateway/app.log 2>&1 &
echo "jpwise-gateway started"

# 等待网关启动
sleep 10

# 启动平台服务
nohup java -jar /opt/jpwise/platform/jpwise-platform-admin.jar --spring.profiles.active=dev > /opt/jpwise/platform/app.log 2>&1 &
echo "jpwise-platform started"

# 等待平台服务启动
sleep 10

# 启动业务服务
nohup java -jar /opt/jpwise/business/jpwise-business-admin.jar --spring.profiles.active=dev > /opt/jpwise/business/app.log 2>&1 &
echo "jpwise-business started"

echo "All services started. Check logs for details."

赋予执行权限:

bash
chmod +x /opt/jpwise/start.sh

2.5 创建停止脚本

创建 /opt/jpwise/stop.sh

bash
#!/bin/bash

# 停止所有jpwise相关的Java进程
ps -ef | grep jpwise | grep -v grep | awk '{print $2}' | xargs kill -9
echo "All jpwise services stopped"

赋予执行权限:

bash
chmod +x /opt/jpwise/stop.sh

2.6 启动微服务

重要提示:启动顺序

微服务启动必须按照以下顺序进行:

  1. 第一步:确保Nacos服务已启动

    bash
    # 检查Nacos状态
    systemctl status nacos
    # 或访问 http://服务器IP:8848/nacos
  2. 第二步:确保MySQL和Redis已启动

    bash
    systemctl status mysqld
    systemctl status redis
  3. 第三步:启动微服务(按顺序)

    bash
    cd /opt/jpwise
    ./start.sh

启动脚本会按照以下顺序启动服务,并在每个服务启动后等待10秒:

  • 网关服务 (jpwise-gateway)
  • 平台服务 (jpwise-platform)
  • 业务服务 (jpwise-business)

等待服务注册:微服务启动后需要几秒钟时间向Nacos注册,可通过Nacos控制台查看服务列表确认注册成功。

2.7 查看服务状态

bash
# 查看Java进程
ps -ef | grep java

# 查看服务日志
tail -f /opt/jpwise/gateway/app.log
tail -f /opt/jpwise/platform/app.log
tail -f /opt/jpwise/business/app.log

2.8 验证服务注册

访问Nacos控制台,查看服务列表,确认所有微服务都已成功注册。

3 完整的端口清单

确保以下端口已开放:

bash
# MySQL
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# Redis (默认)
firewall-cmd --zone=public --add-port=6379/tcp --permanent

# Nginx
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=3000/tcp --permanent

# Nacos(注册中心和配置中心)
firewall-cmd --zone=public --add-port=8848/tcp --permanent  # HTTP API和控制台
firewall-cmd --zone=public --add-port=9848/tcp --permanent  # 客户端gRPC请求服务端端口
firewall-cmd --zone=public --add-port=9849/tcp --permanent  # 服务端gRPC请求服务端端口

# Minio(对象存储)
firewall-cmd --zone=public --add-port=9000/tcp --permanent  # API端口
firewall-cmd --zone=public --add-port=9090/tcp --permanent  # 控制台端口

# 微服务端口(根据项目实际配置)
firewall-cmd --zone=public --add-port=30000/tcp --permanent  # jpwise-gateway(网关服务)
firewall-cmd --zone=public --add-port=30001/tcp --permanent  # jpwise-platform(平台服务)
firewall-cmd --zone=public --add-port=30002/tcp --permanent  # jpwise-business(业务服务)

# 重载防火墙
firewall-cmd --reload

4 常见问题排查

4.1 Nacos启动失败

bash
# 查看启动日志
tail -f /opt/nacos/logs/start.out

# 常见问题:
# 1. 端口被占用:netstat -tunlp | grep 8848
# 2. 数据库连接失败:检查application.properties中的数据库配置
# 3. 内存不足:调整JVM参数 /opt/nacos/bin/startup.sh

4.2 微服务无法注册到Nacos

问题排查步骤:

1. 检查Nacos服务是否正常

bash
# 检查Nacos健康状态
curl http://localhost:8848/nacos/v1/console/health/readiness

# 检查Nacos进程
ps -ef | grep nacos

# 查看Nacos日志
tail -f /opt/nacos/logs/nacos.log

2. 检查Nacos认证配置

bash
# 确认Nacos是否开启了认证
# 查看 /opt/nacos/conf/application.properties 中的配置
grep "nacos.core.auth.enabled" /opt/nacos/conf/application.properties

# 如果开启了认证,确保微服务配置的用户名密码与Nacos一致
# 默认配置:username: nacos, password: TrZjaLzXfU

3. 检查命名空间和分组配置

bash
# 登录Nacos控制台,确认:
# - 命名空间(dev/test/prod)是否已创建
# - 配置文件是否在正确的命名空间下
# - Group是否为 JPWISE_GROUP
# - 必需的配置文件是否都已创建

4. 检查网络连接

bash
# 检查防火墙是否开放8848端口
firewall-cmd --list-ports | grep 8848

# 从微服务所在机器ping Nacos服务器
ping <Nacos服务器IP>

# 测试端口连通性
telnet <Nacos服务器IP> 8848

5. 查看微服务日志

bash
# 查看微服务启动日志,关注以下错误:
# - Connection refused: Nacos服务未启动或端口不通
# - 403 Forbidden: 认证失败,用户名密码错误
# - Namespace not found: 命名空间不存在
# - Config not found: 配置文件不存在

tail -f /opt/jpwise/gateway/app.log
tail -f /opt/jpwise/platform/app.log

常见错误及解决方案:

错误信息原因解决方案
Connection refusedNacos服务未启动启动Nacos服务
403 Forbidden认证失败检查用户名密码是否正确
Namespace not found命名空间不存在在Nacos控制台创建对应的命名空间
Config not found配置文件不存在在Nacos中创建必需的配置文件
Load from Nacos error配置文件格式错误检查Nacos中的配置文件YAML格式是否正确

4.3 查看系统资源占用

bash
# 查看CPU和内存使用情况
top

# 查看磁盘使用情况
df -h

# 查看端口监听情况
netstat -tunlp

5 部署架构图

┌─────────────────────────────────────────────────────────┐
│                     Nginx (3000)                         │
│                    前端静态资源                           │
└─────────────────┬───────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│              jpwise-gateway (30000)                      │
│                  微服务网关                               │
└─────────────────┬───────────────────────────────────────┘

        ┌─────────┴─────────┐
        ▼                   ▼
┌───────────────┐   ┌───────────────┐
│jpwise-platform│   │jpwise-business│
│    (30001)    │   │    (30002)    │
└───────┬───────┘   └───────┬───────┘
        │                   │
        └─────────┬─────────┘

        ┌─────────┼─────────┬─────────┐
        ▼         ▼         ▼         ▼
┌───────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐
│Nacos      │ │MySQL    │ │Redis    │ │Minio     │
│(8848)     │ │(3306)   │ │(6379)   │ │(9000)    │
│注册/配置  │ │数据库   │ │缓存     │ │对象存储  │
└───────────┘ └─────────┘ └─────────┘ └──────────┘