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>
This commit is contained in:
291
docs/开发环境方案.md
Normal file
291
docs/开发环境方案.md
Normal file
@@ -0,0 +1,291 @@
|
||||
# 瑞来健康 (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 后自动构建部署 |
|
||||
|
||||
### 初始化命令
|
||||
|
||||
```bash
|
||||
# 在本地项目根目录执行
|
||||
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 上创建独立开发库:
|
||||
|
||||
```sql
|
||||
-- 创建开发数据库
|
||||
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(本地开发用)
|
||||
|
||||
```yaml
|
||||
# 本地开发 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(服务器生产用)
|
||||
|
||||
```yaml
|
||||
# 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}
|
||||
```
|
||||
|
||||
### 本地启动命令
|
||||
|
||||
```bash
|
||||
# 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 配置
|
||||
|
||||
```yaml
|
||||
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:
|
||||
|
||||
```groovy
|
||||
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`:
|
||||
|
||||
```javascript
|
||||
// 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` 中
|
||||
Reference in New Issue
Block a user