Files
rlz/docs/开发环境方案.md
renjianbo cccc88e2e2 refactor: de-submodule rlz backend and integrate all source code
Move rlz/ backend from git submodule to first-class source tree.
Includes all RuoYi 3.8.3 backend source, mapper XMLs, SQL scripts,
Dockerfile, and build configs. Also adds frontend enhancements:

- Order management: status filters, refund review, settlement (Issue #14)
- Hospital management: level/description/image fields (Issue #16)
- User management: type filter, userLevel, stats endpoint (Issue #17)
- Dev environment: application-dev.yml for rlz_dev database
- CI/CD: Drone pipeline configuration (.drone.yml)
- Mini program: API config extraction (coupon/utils/config.js)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-17 00:20:42 +08:00

8.4 KiB
Raw Blame History

瑞来健康 (RLZ) 开发环境方案

创建日期:2026-05-14


一、现状诊断

问题 详情
代码同步混乱 本地 → Gitea → 服务器三处代码,靠手动同步,容易产生冲突
无环境隔离 只有一个服务器、一个数据库 rlz,开发和生产共用,数据易污染
服务器资源紧张 2核 CPU,7.5GB 内存(仅剩 ~762MB),跑不了第二个 Java 实例
无 CI/CD Drone CI 已部署但未配置 .drone.yml,每次靠手动构建部署
移动端 URL 硬编码 Android / 小程序切换环境需要改代码重新打包

当前架构

┌──────────┐    git push     ┌──────────┐    手动拉取    ┌──────────────┐
│  本地开发  │ ───────────────→ │  Gitea   │ ────────────→ │  云服务器     │
│  Windows  │                 │  :3001   │               │  101.43.95.130│
└──────────┘                 └──────────┘               └──────────────┘
                                                              │
                                    ┌─────────────────────────┘
                                    ▼
                              ┌──────────────┐
                              │  腾讯云 CynosDB│
                              │  MySQL 8      │
                              │  数据库: rlz   │
                              └──────────────┘

二、Git 分支策略

main (生产)
  │
  ├── dev (开发主线)
  │     ├── feat/xxx   (功能分支)
  │     ├── fix/xxx    (修复分支)
  │     └── hotfix/xxx (紧急修复分支)
  │
  └── release/xxx (发布候选,可选)

工作流

步骤 操作 说明
1 git checkout dev 切换到开发分支
2 git checkout -b feat/xxx 创建功能分支
3 本地开发 + 测试 本机运行后端连 rlz_dev 库
4 git push origin feat/xxx 推送功能分支到 Gitea
5 创建 PR / merge 到 dev 代码评审后合并
6 在 dev 上集成测试 服务器可临时部署 dev 版本验证
7 dev → main merge 测试通过后合并到生产分支
8 Drone CI 自动部署 main 分支 push 后自动构建部署

初始化命令

# 在本地项目根目录执行
cd D:/androidPj/rlz

# 创建 dev 分支
git checkout -b dev
git push origin dev

# main 分支保持稳定,后续在 dev 上开发

三、环境划分

由于服务器内存仅剩 762MB,不适合在服务器上同时跑两套 Java 后端。采用 本地开发 + 远程数据库 模式。

环境 后端位置 数据库 Redis 用途
本地开发 本机运行 IDE/Maven 云 MySQL 新库 rlz_dev 本机 Docker 或服务器 Redis 日常开发调试
服务器生产 Docker rlz-backend:8039 云 MySQL rlz Docker rlz-redis:6379 正式对外服务

数据库隔离

在腾讯云 CynosDB 上创建独立开发库:

-- 创建开发数据库
CREATE DATABASE rlz_dev DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 从生产库复制表结构(不含数据)
-- 方式一:用 mysqldump 导出结构
-- mysqldump -h gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com -P 24936 -u root -p \
--   --no-data rlz | mysql -h ... -u root -p rlz_dev

-- 方式二:运行项目的 SQL 初始化脚本
-- mysql -h ... -u root -p rlz_dev < rlz/sql/ry_20220625.sql
-- mysql -h ... -u root -p rlz_dev < rlz/sql/quartz.sql

四、后端 Spring Profile 配置

确保本地开发和生产环境配置分离:

application-dev.yml(本地开发用)

# 本地开发 profile
spring:
  datasource:
    druid:
      master:
        url: jdbc:mysql://gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936/rlz_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: ${MYSQL_PASSWORD}
  redis:
    host: 101.43.95.130   # 开发时可连服务器 Redis,或本地启动
    port: 6379

server:
  port: 8039

application-docker.yml(服务器生产用)

# Docker 生产环境 - 通过环境变量注入
spring:
  datasource:
    druid:
      master:
        url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?...
  redis:
    host: ${REDIS_HOST:redis}
    port: ${REDIS_PORT:6379}

server:
  port: ${SERVER_PORT:8039}

本地启动命令

# Windows 本地开发
cd D:\androidPj\rlz\rlz
mvn spring-boot:run -Dspring-boot.run.profiles=dev

# 或指定密码
mvn spring-boot:run -Dspring-boot.run.profiles=dev -Dspring-boot.run.arguments=--MYSQL_PASSWORD=你的密码

五、Drone CI 自动部署

服务器已运行 Drone Server (端口 3002) 和 Drone Runner,只需创建 .drone.yml。

.drone.yml 配置

kind: pipeline
type: docker
name: rlz-deploy

trigger:
  branch:
    - main          # 只有 main 分支 push 才触发部署
  event:
    - push

steps:
  - name: build-backend
    image: maven:3.8-openjdk-8
    commands:
      - cd rlz
      - mvn clean package -DskipTests

  - name: docker-build-push
    image: docker:latest
    volumes:
      - name: docker_sock
        path: /var/run/docker.sock
    commands:
      - cd rlz
      - docker build -t rlz-backend:latest .
      - cd ..
      - docker compose up -d --build

volumes:
  - name: docker_sock
    host:
      path: /var/run/docker.sock

注意:需要在 Gitea → Drone 中激活 admin/rlz 仓库,并将上述配置推送到仓库。


六、移动端 API 地址管理

Android (peizhen)

在 app/build.gradle 中配置 BuildConfig:

android {
    buildTypes {
        debug {
            buildConfigField "String", "API_BASE_URL", '"http://192.168.x.x:8039"'
        }
        release {
            buildConfigField "String", "API_BASE_URL", '"http://101.43.95.130:8039"'
        }
    }
}

代码中统一使用 BuildConfig.API_BASE_URL,不再硬编码。

微信小程序 (coupon)

在 utils/ 下创建 config.js:

// config.js - 切换环境只需改这里
const config = {
  // 开发环境(本地后端)
  // baseUrl: 'http://192.168.x.x:8039',
  // 生产环境
  baseUrl: 'http://101.43.95.130:8039',
}

module.exports = config

所有请求统一引用 config.baseUrl。


七、完整开发流程

日常开发流程

1. git checkout dev && git pull
2. 本地启动后端 (dev profile → rlz_dev 库)
3. Android Studio 用 debug 构建 → 指向本地后端
4. 微信开发者工具 → 改 config.js baseUrl 指本地
5. 开发 + 本地测试
6. git add/commit/push 到 dev 分支
7. 需要发布时,dev merge 到 main,触发 Drone 自动部署

紧急修复流程

1. git checkout main
2. git checkout -b hotfix/xxx
3. 修复 → 本地验证
4. merge 到 main(触发部署)
5. merge 回 dev(保持 dev 同步)

八、改进执行清单

序号 任务 优先级 说明
1 创建 dev 分支并推送 高 开发和生产代码分离
2 云 MySQL 创建 rlz_dev 库 高 数据隔离,避免污染生产
3 确认 application-dev.yml 配置 高 指向 rlz_dev 库
4 配置 Drone CI .drone.yml 高 自动化部署,不再手动
5 Android 添加 BuildConfig 中 debug/release 自动切换 API 地址
6 小程序抽离 config.js 中 切换环境不改业务代码
7 服务器添加 Drone webhook 中 Gitea push 自动触发构建
8 编写本地开发启动脚本 低 一键启动本地环境

九、注意事项

  1. 云数据库密码 需保密,不要提交到 Git 仓库,使用环境变量或 .env 文件(已被 .gitignore 忽略)
  2. 服务器内存有限(762MB 可用),不要在服务器上跑开发环境
  3. 数据库备份 — 在对 rlz 生产库做结构变更前,务必先备份
  4. Android 签名 — ruilaizi.jks 不要提交到 Git,已在 .gitignore 中