linux 部署单体版本
服务器选购建议
直接访问 阿里云 ECS 官网 购买,无需等待官方活动。
推荐配置清单
| 配置项 | 推荐值 |
|---|
| 付费类型 | 按量付费 |
| 实例规格 | 4vCPU/16GiB/Intel 处理器 |
| 操作系统镜像 | CentOS 7.9 64 位 |
| 系统盘容量 | 100GB |
| 公网 IP | 分配 |
| 带宽计费模式 | 按使用流量 |
| 带宽峰值 | 100Mbps |
环境初始化
ℹ环境依赖
单体版本需要安装 JDK 17、MySQL 8.0、Redis、Nginx 等基础组件,具体安装步骤请参考微服务版本的环境初始化文档。
确保以下组件已正确安装:
- JDK 17:单体版本基于 Java 17 运行
- MySQL 8.0:数据库服务
- Redis:缓存服务
- Nginx:Web 服务器和反向代理
配置 Nginx
1. 创建前端配置文件
vim /etc/nginx/conf.d/pigx-ui.conf
2. 写入以下配置内容
server {
listen 80;
server_name localhost;
# 启用 Gzip 压缩提升传输效率
gzip on;
gzip_static on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_proxied any;
gzip_types text/plain text/xml text/css;
gzip_vary on;
gzip_disable "MSIE [1-6].(?!.*SV1)";
# 前端静态资源目录(dist 内的文件直接放在此目录下)
root /data/pigx-ui/;
# API 反向代理配置
location ^~/api/ {
proxy_pass http://127.0.0.1:9999/; # 指向单体应用端口,注意斜杠
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
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 http;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header from "";
# 屏蔽敏感路径(双重保护)
location ~ ^/api/(actuator|swagger-ui|v3/api-docs|swagger-resources|webjars|doc.html|druid) {
return 403;
}
}
}
3. 重启 Nginx 服务
nginx -t # 检查配置语法
nginx -s reload # 重载配置
前端构建部署
1. 本地构建前端资源
进入 pigx-ui-pro 目录执行构建命令:
pnpm install # 首次需要安装依赖
pnpm build # 构建生产版本
构建完成后会在项目根目录生成 dist 文件夹。
2. 上传静态资源
将 dist 文件夹内的所有文件(不包括 dist 文件夹本身)上传到服务器的 /data/pigx-ui/ 目录。
⚠目录结构
确保静态资源直接位于 /data/pigx-ui/ 下,而不是 /data/pigx-ui/dist/,否则 Nginx 无法正确访问。
后端构建部署
1. 打包单体应用
💡构建环境
在项目根目录(pigx)执行打包命令,使用 boot 配置文件激活单体模式。
cd pigx
mvn clean install -Pboot
打包完成后,在 pigx-boot/target/ 目录下生成 pigx-boot.jar 文件。
2. 上传 JAR 包
将 pigx-boot.jar 上传到服务器的应用目录(如 /data/pigx/)。
3. 启动应用
cd /data/pigx/
nohup java -Xmx4g -Xms4g -XX:+UseG1GC -Dfile.encoding=UTF-8 -jar pigx-boot.jar > /dev/null 2>&1 &
ℹJVM 参数说明
-Xmx4g:最大堆内存 4GB
-Xms4g:初始堆内存 4GB
-XX:+UseG1GC:使用 G1 垃圾回收器
-Dfile.encoding=UTF-8:指定字符编码
4. 验证启动状态
# 查看进程
ps -ef | grep pigx-boot
# 查看日志
tail -f nohup.out
生产安全加固
1. 关闭敏感端点
⚠生产必做
生产环境务必关闭 Swagger 文档和 Actuator 监控端点,避免敏感信息泄露。
编辑 pigx-boot/src/main/resources/application.yml 配置文件:
# 关闭敏感端点
management:
endpoints:
enabled-by-default: false
# 关闭 Swagger 文档
springdoc:
api-docs:
enabled: false
2. 配置安全组规则
⚠端口安全
服务器仅对外开放 80/443 端口,所有后端服务端口(如 9999)不得暴露到公网。
推荐端口策略
| 端口号 | 功能 | 开放范围 | 生产建议 |
|---|
| 80 | HTTP 访问 | 公网 | 开放 |
| 443 | HTTPS 访问 | 公网 | 开放(建议配置 SSL) |
| 9999 | 应用服务 | 内网 | 禁止公网访问 |
| 3306 | MySQL 数据库 | 本地 | 仅 127.0.0.1 访问 |
| 6379 | Redis 缓存 | 本地 | 仅 127.0.0.1 访问 |
Nginx 配置验证
✓双重保护
本文提供的 Nginx 配置已包含敏感路径屏蔽规则,即使应用端点未关闭,Nginx 也会拦截访问请求。
确保复制本文档中的 Nginx 配置,其中包含以下安全规则:
# 屏蔽所有敏感路径
location ~ ^/api/(actuator|swagger-ui|v3/api-docs|swagger-resources|webjars|doc.html) {
return 403;
}
3. 数据库安全
# 禁止 root 远程登录
mysql -u root -p
mysql> DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
mysql> FLUSH PRIVILEGES;
# 创建专用应用账户
mysql> CREATE USER 'pigx'@'localhost' IDENTIFIED BY 'strong_password';
mysql> GRANT ALL PRIVILEGES ON pigx.* TO 'pigx'@'localhost';
mysql> FLUSH PRIVILEGES;
4. 防火墙配置
# 仅开放必要端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
⚠安全警告
网络安全无小事!本部署流程基于 PIGX 服务 2000+ 企业客户的生产实践总结,请严格遵循安全规范,切勿图方便开放不必要的端口。
常见问题
1. 访问页面显示 502 错误
检查后端应用是否正常启动:
curl http://127.0.0.1:9999/actuator/health # 如果已关闭端点则无法访问
ps -ef | grep pigx-boot # 检查进程是否存在
2. 静态资源 404
确认 Nginx root 目录下直接包含 index.html,而不是 dist/index.html。
3. 内存不足
单体应用建议最低配置 4GB 内存,可根据实际业务量调整 JVM 参数:
# 2GB 内存配置
java -Xmx2g -Xms2g -XX:+UseG1GC -jar pigx-boot.jar
# 8GB 内存配置
java -Xmx8g -Xms8g -XX:+UseG1GC -jar pigx-boot.jar