dpl/docs/maintenance/ARCHITECTURE.md

50 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 架构与配置
## 仓库与入口
- 当前 Laravel 后端:本地 /private/var/www/wwwroot/dpl。composer.json 要求 PHP ^8.2、Laravel ^12;仍使用 App\Http\Kernel、App\Console\Kernel 绑定方式,不能直接套用新项目默认结构。
- Gitea 后端 origin:tom/dpl,远端 main;当前本地 master 跟踪 origin/main,变更分支默认用 codex/ 前缀。以 git branch -vv 为准。
- stellar/ 是独立 Vue/Vite 前台仓库,不属于后端提交;修改前分别核对其远端与差异。
- public/assets/admin 是 Git 子模块,仓库指定已构建后台资源版本;.gitmodules 指向 xboard-admin-dist。不要直接改压缩产物或擅自推送第三方仓库。
- HTTP 入口 public/index.php → bootstrap/app.php → App\Http\Kernel。API 由 App\Providers\RouteServiceProvider 加载 app/Http/Routes/V1、V2 中的映射;不是只看 routes/web.php。
- 后台 Blade:resources/views/admin.blade.php;自定义后台扩展的源文件 resources/js/admin/ 与运行副本 public/admin-custom/ 必须一致。
- 当前后台入口配置 secure_path=dove,通过 routes/web.php 使用,不是硬编码固定路由。后台 API 也使用这个配置。后台路径不是身份认证的替代。
## 主要业务入口
| 范围 | 入口 |
| --- | --- |
| 登录与注册 | app/Services/Auth/、AuthService.php、对应 Passport 控制器 |
| 套餐、订单、支付 | PlanService.php、OrderService.php、PaymentService.php、对应控制器与模型 |
| 用户、节点、流量 | UserService.php、ServerService.php、NodeRegistry.php、TrafficResetService.php |
| 工单 | TicketService.php、工单控制器 |
| 邮件 | MailService.php → SendEmailJob → MailFlow/Dispatcher;渠道、额度、状态、来信、回复、日报均在 MailFlow/ |
| 定时运行 | app/Console/Kernel.php,命令实现 app/Console/Commands/ |
| 教程 | resources/tutorials/、resources/views/tutorials/、scripts/tutorials/ |
## 配置来源
- .env 与 config/*.php 提供启动配置;config:cache 后修改 .env 需要重建缓存。不得打印整个配置或复制环境密钥进 Git。
- admin_setting() 通过 App\Support\Setting 读取 v2_settings,并在 Redis 缓存 admin_settings。设置用原设置服务保存,避免直接改表后忘记缓存失效。
- app_url、force_https 由 ApplyRuntimeSettings 在请求中应用;网站名称、主页与邮箱发信域名是不同用途的配置。
- MailFlow\Settings 合并 config/mailflow.php 与后台 mail_flow,解密三个敏感字段;publicSettings 只返回“是否已配置”,不能要求 API 回传明文密钥。
- mail_flow 中密钥采用 encrypted: 前缀,依赖当前环境 APP_KEY;不同环境不可直接复制密文当作可用凭据。已有用户密码是哈希,不能还原或写入文档。
- 自动邮件档位是 v2_settings 中独立 automatic_mail_policy 记录。直接核验当前状态;代码无记录时兼容回退到一档,不能把当前三档配置误称为全新安装默认值。
- MailTemplate 数据库自定义模板优先于文件模板。改文件后检查是否被同名数据库模板覆盖。
## 开发与验证
前台日常开发在 stellar/ 使用 npm run dev;根 package.json 没有 dev 命令。教程热更新可在 stellar/ 使用 npm run tutorials:watch。build 仅用于发布或明确构建验证。
邮件隔离回归(SQLite 内存库,测试阻止未模拟 HTTP):
```bash
vendor/bin/phpunit --bootstrap vendor/autoload.php tests/Feature/MailFlow
```
实际 JS 文件可用 node --check 验证语法,PHP 用 php -l。业务变更选择相关测试,不盲目运行会触及真实数据库或外部服务的命令。真实发信、支付、收件轮询及日报命令可能产生副作用,先确认本次授权和去重记录。
后台邮件页面为“系统配置 → 邮件设置”,包含基本设置、模板管理、Resend 与档位、收件与自动回复、用量汇报。扩展页签复用已有样式,不使用悬浮按钮或弹窗;修改后验证原生页签、键盘切换、异步加载、保存范围和密钥留空行为。
套餐说明中的 `{{display_device_limit}}` 由 Stellar 的 `planDescription.ts` 显式替换,展示值优先读取 `display_device_limit`;说明未写变量时不会自动追加设备信息。普通连接限制继续独立使用原字段。购买页和结算摘要共用此渲染入口。开发热更新域名包含 dpl.loc,Vite 需保持运行。