新一代 IDC / 云服务经营系统 · 商品 · 订单 · 计费 · 自动开通 · 财务 · 工单 · 分销 全业务闭环
面向 IDC / 云服务商的业务与财务经营系统。覆盖商品管理、订单计费、自动开通、发票、充值、分销返佣、工单、通知等完整业务闭环,提供管理后台、官网门户与用户控制台三端前端,并通过可扩展插件机制对接上游供应商与第三方服务。
| 领域 | 能力 |
|---|---|
| 🛒 商品与计费 | 产品分组、产品配置项、多计费周期(月付/季付/年付)、自动续费、库存管理 |
| 📦 订单与开通 | 下单、支付回调、自动开通(对接上游供应商)、失败重试、自动挂起/释放 |
| 💰 财务 | 余额账户、充值、发票、退款、对账、账务流水与明细 |
| 👤 用户体系 | 注册登录、实名认证(可选)、会员等级、分销与返佣、推广提现 |
| 🎫 工单系统 | 部门分配、工单回复、超时自动关闭 |
| 🔔 通知 | 站内信、邮件、短信(模板可配置) |
| ⚙️ 自动化 | 调度任务、心跳监控、定时对账、日志归档 |
| 🔌 插件机制 | 供应商适配、支付网关、短信、验证码、邮件均以插件形式接入 |
- 对接智简魔方财务系统:作为上游供应商接入,商品目录、库存、开通、续费、网络/安全操作等通过官方 API 完整适配。
- 支持被智简魔方财务系统原生对接(实验):通过内置 ZJMF Bridge 插件,为存量智简魔方财务系统提供兼容 API 与签名校验,让旧生态无缝迁移,降低替换成本。
- 从智简魔方财务系统迁移:老站业务数据(产品/用户/订单/上游/实名)完整迁移教程见 从智简魔方财务系统迁移。
部分同类商业系统的常见问题,在本项目中刻意避免:
- 没有零元购金额篡改漏洞:订单、续费金额一律由服务端按规则重算,客户端参数(如计费乘数)无法将应付金额改为零或负值。
- 没有对接上游不鉴权漏洞:上游凭据仅由服务端持有,客户端与匿名请求无法获得原始上游令牌(JWT),所有上游调用经过鉴权与代理。
- 没有文件任意上传:上传接口强制认证,并校验类型、大小与配额,拒绝匿名大文件上传与内存放大。
- 没有功能锁定也没有后门:完整开源(AGPL-3.0-or-later),无授权校验、无功能阉割、无隐藏远程控制,代码可审计、可自行部署;闭源场景的商业许可是可选的合规授权,不解锁任何功能。
- 没有跨租户越权:资源查询与操作一律绑定当前用户所有权,越权访问统一返回 403/404。
- 没有支付回调重放:网关回调幂等 + 交易号唯一约束,同一笔交易只入账、只履约一次。
- 没有常见注入与伪造:SQL 参数化查询、不可信代理头不参与 IP 判定、Cookie 带安全属性并启用 CSRF 防护。
- 服务端权威计算:金额、库存、优惠券、续费全部服务端重算并加锁,防止并发与篡改。
- 完整审计日志:关键资金、订单、后台操作留痕,支持导出与归档。
- 登录风控:账号 + IP 级软锁定、验证码目标维度限流、多入口统一校验。
- 插件化架构:供应商、支付、短信、验证码、实名、邮件均以插件接入,边界清晰、可替换。
- 自动化兜底:调度任务、心跳监控、定时对账、失败重试与自动挂起/释放。
- 开源可审计:AGPL-3.0-or-later 免费使用,社区可自行审查、修复与二次开发;不愿承担 AGPL 义务的组织可选商业授权(200 元/年)。
flowchart TB
subgraph Frontend["前端三端(Vue 3 + Vite)"]
A[管理后台<br/>admin-v3]
B[官网门户<br/>user-v3-www]
C[用户控制台<br/>user-v4-console]
end
subgraph Backend["Laravel 12 后端(REST API)"]
D[API 层<br/>V1 / V2]
E[业务服务层<br/>订单 / 财务 / 开通 / 工单]
F[插件引擎<br/>供应商 / 支付 / 短信 / 验证码 / 邮件]
G[调度与队列<br/>Queue / Schedule]
end
subgraph Data["数据层"]
H[(MySQL 8)]
I[(Redis 6+)]
end
Frontend -->|HTTPS| D
D --> E
E --> F
E --> G
E --> H
G --> H
F --> H
F --> I
G --> I
subgraph Upstream["上游生态(插件)"]
J[智简魔方]
K[KangHostx]
L[易支付]
M[……]
end
F <--> Upstream
| 端 | 技术 |
|---|---|
| 后端 | Laravel 12(PHP 8.3+)、Sanctum、MySQL 8.0+(最低兼容 5.7.8)、Redis |
| 管理后台 | Vue 3 + TypeScript + TDesign Vue Next + Vite |
| 官网门户 | Vue 3 + JavaScript + Element Plus + Vite |
| 用户控制台 | Vue 3 + TypeScript + TDesign Vue Next + Vite |
| 共享包 | shared(跨端会话、HTTP、状态、组件) |
系统通过插件机制对接的成熟服务商生态:
| 类别 | 已适配 |
|---|---|
| 上游供应商 | 智简魔方财务(ZJMF)、KangHostx |
| 支付网关 | 支付宝(AliPay)、易支付(EPay) |
| 短信服务 | 阿里云短信(Aliyun)、Stay33 |
| 验证码 | 极验(Geetest)、Vaptcha、Corptcha |
| 实名认证 | 百度人脸(BaiduFace)、LeafFace、Smapi、Stay33 |
| 邮件 | SMTP、多 SMTP 轮询(MultiSmtpRoundRobin) |
| 桥接扩展 | ZJMF Bridge(存量智简魔方数据兼容) |
No particular order
欢迎加入 TuraIDC 开发交流 QQ 群 1105174267,讨论产品、架构、插件开发与部署运维。
当前版本进行中的工作(详见 docs/internal/execution-plans/active/):
- 后端专家团审查修复计划(认证、财务、并发安全域)收尾
- 定时任务体系重构方案
- 日志归档系统可靠性重构方案
- 数据库专家团审查修复计划
- 调度 VNC 上游开通续费插件审查修复
- 报表中心方案
- 日志检索与归档协同
- 短信验证码链路完善
- 告警通道接入(待产品/运维确认渠道)
TuraIDC/
├── backend/ # Laravel 后端
│ ├── app/ # 业务代码(模型/服务/命令/中间件)
│ ├── config/ # 配置(含可选集成占位)
│ ├── database/
│ │ ├── schema/ # 完整结构基线 mysql-schema.sql(新环境初始化)
│ │ ├── migrations/ # 增量迁移
│ │ └── seeders/ # 系统默认配置
│ ├── plugins/ # 插件(供应商/支付/短信/验证码/邮件)
│ ├── routes/ # api.php / v2-admin.php / v2-client.php / web.php
│ └── scripts/ # 构建与运维脚本
├── frontend-admin-v3/ # 管理后台(端口 5174)
├── frontend-user-v3-www/ # 官网门户(端口 5175)
├── frontend-user-v4-console/ # 用户控制台(端口 5173)
└── shared/ # 跨前端共享包
- PHP 8.3+(扩展:
pdo_mysql、redis、mbstring、openssl、zip等) - MySQL 8.0+(推荐;最低兼容 5.7.8,5.7 已 EOL 仅兼容性支持;5.7 部署需在 my.cnf 设置
explicit_defaults_for_timestamp=ON,详见 docs/guide/deploy/generic.md) - Redis 6.0+(生产环境必需,分布式锁依赖 Redis)
- Composer 2.x
- Node.js 20+(构建前端)
正在使用智简魔方财务(ZJMF,shd_ 前缀)并想切换到 TuraIDC?支持将老站业务数据一键迁移:
- 产品 / 用户 / 订单 / 账单 / 工单 / 服务 全量迁移(从
mysqldump流式解析,无需源库在线) - 上游供应商 自动同步并解密 API 密钥,恢复实时开通 / 续费 / 控制能力
- 实名认证、商品配置项、OS 系统选择 等细节数据完整落地
- 老用户密码
###md5无缝兼容,登录后自动升级
📖 完整分步教程(含生产踩坑记录):从智简魔方财务系统迁移
# 示例:迁移主流程(预检 → 重建分组 → 迁移数据 → 预热缓存)
python3 backend/scripts/mofang_to_turaidc_migrator.py --dry-run
php artisan app:reorganize-product-groups
php artisan optimize:clear && php artisan app:warmup-site-cachecd backend
cp .env.example .env
# 编辑 .env:DB_HOST / DB_PORT / DB_DATABASE / DB_USERNAME / DB_PASSWORD 等
composer install
php artisan key:generate
# 初始化数据库(新库):先导入完整结构,再执行增量迁移
mysql -u root -p finance < database/schema/mysql-schema.sql
php artisan migrate --force
# 写入系统默认配置
php artisan db:seed --class=Database\\Seeders\\SettingsSeeder
# 创建管理员(role_id 需为超级管理员角色 id)
php artisan tinker
App\Models\AdminUser::create([
'username' => 'admin',
'password' => 'password',
'role_id' => 1,
'nickname' => '管理员',
'status' => 1,
]);
# 启动开发服务(默认 127.0.0.1:8000)
php artisan serve# 仓库根目录安装依赖(npm workspaces)
npm install
# 分别启动三端(开发端口:官网 5175 / 控制台 5173 / 管理端 5174)
npm run dev:user-v3-www
npm run dev:user-v4-console
npm run dev:admin-v3生产环境需常驻两个进程(详见 部署指南):
php artisan queue:work --queue=provision,referral,notification,coupon,default --sleep=1 --tries=3 --timeout=1200
php artisan schedule:workdocker compose 一键拉起 MySQL 8 + Redis 7 + 后端(PHP-FPM / Nginx / Cron / VNC Relay)+ 前端三端合一,共 4 个容器。详细说明见 Docker 与 1Panel 部署指南。
CI(.github/workflows/docker-image.yml)在推送到 main、打 tag 或手动触发时,自动构建 2 个镜像推送到 GHCR(GITHUB_TOKEN 由 GitHub 自动注入,无需配置)。进入仓库 Settings → Secrets and variables → Actions,在 Variables 标签页(推荐,明文非敏感)或 Secrets 中添加:
| 变量 | 必填 | 说明 | 示例 |
|---|---|---|---|
APP_URL |
是 | API 公开地址 | https://api.example.com |
FRONTEND_URL |
是 | 官网地址 | https://www.example.com |
CLIENT_CONSOLE_URL |
是 | 用户控制台地址 | https://console.example.com |
ADMIN_URL |
是 | 管理端地址 | https://admin.example.com |
CLIENT_SESSION_COOKIE_DOMAIN |
否 | 跨子域共享登录态时填父域,单域部署可不配 | .example.com |
四个地址必须互不相同、同一协议、无路径。未配置时前端构建会直接失败以提醒补全。
地址在构建时被 Vite 静态编译进前端产物,无法运行时注入,因此 CI 构建必须在 GitHub 侧配置。不使用 CI 时可走本地构建(
docker compose up -d --build),地址直接读deploy/docker/.env,GitHub 侧零配置。
cd deploy/docker
cp .env.example .env
# 编辑 .env:数据库密码、INSTALL_ADMIN_PASSWORD、对外端口等
docker compose pull && docker compose up -d # 拉取 CI 镜像(推荐)
# 或 docker compose up -d --build # 本地构建(全部)不想在 CI 配域名 Variables、但也不想本地 build 后端?可以只 build 前端,后端照常 pull:
git clone https://github.com/<owner>/TuraIDC.git # 服务器上拉源码(前端构建需要)
cd TuraIDC/deploy/docker
cp .env.example .env
# 编辑 .env:域名、数据库密码、INSTALL_ADMIN_PASSWORD 等
docker compose pull app # 只拉后端镜像(CI 构建,不含域名)
docker compose build frontends # 只构建前端(域名从 .env 读,CI 零配置)
docker compose up -d # 启动全部前端地址直接读 deploy/docker/.env,改域名后重新 build frontends && up -d 即可,不用碰 GitHub。
升级同理:
git pull # 拉最新源码(前端要这个)
docker compose pull app # 拉最新后端镜像
docker compose build frontends # 重新构建前端
docker compose up -d后端不受前端域名影响——
APP_URL等通过env_file: .env在容器启动时注入,是运行时配置,改.env重启就生效,不需要重新构建镜像。
首次启动(空库)自动初始化数据库并创建管理员 cerbo(密码为 .env 中 INSTALL_ADMIN_PASSWORD,仅首次生效)。默认端口:API 8080 / 官网 8081 / 控制台 8082 / 管理端 8083。
docker compose ps # 容器状态(应全部 healthy)
docker compose logs -f app # 跟踪后端日志
curl http://127.0.0.1:8080/api/ready # 就绪检查(DB/Cache/Storage/Scheduler)
docker compose pull && docker compose up -d # 升级到新镜像
./backup.sh # 备份数据库npm run build:frontends 会读取 backend/.env 中的 APP_URL / FRONTEND_URL / CLIENT_CONSOLE_URL / ADMIN_URL(四个地址必须互不相同且协议一致),依次构建三端并输出到各自 dist/。
- 部署指南 · 运维与调度
- 开源与商业许可:AGPL 强制义务、商业授权适用场景与获取方式
- 贡献指南 · 贡献者许可协议(CLA)
- 商业许可(草案)
- 安全政策 · 行为准则
- 文档官网维护指南 · 变更记录
本项目采用 AGPL-3.0-or-later + 商业许可 的双许可模式,仓库地址:https://github.com/25Cloud/TuraIDC。
任何个人、组织、小企业都可以按 GNU Affero General Public License v3.0 或更高版本(AGPL-3.0-or-later) 免费使用本项目(含商业经营),代价是承担 AGPL 的强制开源义务:
- 改了就得上线开源:修改版通过网络向用户提供服务时,必须向这些用户提供完整的对应源码(AGPL 第 13 条,含自己的改动);不能「只部署不开源」,也不能用「内部使用」「私有化交付」绕过。
- 不得闭源再分发:二次开发后的对外服务同样受 AGPL 约束;需要闭源商用只能另行取得商业授权,不能自行去掉许可证与版权声明。
- 保留署名与许可文件:不得删除
LICENSE、文件头版权声明、前端页脚/侧栏的版权与仓库链接,也不得把 TuraIDC 品牌包装成自研产品对外宣传。 - 依赖也要合规:引入新依赖前确认其许可证与 AGPL 兼容,并在改动说明里注明。
- 通用改进优先回流上游:修 bug、做兼容、补文档请提 Pull Request 到本仓库,而不是长期维护私有分叉。
- 获取源码:直接
git clone https://github.com/25Cloud/TuraIDC.git、下载 Release 源码包,或见开源与商业许可。未修改的部署只需在站点保留到官方仓库的入口(官网页脚「开源仓库」与/open-source页面即为此提供)。
面向不能公开源码的敏感企业(政企、金融、医疗等)、私有化交付与闭源二次开发场景,可购买商业许可证(草案):
- 200 元/年,按「每个组织每个生产部署」计(多部署、OEM、白牌等可协商,具体以订单为准);
- 授权范围内可闭源使用、修改后不公开,免除 AGPL 第 13 条网络源码提供义务;
- 不含商标授权,不得转售、白牌或再分发源码;
- 不提供额外功能:商业版与开源版源码相同,付费只解决闭源使用的许可问题;
- 取得方式:在 Issues 提交「商业授权申请」,或邮件
contact@turaidc.com。
⚠️ 商业许可与 CLA 均为工程侧草案,正式对外签署前需经法务或专业律师复核。
- 提交贡献前请签署贡献者许可协议(CLA):个人在 PR 评论声明、组织邮件签署。CLA 明确授予项目方版权与专利许可,并允许项目方以 AGPL-3.0-or-later 与商业许可双许可分发——没有这条再许可授权,商业许可模式不成立。
- 参与社区请遵守行为准则;发现安全漏洞请按安全政策私下报告,不要公开提交细节。
- 本站官网提供「开源仓库」与「开源版本」入口,任何用户都能获取完整源码与部署文档。
说明:本项目管理后台与控制台基于 TDesign Vue Next Starter 构建;TuraIDC 自有代码采用 AGPL-3.0-or-later,TDesign 原始代码及其许可声明继续采用 MIT,详见各子目录的
LICENSE。

