Skip to content

Linux / 国产环境部署

本文档介绍在 Linux 服务器及国产操作系统(麒麟、统信等)上部署 ANGRY ANT 应用的完整步骤,覆盖 x86_64、ARM64、LoongArch 等主流芯片架构。

部署步骤

第一步:构建打包

在开发机器上执行打包:

bash
cd angryant-biz-blank
mvn clean package

打包产物位于 target/output/ 目录,或直接使用 target/output.zip

第二步:上传文件

将整个 output/ 目录上传到服务器:

bash
# 上传 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                    # 简要说明

第三步:赋予执行权限

bash
cd /home/java/your-project/
chmod +x run.sh info_log.sh error_log.sh

第四步:修改配置文件(重要)

4.1 修改 application-prod.yml

打开 application-prod.yml,修改以下关键配置:

yaml
# 服务端口
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

修改日志存储路径:

xml
<!-- 原始模板值(wj 为项目名称,需替换为你的实际项目名) -->
<property name="log.path" value="/home/angryant/logs/wj" />

<!-- 改为实际部署路径 -->
<property name="log.path" value="/home/java/your-project/logs" />

修改后需要确保该目录存在:

bash
mkdir -p /home/java/your-project/logs

4.3 修改 run.sh

模板中的 run.sh 如下,需要逐项修改:

bash
#!/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 行)
bash
# 原始值
APP_NAME=angryant-XXX.jar

# 改为实际 jar 包名
APP_NAME=angryant-biz-blank.jar
② JVM 参数(第 5 行)

模板中的 JVM 参数包含多个已废弃的选项(PermSizeCMSClassUnloadingEnabled 等)和拼写错误(25zh6m)。建议替换为以下推荐配置:

bash
# 推荐的 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"

参数说明:

参数说明建议值
-Xms2gJVM 初始堆内存根据服务器内存,建议 2g ~ 4g
-Xmx4gJVM 最大堆内存根据服务器内存,建议 4g ~ 8g
-Xmn512m年轻代大小通常为堆内存的 1/4 ~ 1/3
-XX:+UseG1GC使用 G1 垃圾收集器替代已废弃的 CMS
-Xlog:gc*:file=...GC 日志路径必须替换为实际部署路径
③ 日志查看路径(第 63 行)
bash
# 原始值
tail -n 100 -f /home/java/run_info.log

# 改为实际路径
tail -n 100 -f /home/java/your-project/run_info.log
④ 备份路径(第 69-74 行)
bash
# 原始值
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'

首次使用前创建备份目录:

bash
mkdir -p /home/java/your-project/backup/

第五步:启动服务

bash
# 启动
sh run.sh start

# 查看状态
sh run.sh status

# 实时查看启动日志
sh run.sh log

# 或使用快捷脚本查看信息日志
sh info_log.sh

# 查看错误日志
sh error_log.sh

第六步:验证服务

bash
# 查看进程
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 版本

bash
# 查看当前 JDK 版本和架构
java -version
java -XshowSettings:properties -version 2>&1 | grep os.arch

# 确认 os.arch 输出为 aarch64

推荐的 JVM 参数

bash
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)架构

bash
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"
  • ParallelGCThreadsConcGCThreads 根据 CPU 核心数调整(飞腾通常 8~16 核)
  • GC 暂停时间适当放宽(飞腾单核性能略弱于鲲鹏)

海光 / 兆芯(x86_64)架构

海光和兆芯为 x86_64 架构,与 Intel/AMD 兼容:

bash
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 指令集:

bash
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)

bash
# 使用麒麟软件仓库中的 JDK,或安装 OpenJDK
# 开放防火墙端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

统信(UOS)

UOS 基于 Debian,使用 systemd 管理服务,可配置开机自启:

bash
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):

nginx
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/

配置步骤

bash
# 1. 创建 Nginx 配置文件
sudo vi /etc/nginx/conf.d/your-project.conf

# 2. 粘贴上面的配置内容,修改 server_name 和路径

# 3. 检查配置语法
sudo nginx -t

# 4. 重新加载 Nginx
sudo nginx -s reload

HTTPS 配置(可选)

如需启用 HTTPS,在 server 块中添加 SSL 配置:

nginx
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 用户运行

bash
useradd -m -s /bin/bash javaapp
chown -R javaapp:javaapp /home/java/your-project/
su - javaapp
sh run.sh start

限制 JVM 堆外内存

bash
JVM="$JVM -XX:MaxDirectMemorySize=512m -XX:MaxMetaspaceSize=256m"

芯片架构速查表

芯片架构指令集JDK 推荐GC 策略特殊注意
Intel / AMDx86_64OpenJDK / Oracle JDKG1GC
鲲鹏ARM64毕昇 JDK / OpenJDK ARM64G1GC栈空间调大
飞腾ARM64飞腾 JDK / 龙蜥 JDKG1GCGC 线程数按核心调整
海光x86_64OpenJDKG1GC与 Intel 兼容
兆芯x86_64OpenJDKG1GC与 Intel 兼容
龙芯LoongArch龙芯官方 JDKG1GCJNI 库需重编译

基于 MIT 许可发布.