Appearance
Linux 部署微服务 SpringBoot 项目
本文档介绍如何在 Linux 环境下部署基于 Nacos 的微服务 SpringBoot 项目。
微服务架构说明
项目采用 Spring Cloud 微服务架构,包含以下核心服务:
- jpwise-boot-gateway (端口 30000): 网关服务,统一入口和路由转发
- jpwise-boot-platform (端口 30001): 平台服务,包含系统管理、工作流、文件管理等
- 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/jdk0.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/profile0.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++ make0.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/data0.3.5 创建数据目录
bash
# 创建数据存储目录
mkdir -p /usr/local/redis/data0.3.6 启动Redis
bash
# 启动Redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf0.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 redis0.3.8 开放Redis端口
bash
# 开放6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload0.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 test0.3.10 配置环境变量(可选)
bash
# 编辑环境变量配置文件
vim /etc/profile
# 在文件末尾添加
export PATH=$PATH:/usr/local/redis/bin
# 使配置生效
source /etc/profile0.4 Minio 安装
如果项目需要对象存储服务,需要在前置条件中安装Minio。
0.4.1 下载Minio
从 ftp/java/linux 下载 minio 到指定目录,如 /root/
0.4.2 赋予执行权限
bash
chmod +x /root/minio0.4.3 创建数据目录
bash
mkdir -p /root/data/jpwise-resources0.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 minio0.4.6 开放Minio端口
bash
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload0.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-devel0.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 install0.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/web0.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 successful0.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 quit0.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 nginx0.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 --reload0.5.10 验证Nginx安装
bash
# 查看Nginx进程
ps -ef | grep nginx
# 查看端口监听
netstat -tunlp | grep nginx
# 访问测试
curl http://localhost:3000
# 或在浏览器访问:http://服务器IP:30000.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/nacos1.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.sql1.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 DmServiceDMSERVER2. 添加达梦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.jar或dm8.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常见问题:
驱动加载失败
bash# 错误:ClassNotFoundException: dm.jdbc.driver.DmDriver # 解决:检查驱动jar包是否正确放置在/opt/nacos/plugins/mysql/目录连接失败
bash# 错误:Connection refused # 解决:检查达梦数据库是否启动,端口是否正确 # 检查dm_svc.conf中的监听端口配置Schema不存在
bash# 错误:Schema NACOS_USER does not exist # 解决:确认URL中的schema参数与创建的用户名一致(注意大小写)SQL语法错误
bash# 错误:执行SQL时出现语法错误 # 解决:检查dm8-schema.sql是否正确适配达梦语法
1.4 启动Nacos
1.4.1 单机模式启动(开发/测试环境)
bash
cd /opt/nacos/bin
sh startup.sh -m standalone1.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.sh1.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 nacos1.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 --reload1.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.log1.9 停止Nacos
bash
cd /opt/nacos/bin
sh shutdown.sh1.10 配置Nacos命名空间和配置文件
项目采用命名空间隔离不同环境的配置,需要手动创建命名空间和配置文件。
快速配置参考:
为方便快速部署,可从 ftp/JAVA/linux/ 下载 nacos_config_export.zip,该压缩包包含了项目所需的所有Nacos配置文件参考模板。
下载并解压后,可查看各配置文件的详细内容和结构,然后在Nacos控制台中手动创建这些配置,或使用Nacos的配置导入功能批量导入。
1.10.1 创建命名空间
登录Nacos控制台,进入"命名空间"页面:
- 点击"新建命名空间"
- 命名空间ID:
dev(开发环境)/test(测试环境)/prod(生产环境) - 命名空间名:
开发环境/测试环境/生产环境 - 点击"确定"
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_GROUPcluster-name: 微服务实例所属集群名称,默认DEFAULTheart-beat-interval: 心跳间隔时间(毫秒)heart-beat-timeout: 心跳超时时间(毫秒)ephemeral: 是否为临时实例,true表示临时实例(服务下线后立即删除)weight: 实例权重,用于负载均衡metadata: 实例元数据,可添加自定义信息refresh-enabled: 启用配置动态刷新spring.config.import: 从Nacos导入的配置文件列表,支持动态刷新
重要提示:
- 所有微服务配置中的
server-addr必须保持一致 - 如果修改了jar包内的配置,需要重新打包
- 建议将环境相关配置(如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.sh2.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.sh2.6 启动微服务
重要提示:启动顺序
微服务启动必须按照以下顺序进行:
第一步:确保Nacos服务已启动
bash# 检查Nacos状态 systemctl status nacos # 或访问 http://服务器IP:8848/nacos第二步:确保MySQL和Redis已启动
bashsystemctl status mysqld systemctl status redis第三步:启动微服务(按顺序)
bashcd /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.log2.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 --reload4 常见问题排查
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.sh4.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.log2. 检查Nacos认证配置
bash
# 确认Nacos是否开启了认证
# 查看 /opt/nacos/conf/application.properties 中的配置
grep "nacos.core.auth.enabled" /opt/nacos/conf/application.properties
# 如果开启了认证,确保微服务配置的用户名密码与Nacos一致
# 默认配置:username: nacos, password: TrZjaLzXfU3. 检查命名空间和分组配置
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> 88485. 查看微服务日志
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 refused | Nacos服务未启动 | 启动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 -tunlp5 部署架构图
┌─────────────────────────────────────────────────────────┐
│ Nginx (3000) │
│ 前端静态资源 │
└─────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ jpwise-gateway (30000) │
│ 微服务网关 │
└─────────────────┬───────────────────────────────────────┘
│
┌─────────┴─────────┐
▼ ▼
┌───────────────┐ ┌───────────────┐
│jpwise-platform│ │jpwise-business│
│ (30001) │ │ (30002) │
└───────┬───────┘ └───────┬───────┘
│ │
└─────────┬─────────┘
│
┌─────────┼─────────┬─────────┐
▼ ▼ ▼ ▼
┌───────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐
│Nacos │ │MySQL │ │Redis │ │Minio │
│(8848) │ │(3306) │ │(6379) │ │(9000) │
│注册/配置 │ │数据库 │ │缓存 │ │对象存储 │
└───────────┘ └─────────┘ └─────────┘ └──────────┘