项目部署手册
本文档说明生产环境的部署流程:后端单体服务(Docker)+ 前端静态资源(Nginx)。
平台默认以单体模式交付:后端只需部署一个
pointlion-server容器(48080 端口),无需 Nacos,只需 MySQL + Redis。微服务集群部署请联系我们获取专项支持。
一、部署架构
浏览器
│
▼
Nginx (80/443)
├── / → 前端静态资源(dist)
├── /admin-api/ → 代理到后端 127.0.0.1:48080
├── /app-api/ → 代理到后端 127.0.0.1:48080(移动端接口)
└── /im/ws → WebSocket 代理(即时通讯)
│
▼
pointlion-server (Docker, 48080)
├── MySQL (3306)
└── Redis (6379)二、环境要求
服务器配置建议
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 8 核+ |
| 内存 | 8GB | 16GB+ |
| 硬盘 | 100GB SSD | 200GB+ SSD |
| 操作系统 | CentOS 7+ / Ubuntu 18.04+ | Ubuntu 22.04+ |
软件环境
| 软件 | 版本要求 | 说明 |
|---|---|---|
| Docker | 20.10+ | 后端容器化部署 |
| MySQL | 5.7+ / 8.0 | 数据库 |
| Redis | 6.0+ | 缓存 |
| RocketMQ | 5.x | 消息队列(必须):BPM 流程事件、ERP/MES/WMS 三端联动集成事件 |
| XXL-Job Admin | 2.x | 定时任务调度中心(dev/生产环境需要) |
| Nginx | 1.18+ | 前端静态资源 + 反向代理 |
| JDK | 21(JDK21 版)/ 1.8(JDK8 版) | 仅 Jar 直跑方式需要,须与打包所用版本线一致(版本对照见《启动指南》) |
| Node.js 16+ / pnpm | 16+ | 前端构建(构建机需要,服务器不需要) |
三、初始化数据库
-- 创建数据库
CREATE DATABASE pointlion CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# 导入脚本(底座脚本 + 各已购业务模块脚本,位于交付工程的数据库脚本目录)
mysql -u root -p pointlion < <底座SQL脚本>.sql
mysql -u root -p pointlion < <业务模块SQL脚本>.sql四、后端打包
在构建机(或本地开发机)上打包:
cd pointlion-cloud
# 单体打包命令(必须带 -Pstandalone-package,详见《启动指南》4.4)
mvn package -am -pl pointlion-server -Dmaven.test.skip=true -Pstandalone-package产物:pointlion-server/target/pointlion-server.jar
打包前确认:
pointlion-server/pom.xml中已启用全部已购模块(依赖已取消注释),漏启用会导致线上功能缺失。
五、后端部署
方式一:Docker 部署(推荐)
工程自带两个文件,位于 pointlion-cloud/pointlion-server/ 目录:
Dockerfile:构建后端镜像deploy.sh:一键重建容器
5.1 修改环境配置
容器默认以 dev 环境(SPRING_PROFILES_ACTIVE=dev)启动,先修改 application-dev.yaml 中生产环境的 MySQL / Redis 地址:
spring:
datasource:
dynamic:
datasource:
master:
url: jdbc:mysql://127.0.0.1:3306/pointlion?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
username: your_db_user
password: your_db_password
redis:
host: 127.0.0.1
port: 6379
database: 0
password: your_redis_password修改后重新打包(配置文件打包在 Jar 内)。
5.2 构建镜像
把 Jar 包复制到 pointlion-server 目录(与 Dockerfile 同级),并命名为 pointlion-server.jar:
cp pointlion-server/target/pointlion-server.jar <服务器>/pointlion-cloud/pointlion-server/pointlion-server.jar
cd pointlion-cloud/pointlion-server
# 构建镜像
docker build -t pointlion-server .Dockerfile 内容(工程自带,无需修改;JDK21 版默认使用 21-jre 基础镜像,文件末尾附带注释掉的 8-jre 版本,JDK8 版用户将二者对调即可):
## JDK21 版(主线默认)
FROM eclipse-temurin:21-jre
## 创建目录,并使用它作为工作目录
RUN mkdir -p /pointlion-server
WORKDIR /pointlion-server
## 将后端项目的 Jar 文件,复制到镜像中
COPY ./pointlion-server.jar app.jar
## 设置 TZ 时区
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms1g -Xmx2g"
## 暴露后端项目的 48080 端口
EXPOSE 48080
## 启动后端项目
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar"]
## JDK8 版:将上面的 FROM 行替换为
## FROM eclipse-temurin:8-jre5.3 一键部署
deploy.sh 内容(工程自带):
#!/bin/bash
set -e
# 配置区域 - 只需要修改这里
SERVICE_NAME="pointlion-server"
HOST_PORT=48080
CONTAINER_PORT=48080
SPRING_PROFILE="dev"
## 第一步:删除可能存在的旧容器
if docker ps -a --format '{{.Names}}' | grep -q "^${SERVICE_NAME}$"; then
docker stop ${SERVICE_NAME} || true
docker rm ${SERVICE_NAME} || true
fi
## 第二步:启动新的容器
docker run -d \
--name ${SERVICE_NAME} \
-p ${HOST_PORT}:${CONTAINER_PORT} \
-e "SPRING_PROFILES_ACTIVE=${SPRING_PROFILE}" \
-v /work/projects/${SERVICE_NAME}:/root/logs/ \
--network=host \
${SERVICE_NAME}按需调整 SPRING_PROFILE 后执行:
chmod +x deploy.sh
./deploy.sh说明:
| 配置 | 说明 |
|---|---|
--network=host | 容器直接使用宿主机网络,application-dev.yaml 里用 127.0.0.1 即可连到宿主 MySQL/Redis |
-v /work/projects/pointlion-server:/root/logs/ | 日志目录挂载到宿主机,便于排查问题 |
JAVA_OPTS | 默认 -Xms1g -Xmx2g,可在 docker run 时用 -e "JAVA_OPTS=-Xms2g -Xmx4g" 覆盖 |
启动约需 60 秒,查看日志确认:
docker logs -f pointlion-server
# 看到 Started PointlionServerApplication 即启动成功
curl http://127.0.0.1:48080/admin-api/system/tenant/get-id-by-name?name=点狮方式二:Jar 直接运行(无 Docker 环境)
# 创建目录
mkdir -p /opt/pointlion
cp pointlion-server.jar /opt/pointlion/
# 启动
nohup java -Xms1g -Xmx2g -jar /opt/pointlion/pointlion-server.jar \
--spring.profiles.active=dev \
> /opt/pointlion/server.out 2>&1 &配置开机自启(systemd,ExecStart 的 JDK 路径按所选版本线修改):
# /etc/systemd/system/pointlion-server.service
[Unit]
Description=PointLion Server
After=network.target
[Service]
Type=simple
# JDK21 版:/usr/local/jdk-21/bin/java
# JDK8 版:/usr/local/jdk1.8/bin/java
ExecStart=/usr/local/jdk-21/bin/java -Xms1g -Xmx2g -jar /opt/pointlion/pointlion-server.jar --spring.profiles.active=dev
ExecStop=/bin/kill -15 $MAINPID
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable --now pointlion-server六、前端打包
6.1 修改生产环境配置
编辑 pointlion-cloud-ui/.env.prod:
# 后端接口地址(生产环境改为你的服务器地址,端口 80/443 走 Nginx 时可写域名)
VITE_BASE_URL='http://your-server-address'
# 接口前缀(保持默认)
VITE_API_URL=/admin-api如果前后端同域部署(Nginx 同时托管前端和 API 代理),
VITE_BASE_URL可留空字符串,前端请求将走相对路径,由 Nginx 代理转发。
6.2 构建
cd pointlion-cloud-ui
pnpm install
# 生产构建(注意是 build:prod,不是 build)
pnpm build:prod产物在 dist/ 目录。
6.3 上传到服务器
mkdir -p /usr/share/nginx/html/pointlion
cp -r dist/* /usr/share/nginx/html/pointlion/七、Nginx 配置
创建 /etc/nginx/conf.d/pointlion.conf:
server {
listen 80;
server_name your-domain.com; # 没有域名可填服务器 IP
charset utf-8;
client_max_body_size 500m; # 与后端文件上传限制保持一致
# 前端静态资源(Vue Router history 模式必须配置 try_files)
location / {
root /usr/share/nginx/html/pointlion;
index index.html;
try_files $uri $uri/ /index.html;
}
# 静态资源长缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
root /usr/share/nginx/html/pointlion;
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
# 管理后台 API 代理
location /admin-api/ {
proxy_pass http://127.0.0.1:48080/admin-api/;
proxy_set_header Host $http_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;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
# 移动端 App API 代理
location /app-api/ {
proxy_pass http://127.0.0.1:48080/app-api/;
proxy_set_header Host $http_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;
}
# WebSocket 代理(IM 即时通讯,必须配置升级头)
location /im/ws {
proxy_pass http://127.0.0.1:48080/im/ws;
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 X-Real-IP $remote_addr;
proxy_read_timeout 300s;
proxy_buffering off;
}
}生效:
nginx -t # 检查语法
nginx -s reload # 重载配置HTTPS 部署:在上述 server 块基础上增加 443 监听与 SSL 证书配置,并将 80 端口 301 跳转到 https 即可,代理部分不变。
八、部署验证清单
- [ ]
docker ps中pointlion-server容器状态为 Up - [ ]
curl http://127.0.0.1:48080/admin-api/system/auth/get-permission-info返回 401(未带 token,说明服务通) - [ ] 浏览器打开
http://your-domain出现登录页 - [ ] 使用 admin 账号登录成功
- [ ] 首页各模块页面正常加载、无 404
- [ ] 文件上传功能正常(Nginx
client_max_body_size已调大) - [ ] IM 在线消息正常(WebSocket 连接建立)
- [ ] 服务器日志目录
/work/projects/pointlion-server有日志写入
九、常见问题
Q1: 容器启动后立刻退出?
docker logs pointlion-server # 查看报错常见原因:MySQL/Redis 地址或密码错误、数据库未初始化。容器使用 host 网络,配置文件里写 127.0.0.1 即可访问宿主服务。
Q2: 前端页面打开空白 / 刷新 404?
前端是 Vue Router history 模式,Nginx 必须配置 try_files $uri $uri/ /index.html。
Q3: 登录页验证码/接口全部报错?
检查 Nginx 的 /admin-api/ 代理是否转发到 127.0.0.1:48080;检查浏览器控制台请求地址是否为打包时 VITE_BASE_URL 配置的地址。
Q4: IM 消息收不到?
检查 Nginx /im/ws 的 WebSocket 升级配置(Upgrade/Connection 头);HTTPS 下需使用 wss:// 协议。
Q5: 端口被占用?
lsof -i:48080 # 查找占用进程,处理后重新执行 ./deploy.shQ6: 文件上传报 413?
Nginx client_max_body_size 未调大(示例中已设为 500m,与后端 spring.servlet.multipart.max-file-size 一致)。
Q7: 升级版本如何操作?
# 1. 重新打包并替换 Jar
mvn package -am -pl pointlion-server -Dmaven.test.skip=true -Pstandalone-package
cp pointlion-server/target/pointlion-server.jar <pointlion-server目录>/pointlion-server.jar
# 2. 重建镜像并重启
cd <pointlion-server目录>
docker build -t pointlion-server .
./deploy.sh
# 3. 数据库按需执行增量 SQL 脚本Q8: 防火墙需要放行哪些端口?
| 端口 | 用途 | 是否对外 |
|---|---|---|
| 80 / 443 | Nginx(唯一对外入口) | ✅ |
| 48080 | 后端(建议仅本机访问,由 Nginx 代理) | ❌ |
| 3306 / 6379 | MySQL / Redis(仅本机/内网) | ❌ |
附录:端口与产物说明
| 项 | 说明 |
|---|---|
| 后端镜像 | pointlion-server(JDK21 版基于 eclipse-temurin:21-jre;JDK8 版基于 eclipse-temurin:8-jre) |
| 后端 Jar | pointlion-server/target/pointlion-server.jar |
| 前端产物 | pointlion-cloud-ui/dist/ |
| 后端端口 | 48080(网关与单体统一入口) |
| 日志目录 | 宿主机 /work/projects/pointlion-server |
技术支持
- 邮箱: 439635374@qq.com
- 官网: www.dianshixinxi.com
- 在线演示: http://admin.dianshixinxi.com:90
