Skip to content

项目部署手册 ​

本文档说明生产环境的部署流程:后端单体服务(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)

二、环境要求 ​

服务器配置建议 ​

配置项最低要求推荐配置
CPU4 核8 核+
内存8GB16GB+
硬盘100GB SSD200GB+ SSD
操作系统CentOS 7+ / Ubuntu 18.04+Ubuntu 22.04+

软件环境 ​

软件版本要求说明
Docker20.10+后端容器化部署
MySQL5.7+ / 8.0数据库
Redis6.0+缓存
RocketMQ5.x消息队列(必须):BPM 流程事件、ERP/MES/WMS 三端联动集成事件
XXL-Job Admin2.x定时任务调度中心(dev/生产环境需要)
Nginx1.18+前端静态资源 + 反向代理
JDK21(JDK21 版)/ 1.8(JDK8 版)仅 Jar 直跑方式需要,须与打包所用版本线一致(版本对照见《启动指南》)
Node.js 16+ / pnpm16+前端构建(构建机需要,服务器不需要)

三、初始化数据库 ​

sql
-- 创建数据库
CREATE DATABASE pointlion CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
bash
# 导入脚本(底座脚本 + 各已购业务模块脚本,位于交付工程的数据库脚本目录)
mysql -u root -p pointlion < <底座SQL脚本>.sql
mysql -u root -p pointlion < <业务模块SQL脚本>.sql

四、后端打包 ​

在构建机(或本地开发机)上打包:

bash
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 地址:

yaml
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:

bash
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 版用户将二者对调即可):

dockerfile
## 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-jre

5.3 一键部署 ​

deploy.sh 内容(工程自带):

bash
#!/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 后执行:

bash
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 秒,查看日志确认:

bash
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 环境) ​

bash
# 创建目录
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 路径按所选版本线修改):

ini
# /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.target
bash
systemctl daemon-reload
systemctl enable --now pointlion-server

六、前端打包 ​

6.1 修改生产环境配置 ​

编辑 pointlion-cloud-ui/.env.prod:

bash
# 后端接口地址(生产环境改为你的服务器地址,端口 80/443 走 Nginx 时可写域名)
VITE_BASE_URL='http://your-server-address'

# 接口前缀(保持默认)
VITE_API_URL=/admin-api

如果前后端同域部署(Nginx 同时托管前端和 API 代理),VITE_BASE_URL 可留空字符串,前端请求将走相对路径,由 Nginx 代理转发。

6.2 构建 ​

bash
cd pointlion-cloud-ui

pnpm install

# 生产构建(注意是 build:prod,不是 build)
pnpm build:prod

产物在 dist/ 目录。

6.3 上传到服务器 ​

bash
mkdir -p /usr/share/nginx/html/pointlion
cp -r dist/* /usr/share/nginx/html/pointlion/

七、Nginx 配置 ​

创建 /etc/nginx/conf.d/pointlion.conf:

nginx
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;
    }
}

生效:

bash
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: 容器启动后立刻退出? ​

bash
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: 端口被占用? ​

bash
lsof -i:48080    # 查找占用进程,处理后重新执行 ./deploy.sh

Q6: 文件上传报 413? ​

Nginx client_max_body_size 未调大(示例中已设为 500m,与后端 spring.servlet.multipart.max-file-size 一致)。

Q7: 升级版本如何操作? ​

bash
# 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 / 443Nginx(唯一对外入口)✅
48080后端(建议仅本机访问,由 Nginx 代理)❌
3306 / 6379MySQL / Redis(仅本机/内网)❌

附录:端口与产物说明 ​

项说明
后端镜像pointlion-server(JDK21 版基于 eclipse-temurin:21-jre;JDK8 版基于 eclipse-temurin:8-jre)
后端 Jarpointlion-server/target/pointlion-server.jar
前端产物pointlion-cloud-ui/dist/
后端端口48080(网关与单体统一入口)
日志目录宿主机 /work/projects/pointlion-server

技术支持 ​