XuqmGroup-Vue3SDK/docs/DEPLOY.md
2026-04-21 22:25:35 +08:00

6.7 KiB

部署文档

一、基础设施要求

组件 版本 说明
JDK 21 GraalVM 或 Eclipse Temurin
MySQL 8.0+ 4 个独立数据库
Redis 7.x 验证码、会话标记
Nginx 1.24+ 前端静态 + API 反代
Maven 3.9+ 后端构建
Node.js 22+ 前端构建

二、数据库初始化

服务启动时通过 ddl-auto: update 自动建表,只需提前创建数据库:

CREATE DATABASE xuqm_tenant CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE xuqm_im     CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE xuqm_push   CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE xuqm_update CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

三、后端构建与启动

构建

cd XuqmGroup-Server
mvn clean package -DskipTests

各模块 jar 生成于 {module}/target/{module}-0.1.0-SNAPSHOT.jar

环境变量

tenant-service:8081

export SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/xuqm_tenant?...
export SPRING_DATASOURCE_USERNAME=xuqm
export SPRING_DATASOURCE_PASSWORD=your_db_password
export SPRING_DATA_REDIS_HOST=redis
export SPRING_MAIL_USERNAME=noreply@xuqm.com
export SPRING_MAIL_PASSWORD=your_smtp_password
export JWT_SECRET=your_256bit_secret
export OPS_ADMIN_USERNAME=admin
export OPS_ADMIN_PASSWORD=your_ops_password

im-service:8082

export SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/xuqm_im?...
export SPRING_DATASOURCE_USERNAME=xuqm
export SPRING_DATASOURCE_PASSWORD=your_db_password
export SPRING_DATA_REDIS_HOST=redis
export JWT_SECRET=your_256bit_secret_im

push-service:8083

export SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/xuqm_push?...
export SPRING_DATASOURCE_USERNAME=xuqm
export SPRING_DATASOURCE_PASSWORD=your_db_password
export JWT_SECRET=your_256bit_secret_push
# 华为推送
export HUAWEI_APP_ID=your_huawei_app_id
export HUAWEI_APP_SECRET=your_huawei_secret
# 小米推送
export XIAOMI_APP_SECRET=your_xiaomi_secret
# iOS APNs
export APNS_KEY_ID=your_key_id
export APNS_TEAM_ID=your_team_id
export APNS_KEY_PATH=/opt/xuqm/apns_key.p8
export APNS_BUNDLE_ID=com.yourcompany.app

update-service:8084

export SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/xuqm_update?...
export SPRING_DATASOURCE_USERNAME=xuqm
export SPRING_DATASOURCE_PASSWORD=your_db_password
export JWT_SECRET=your_256bit_secret_update
export UPDATE_UPLOAD_DIR=/data/xuqm/update
export UPDATE_BASE_URL=https://update.xuqm.com

启动

java -jar tenant-service/target/tenant-service-*.jar &
java -jar im-service/target/im-service-*.jar &
java -jar push-service/target/push-service-*.jar &
java -jar update-service/target/update-service-*.jar &

四、前端构建与部署

cd XuqmGroup-Web
yarn install
yarn workspace tenant-platform build   # dist/ → /var/www/tenant
yarn workspace ops-platform build      # dist/ → /var/www/ops

Nginx 配置

# 租户开放平台
server {
    listen 80;
    server_name tenant.xuqm.com;
    root /var/www/tenant;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:8081/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 运营管理平台
server {
    listen 80;
    server_name ops.xuqm.com;
    root /var/www/ops;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:8081/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# IM WebSocket 反代
server {
    listen 80;
    server_name im.xuqm.com;

    location /ws/im {
        proxy_pass http://127.0.0.1:8082;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }

    location /api/im/ {
        proxy_pass http://127.0.0.1:8082/api/im/;
    }
}

# 版本管理文件服务
server {
    listen 80;
    server_name update.xuqm.com;

    location / {
        proxy_pass http://127.0.0.1:8084/;
    }
}

五、Docker Compose可选

version: '3.9'

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: xuqm
      MYSQL_PASSWORD: xuqm_password
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

  tenant-service:
    image: eclipse-temurin:21-jre
    volumes:
      - ./XuqmGroup-Server/tenant-service/target:/app
    command: java -jar /app/tenant-service-0.1.0-SNAPSHOT.jar
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/xuqm_tenant?...
      SPRING_DATA_REDIS_HOST: redis
    ports:
      - "8081:8081"
    depends_on: [mysql, redis]

  im-service:
    image: eclipse-temurin:21-jre
    volumes:
      - ./XuqmGroup-Server/im-service/target:/app
    command: java -jar /app/im-service-0.1.0-SNAPSHOT.jar
    ports:
      - "8082:8082"
    depends_on: [mysql, redis]

  push-service:
    image: eclipse-temurin:21-jre
    volumes:
      - ./XuqmGroup-Server/push-service/target:/app
    command: java -jar /app/push-service-0.1.0-SNAPSHOT.jar
    ports:
      - "8083:8083"
    depends_on: [mysql]

  update-service:
    image: eclipse-temurin:21-jre
    volumes:
      - ./XuqmGroup-Server/update-service/target:/app
      - update_files:/data/xuqm/update
    command: java -jar /app/update-service-0.1.0-SNAPSHOT.jar
    environment:
      UPDATE_UPLOAD_DIR: /data/xuqm/update
    ports:
      - "8084:8084"
    depends_on: [mysql]

volumes:
  mysql_data:
  update_files:

六、发版流程汇总

平台 步骤
后端 mvn clean package → 替换 jar → 重启服务
前端 yarn build → 替换 dist/ → Nginx 无需重启
Android SDK 修改版本号 → ./gradlew publish → Nexus
iOS SDK (SPM) 修改版本号 → git tag x.y.z && git push origin x.y.z
iOS SDK (CocoaPods) pod repo push xuqm-specs XuqmSDK.podspec
RN SDK 修改 package.json version → npm publish
Vue3 SDK 修改 package.json version → npm run build && npm publish
HarmonyOS SDK 修改 oh-package.json5 version → ohpm publish

七、健康检查

各服务均暴露 Spring Actuator 端点:

curl http://localhost:8081/actuator/health
curl http://localhost:8082/actuator/health
curl http://localhost:8083/actuator/health
curl http://localhost:8084/actuator/health

正常返回:{"status":"UP"}