300 lines
12 KiB
Markdown
300 lines
12 KiB
Markdown
# GVSDS · 多租户 SAAS 管理平台
|
||
|
||
> GVS Distributed System — 基于 Django + gevent 的企业级 SAAS 框架,配套分布式 SDK 与多模板前端。
|
||
|
||
---
|
||
|
||
## ⚠️ 重要声明 · IMPORTANT
|
||
|
||
> **本仓库为 GVSDS 平台生产环境核心代码,不允许在本地或非授权环境中部署运行。**
|
||
|
||
- 🚫 **禁止本地部署**:本仓库代码仅供**已授权的运维人员**通过内部部署系统在受控环境中运行
|
||
- 🚫 **禁止私自 clone 后跑通**:任何 `python Main.py` / `gunicorn` / `python manage.py runserver` 的本地启动行为均属违规
|
||
- 🚫 **禁止公开演示/截图/录屏**:核心业务逻辑、特权流程、数据库结构、API 设计不得外传
|
||
- ✅ **允许的用途**:阅读源码学习架构、参与授权下的代码审查、提交合规的 PR
|
||
- ✅ **如需调试**:请联系平台运维团队申请**独立的测试沙盒环境**
|
||
|
||
违规者将依据《服务协议》追究责任。
|
||
|
||
---
|
||
|
||
## 一、项目定位⚠️ 重要声明 · IMPORTANT
|
||
|
||
> **本仓库为 GVSDS 平台生产环境核心代码,不允许在本地或非授权环境中部署运行。**
|
||
|
||
- 🚫 **禁止本地部署**:本仓库代码仅供**已授权的运维人员**通过内部部署系统在受控环境中运行
|
||
- 🚫 **禁止私自 clone 后跑通**:任何 `python Main.py` / `gunicorn` / `python manage.py runserver` 的本地启动行为均属违规
|
||
- 🚫 **禁止公开演示/截图/录屏**:核心业务逻辑、特权流程、数据库结构、API 设计不得外传
|
||
- ✅ **允许的用途**:阅读源码学习架构、参与授权下的代码审查、提交合规的 PR
|
||
- ✅ **如需调试**:请联系平台运维团队申请**独立的测试沙盒环境**
|
||
|
||
违规者将依据《GVSDS 平台使用协议》追究责任。
|
||
|
||
---
|
||
|
||
## 一、项目定位
|
||
|
||
GVSDS 是面向中小企业的多租户企业管理平台,核心能力:
|
||
|
||
- **多租户 SAAS 框架**:租户入驻、审核、数据隔离(公司 / 部门 / 工作组 / 商铺 四级)
|
||
- **企业资源管理(GERP)**:组织、角色、权限、菜单、工单、文件资产、文档
|
||
- **三大业务引擎**:分佣引擎(Commission)、支付网关(Payment)、分布式事务(Transaction)
|
||
- **分布式通信底座(MSYNC)**:服务注册 / 发现 / 跨服务调用
|
||
- **多模板前端**:GERP / CCCRB / AKS / MSOC / librok 等多套站点
|
||
- **多域名部署**:单一进程同时服务 `gvsds.com / gvsds.org / gvsds.dev / gvsds.studio / yc8z.org / ycbz.org / librok.gvsds.com` 等多个域名
|
||
|
||
详细架构说明参见 [SAAS_ARCHITECTURE.md](./SAAS_ARCHITECTURE.md)。
|
||
|
||
---
|
||
|
||
## 二、技术栈
|
||
|
||
| 层 | 技术 |
|
||
|---|---|
|
||
| **后端框架** | Django 4.2+ / DRF / SimpleJWT |
|
||
| **WSGI 服务器** | gevent + pywsgi(单进程多协程)/ Gunicorn 兼容 |
|
||
| **异步任务** | Celery + Redis(可降级同步执行) |
|
||
| **实时通信** | python-socketio |
|
||
| **数据库** | MySQL 5.7+(7 库分库路由) |
|
||
| **缓存 / 锁** | Redis(可降级 locmem) |
|
||
| **安全** | bcrypt / AES-256-GCM / JWT / 自研 IP 过滤 + 攻击检测 |
|
||
| **前端** | 原生 HTML / JS + 自研 NeoUI / GERPUI 组件 + Tailwind |
|
||
| **反向代理** | Nginx |
|
||
|
||
---
|
||
|
||
## 三、目录结构
|
||
|
||
```
|
||
d:\SMANAGE\
|
||
├── Main.py # WSGI 入口(gevent 启动 + 域名路由 + 中间件链)
|
||
├── manage.py # Django 命令行
|
||
├── gvsds/ # 主服务器(Django 项目)
|
||
│ ├── settings.py # 全局配置
|
||
│ ├── urls.py # 路由聚合
|
||
│ ├── auth.py # CustomJWTAuthentication
|
||
│ ├── middleware.py # 6 个自定义中间件
|
||
│ ├── db_router.py # 分库路由器
|
||
│ └── apps/ # 14 个业务 App
|
||
│ ├── core/ # 用户/认证基础设施
|
||
│ ├── gerp/ # ERP 主模块(FormAPI / CheckAdmin / 角色权限)
|
||
│ ├── ugm/ # 用户管理
|
||
│ ├── crb/ # 货币钱包/企业
|
||
│ ├── invite/ # 邀请码
|
||
│ ├── ccgo/ # 协同办公
|
||
│ ├── sve/ # 工单
|
||
│ ├── t4/ # T4 计划
|
||
│ ├── mc/ # 我的世界
|
||
│ ├── doc/ # 文档
|
||
│ ├── api/ # API 网关
|
||
│ ├── msync/ # 分布式通信
|
||
│ ├── payment/ # 支付
|
||
│ ├── commission/ # 分佣
|
||
│ └── stats/ # 统计
|
||
├── gvsdsdk/ # 分布式 SDK / 通用 SAAS 服务层
|
||
│ ├── auth/ # 认证与权限(RoleManager/AuthManager/AdminUserManager 等 17 个 Manager)
|
||
│ ├── msync/ # 服务注册/发现
|
||
│ ├── commission/ # 分佣引擎
|
||
│ ├── payment/ # 支付网关
|
||
│ ├── order/ # 订单
|
||
│ ├── stats/ # 统计引擎
|
||
│ └── management/ # 管理工具
|
||
├── ATestCServer/ # 子服务器示例(通过 SDK 接入主服务)
|
||
├── TempLate/ # 前端模板与静态资源
|
||
│ ├── GERP/ # ERP 主前端(pages/ + assets/ + DbTableHelper)
|
||
│ ├── CCCRB/ # 货币钱包前端
|
||
│ ├── AKS/ MSOC/ ... # 其他模板
|
||
│ ├── rok/lib/ # 静态资源库(librok.gvsds.com)
|
||
│ └── Errors/ # 错误页(404 / 反盗链)
|
||
├── SSL/ # SSL 证书
|
||
├── nginx/ # Nginx 配置
|
||
├── deploy/ # 部署脚本
|
||
├── logs/ # 运行日志
|
||
├── secrets.ini # 数据库/Redis 凭据(不入库)
|
||
├── gunicorn.conf.py # Gunicorn 配置
|
||
└── app.ini # 应用配置
|
||
```
|
||
|
||
---
|
||
|
||
## 四、核心架构
|
||
|
||
### 4.1 双包架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ d:\SMANAGE(项目根) │
|
||
│ │
|
||
│ ┌────────────────────┐ ┌────────────────────┐ │
|
||
│ │ gvsds │ │ gvsdsdk │ │
|
||
│ │ 主服务器(业务层)│◄─┤ 分布式 SDK │ │
|
||
│ │ - Django 项目 │ │ - 协议契约层 │ │
|
||
│ │ - 14 个业务 App │ │ - 惰性加载 │ │
|
||
│ │ - 完整业务实现 │ │ - PascalCase 协议 │ │
|
||
│ └────────────────────┘ └────────────────────┘ │
|
||
│ ▲ ▲ │
|
||
│ ┌────────────────────┐ ┌────────────────────┐ │
|
||
│ │ ATestCServer │ │ TempLate/ │ │
|
||
│ │ 子服务器示例 │ │ 前端模板资源 │ │
|
||
│ │ 通过 SDK 接入 │ │ GERP/AKS/MSOC... │ │
|
||
│ └────────────────────┘ └────────────────────┘ │
|
||
└──────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 4.2 SAAS 多租户四层架构
|
||
|
||
```
|
||
第 4 层 鉴权规则层 RBAC 操作权限 + ABAC 数据权限(RoleScope)
|
||
第 3 层 角色权限载体层 Role + UserRole + RolePermission
|
||
第 2 层 岗位模板层 PositionTemplate → CopyToRole(一次性快照)
|
||
第 1 层 组织人事层 Tenant → Company → Department / Workgroup
|
||
UserDept(员工-部门多对多)+ Position(标签)
|
||
```
|
||
|
||
### 4.3 权限模型(角色超级管理员标记)
|
||
|
||
特权级采用**角色级**标记而非用户级 `IsSuperuser`:
|
||
|
||
- `admin:super`(跨租户超级管理员,最高)
|
||
- `admin:tenant`(租户内管理员)
|
||
- 权限码查询走 `RolePermission → Permission`
|
||
- 详见 [gvsdsdk/auth/admin_service.py](./gvsdsdk/auth/admin_service.py)
|
||
|
||
### 4.4 分库路由(7 库)
|
||
|
||
`Users` / `GerpCore` / `Plans` / `Tasks` / `T4PC` / `Document` / `Minecraft`,由 `gvsds/db_router.py` 路由。
|
||
|
||
---
|
||
|
||
## 五、多域名与静态站点
|
||
|
||
`Main.py` 内置域名路由:
|
||
|
||
| 域名 | 用途 |
|
||
|---|---|
|
||
| `gvsds.com / www.gvsds.com / api.gvsds.com` | 主站 + API |
|
||
| `gvsds.dev` / `gvsds.studio` | 备用主域 |
|
||
| `gvsds.org` | 主域别名 |
|
||
| `yc8z.org` / `ycbz.org` | 镜像站 |
|
||
| `librok.gvsds.com` | 静态站点(`TempLate/rok/lib/`) |
|
||
|
||
新增静态站点:在 `Main.py` 的 `STATIC_SITES` 字典中添加 `host → Path` 映射。
|
||
|
||
---
|
||
|
||
## 六、严禁本地部署
|
||
|
||
> **再次强调:本仓库为平台生产环境核心代码,不允许本地部署。**
|
||
|
||
### 1. 禁止行为
|
||
|
||
- ❌ 任何个人或团队成员**不得**在本地(开发机、笔记本、虚拟机)clone 后启动 `Main.py` / `gunicorn` / `python manage.py runserver`
|
||
- ❌ 不得使用本地 MySQL / Redis 模拟生产环境"试跑"
|
||
- ❌ 不得在公网演示环境部署本仓库代码
|
||
- ❌ 不得将本仓库代码上传至 GitHub / GitLab / Gitee 等任何公开平台
|
||
|
||
### 2. 允许的运行方式
|
||
|
||
- ✅ **仅**通过内部部署系统(`deploy/` 目录脚本 + Ansible / SaltStack)部署到**已审批的生产服务器**
|
||
- ✅ 部署目标服务器需满足:
|
||
- 内网 IP,不暴露公网
|
||
- 防火墙白名单限定运维来源 IP
|
||
- 与生产数据库主从同步
|
||
- 启用审计日志(`logs/` 实时收集)
|
||
- ✅ 沙盒调试需向运维团队申请**独立的测试沙盒环境**(与生产数据完全隔离)
|
||
|
||
### 3. 违规处理
|
||
|
||
- 首次违规:警告 + 撤销代码访问权限 7 天
|
||
- 二次违规:撤销代码访问权限 30 天 + 通报
|
||
- 三次违规:依据《GVSDS 平台使用协议》追究法律责任
|
||
|
||
### 4. 如何申请部署 / 调试
|
||
|
||
1. 通过企业微信联系 **平台运维团队**
|
||
2. 提交申请单(用途 / 环境 / 时段 / 审批人)
|
||
3. 审批通过后由运维团队协助完成
|
||
|
||
---
|
||
|
||
## 七、API 与 SDK
|
||
|
||
### 7.1 REST API
|
||
|
||
- 路由前缀:`/API/<AppName>/<Action>/<Resource>`
|
||
- 鉴权:JWT(HttpOnly Cookie)+ `admin_verify=1` 特权模式
|
||
- 核心 API:
|
||
- `/API/FormAPI/CheckAdmin` — 权限查询
|
||
- `/API/FormAPI/Get/<Table>` — 列表查询(带 company_scope / tenant_scope)
|
||
- `/API/FormAPI/Add/Modify/Delete/<Table>` — 增改删
|
||
|
||
### 7.2 SDK 使用(子服务器)
|
||
|
||
```python
|
||
# 子服务器通过 gvsdsdk 接入主服务
|
||
from gvsdsdk.auth.admin_service import IsAdmin, IsSuperAdmin
|
||
from gvsdsdk.commission.engine import CommissionEngine
|
||
from gvsdsdk.msync.client import MSyncClient
|
||
|
||
# 权限判断(统一走角色级 admin:super / admin:tenant 标记)
|
||
if IsSuperAdmin(request):
|
||
# 跨租户超级管理员逻辑
|
||
...
|
||
|
||
# 注册到主服务
|
||
client = MSyncClient('sub-server-01', version='1.0.0')
|
||
client.register()
|
||
```
|
||
|
||
---
|
||
|
||
## 八、命名与代码规范
|
||
|
||
- **类名 / 模型字段**:PascalCase(`UserName`, `RoleUUID`, `CurrentRoleUUID`)
|
||
- **函数 / 变量**:snake_case(`get_user_role`, `current_role_uuid`)
|
||
- **常量**:UPPER_SNAKE(`WHITE_HOSTS`, `STATIC_SITES`)
|
||
- **文件名**:业务模块小写、Python 类用 PascalCase
|
||
- **DB 字段**:所有 UUID 字段以 `UUID` 后缀,类型 `BINARY(16)`
|
||
- **前端**:Tailwind utility-first + 自研 GERPUI 组件
|
||
- 详见 [SAAS_ARCHITECTURE.md](./SAAS_ARCHITECTURE.md)
|
||
|
||
---
|
||
|
||
## 九、部署
|
||
|
||
### 9.1 目录约定
|
||
|
||
- `deploy/` — 部署脚本
|
||
- `nginx/` — 反向代理配置
|
||
- `gunicorn.conf.py` — Gunicorn worker / 超时 / 绑定
|
||
- `SSL/` — 证书(生产用 Let's Encrypt / 商业证书)
|
||
|
||
### 9.2 启动顺序
|
||
|
||
1. MySQL / Redis
|
||
2. 启动 `Main.py`(或 Gunicorn)
|
||
3. Nginx 反向代理 `127.0.0.1:<port>` → HTTPS
|
||
4. 防火墙放行 80/443
|
||
|
||
### 9.3 日志
|
||
|
||
- `logs/` — 应用日志
|
||
- 控制台:彩色输出(`colorama`)
|
||
|
||
---
|
||
|
||
## 十、相关文档
|
||
|
||
- [SAAS_ARCHITECTURE.md](./SAAS_ARCHITECTURE.md) — 完整 SAAS 架构与数据模型
|
||
- [gvsdsdk/INSTALL.md](./gvsdsdk/INSTALL.md) — SDK 安装与使用
|
||
- [gvsdsdk/API.md](./gvsdsdk/API.md) — SDK API 参考
|
||
- [BENAME.MD](./BENAME.MD) — 重命名与版本变更日志
|
||
|
||
---
|
||
|
||
## 十一、许可证与联系
|
||
|
||
- 项目所有者:GVSDS Team
|
||
- 内部仓库,不对外开放
|
||
- 问题反馈:通过 Issue / 企业微信群
|