Linux / 国产环境部署
本文档介绍在 Linux 服务器及国产操作系统(麒麟、统信等)上部署 ANGRY ANT 应用的完整步骤,覆盖 x86_64、ARM64、LoongArch 等主流芯片架构。
部署步骤
第一步:构建打包
在开发机器上执行打包:
cd angryant-biz-blank
mvn clean package打包产物位于 target/output/ 目录,或直接使用 target/output.zip。
第二步:上传文件
将整个 output/ 目录上传到服务器:
# 上传 output 目录到服务器
scp -r target/output/* root@your-server:/home/java/your-project/
# 或上传 output.zip 后在服务器上解压
scp target/output.zip root@your-server:/home/java/your-project/
ssh root@your-server "cd /home/java/your-project && unzip -o output.zip"上传后的目录结构:
/home/java/your-project/
├── angryant-biz-blank.jar # 应用 jar(轻量,依赖在 lib/ 中)
├── lib/ # 所有依赖 jar 包
├── application.yml # 主配置
├── application-prod.yml # 生产环境配置
├── logback-prod.xml # 日志配置
├── run.sh # 启动脚本
├── run.bat # Windows 脚本(Linux 下不需要)
├── info_log.sh # 查看信息日志
├── error_log.sh # 查看错误日志
└── readme # 简要说明第三步:赋予执行权限
cd /home/java/your-project/
chmod +x run.sh info_log.sh error_log.sh第四步:修改配置文件(重要)
4.1 修改 application-prod.yml
打开 application-prod.yml,修改以下关键配置:
# 服务端口
server:
port: 8080 # 改为实际端口
# 数据库连接
spring:
datasource:
druid:
master:
url: jdbc:mysql://ip地址:3306/数据库名称?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: 用户名 # 改为实际用户名
password: 密码 # 改为实际密码
# 文件上传路径(Linux 环境)
angryant:
profile: /home/java/your-project/uploadPath # 改为实际上传路径
# OSS 配置(如使用 MinIO)
oss-v2:
storage:
type: minio
minio:
endpoint: http://your-minio-server:9000 # 改为实际 MinIO 地址
access-key: your-access-key # 改为实际密钥
secret-key: your-secret-key # 改为实际密钥4.2 修改 logback-prod.xml
修改日志存储路径:
<!-- 原始模板值(wj 为项目名称,需替换为你的实际项目名) -->
<property name="log.path" value="/home/angryant/logs/wj" />
<!-- 改为实际部署路径 -->
<property name="log.path" value="/home/java/your-project/logs" />修改后需要确保该目录存在:
mkdir -p /home/java/your-project/logs4.3 修改 run.sh
模板中的 run.sh 如下,需要逐项修改:
#!/bin/bash
#这里可替换为jar包名字
APP_NAME=angryant-XXX.jar
#根据实际情况修改参数
JVM="-server -Xms2g -Xmx12g -Xmn512m -XX:PermSize=128M -XX:MaxNewSize=128m -XX:MaxPermSize=25zh6m -Xss256k -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -Xloggc:/logs/xxx-server/GC/xxx-gc.log"需要修改的位置:
① jar 包名称(第 3 行)
# 原始值
APP_NAME=angryant-XXX.jar
# 改为实际 jar 包名
APP_NAME=angryant-biz-blank.jar② JVM 参数(第 5 行)
模板中的 JVM 参数包含多个已废弃的选项(PermSize、CMSClassUnloadingEnabled 等)和拼写错误(25zh6m)。建议替换为以下推荐配置:
# 推荐的 JVM 参数(标准 x86_64 环境)
JVM="-server -Xms2g -Xmx4g -Xmn512m \
-Xss256k \
-Djava.awt.headless=true \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-Xlog:gc*:file=/home/java/your-project/logs/gc.log:time,uptime:filecount=10,filesize=100M"参数说明:
| 参数 | 说明 | 建议值 |
|---|---|---|
-Xms2g | JVM 初始堆内存 | 根据服务器内存,建议 2g ~ 4g |
-Xmx4g | JVM 最大堆内存 | 根据服务器内存,建议 4g ~ 8g |
-Xmn512m | 年轻代大小 | 通常为堆内存的 1/4 ~ 1/3 |
-XX:+UseG1GC | 使用 G1 垃圾收集器 | 替代已废弃的 CMS |
-Xlog:gc*:file=... | GC 日志路径 | 必须替换为实际部署路径 |
③ 日志查看路径(第 63 行)
# 原始值
tail -n 100 -f /home/java/run_info.log
# 改为实际路径
tail -n 100 -f /home/java/your-project/run_info.log④ 备份路径(第 69-74 行)
# 原始值
BACKUP_PATH=/usr/local/webapps/backup/xxx-server/
cp -r /usr/local/webapps/$APP_NAME $BACKUP_PATH$BACKUP_DATE'.jar'
# 改为实际路径
BACKUP_PATH=/home/java/your-project/backup/
cp -r $APP_NAME $BACKUP_PATH$BACKUP_DATE'.jar'首次使用前创建备份目录:
mkdir -p /home/java/your-project/backup/第五步:启动服务
# 启动
sh run.sh start
# 查看状态
sh run.sh status
# 实时查看启动日志
sh run.sh log
# 或使用快捷脚本查看信息日志
sh info_log.sh
# 查看错误日志
sh error_log.sh第六步:验证服务
# 查看进程
ps -ef | grep angryant-biz-blank.jar
# 查看端口监听(8080 为默认端口,请替换为你实际配置的端口)
netstat -tlnp | grep 8080
# 或使用 ss 命令
ss -tlnp | grep 8080常用命令
| 命令 | 说明 |
|---|---|
sh run.sh start | 启动服务 |
sh run.sh stop | 停止服务(kill -9 强制终止) |
sh run.sh restart | 重启服务(先 stop 再 start) |
sh run.sh status | 查看服务运行状态 |
sh run.sh log | 实时查看启动日志(tail -f) |
sh run.sh backup | 备份当前 jar 包 |
sh info_log.sh | 查看应用信息日志(sys-info.log) |
sh error_log.sh | 查看应用错误日志(sys-error.log) |
国产服务器适配
鲲鹏(ARM64)架构
鲲鹏服务器基于 ARM64 架构,需使用适配的 JDK 并调整 JVM 参数。
JDK 选择
推荐使用 毕昇 JDK(Huawei 针对 ARM 优化的 JDK)或 OpenJDK ARM64 版本:
# 查看当前 JDK 版本和架构
java -version
java -XshowSettings:properties -version 2>&1 | grep os.arch
# 确认 os.arch 输出为 aarch64推荐的 JVM 参数
JVM="-server -Xms2g -Xmx8g -Xmn1g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseCGroupMemoryLimitForHeap \
-Xss512k \
-Djava.awt.headless=true \
-Xlog:gc*:file=/home/java/your-project/logs/gc.log:time,uptime:filecount=10,filesize=100M"关键差异:
- 使用
G1GC替代 CMS(ARM 架构下 G1 性能更优) -Xss512k线程栈适当增加(ARM 默认栈空间较小)
飞腾(ARM64)架构
JVM="-server -Xms2g -Xmx8g -Xmn1g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=300 \
-XX:ParallelGCThreads=8 \
-XX:ConcGCThreads=2 \
-Xss512k \
-Djava.awt.headless=true \
-Xlog:gc*:file=/home/java/your-project/logs/gc.log:time,uptime:filecount=10,filesize=100M"ParallelGCThreads和ConcGCThreads根据 CPU 核心数调整(飞腾通常 8~16 核)- GC 暂停时间适当放宽(飞腾单核性能略弱于鲲鹏)
海光 / 兆芯(x86_64)架构
海光和兆芯为 x86_64 架构,与 Intel/AMD 兼容:
JVM="-server -Xms2g -Xmx12g -Xmn512m \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-Xss256k \
-Djava.awt.headless=true \
-Xlog:gc*:file=/home/java/your-project/logs/gc.log:time,uptime:filecount=10,filesize=100M"- 使用标准 x86_64 JDK 即可
- 无需特殊调整
龙芯(LoongArch)架构
龙芯为自主指令集架构,需使用龙芯官方 JDK,确保 JDK 版本支持 LoongArch 指令集:
JVM="-server -Xms2g -Xmx8g -Xmn1g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=400 \
-Xss512k \
-Djava.awt.headless=true \
-Xlog:gc*:file=/home/java/your-project/logs/gc.log:time,uptime:filecount=10,filesize=100M"- GC 暂停时间适当放宽(龙芯单核性能相对较弱)
- 确保应用不依赖 x86 原生库(如某些 JNI 库需重新编译)
国产操作系统适配
麒麟(KylinOS)
# 使用麒麟软件仓库中的 JDK,或安装 OpenJDK
# 开放防火墙端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload统信(UOS)
UOS 基于 Debian,使用 systemd 管理服务,可配置开机自启:
cat > /etc/systemd/system/angryant.service << 'EOF'
[Unit]
Description=ANGRY ANT Application Service
After=network.target
[Service]
Type=forking
User=java
Group=java
WorkingDirectory=/home/java/your-project
ExecStart=/home/java/your-project/run.sh start
ExecStop=/home/java/your-project/run.sh stop
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable angryant
systemctl start angryant生产环境 Nginx 配置
后端服务启动后,需要配置 Nginx 反向代理,将外部请求转发到后端应用。
完整配置参考
在 Nginx 配置文件中添加以下内容(通常位于 /etc/nginx/conf.d/your-project.conf 或 /etc/nginx/nginx.conf):
server {
listen 80;
server_name your-domain.com;
# 前端静态资源
location / {
root /home/java/your-project/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
# 管理端 API 代理(对应前端 .env.production 中的 VITE_GLOB_API_URL=/prod-api)
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
# 移动端/开放 API 代理
location /api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/api/;
}
# OSS 公开文件访问代理
location /ossV2/public/ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}注意:以上配置中
8080为后端默认端口,需与application-prod.yml中的server.port保持一致。如你在配置文件中修改了端口,请同步修改 Nginx 中的proxy_pass地址。
路径说明
| 路径 | 作用 | proxy_pass |
|---|---|---|
/ | 前端静态资源 | 指向 dist 目录 |
/prod-api/ | 管理端 API 代理 | http://localhost:8080/ |
/api/ | 移动端/开放 API 代理 | http://localhost:8080/api/ |
/ossV2/public/ | OSS 公开文件访问 | http://localhost:8080 |
前端环境变量对应关系
| 端 | 环境变量 | 值 | Nginx 路径 |
|---|---|---|---|
| 管理端 | VITE_GLOB_API_URL | /prod-api | /prod-api/ |
| 移动端 | API 地址 | /api | /api/ |
配置步骤
# 1. 创建 Nginx 配置文件
sudo vi /etc/nginx/conf.d/your-project.conf
# 2. 粘贴上面的配置内容,修改 server_name 和路径
# 3. 检查配置语法
sudo nginx -t
# 4. 重新加载 Nginx
sudo nginx -s reloadHTTPS 配置(可选)
如需启用 HTTPS,在 server 块中添加 SSL 配置:
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/nginx/ssl/your-domain.pem;
ssl_certificate_key /etc/nginx/ssl/your-domain.key;
ssl_protocols TLSv1.2 TLSv1.3;
# ... 其余 location 配置同上
}
# HTTP 自动跳转 HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}安全建议
使用非 root 用户运行
useradd -m -s /bin/bash javaapp
chown -R javaapp:javaapp /home/java/your-project/
su - javaapp
sh run.sh start限制 JVM 堆外内存
JVM="$JVM -XX:MaxDirectMemorySize=512m -XX:MaxMetaspaceSize=256m"芯片架构速查表
| 芯片架构 | 指令集 | JDK 推荐 | GC 策略 | 特殊注意 |
|---|---|---|---|---|
| Intel / AMD | x86_64 | OpenJDK / Oracle JDK | G1GC | 无 |
| 鲲鹏 | ARM64 | 毕昇 JDK / OpenJDK ARM64 | G1GC | 栈空间调大 |
| 飞腾 | ARM64 | 飞腾 JDK / 龙蜥 JDK | G1GC | GC 线程数按核心调整 |
| 海光 | x86_64 | OpenJDK | G1GC | 与 Intel 兼容 |
| 兆芯 | x86_64 | OpenJDK | G1GC | 与 Intel 兼容 |
| 龙芯 | LoongArch | 龙芯官方 JDK | G1GC | JNI 库需重编译 |
