feat: 彩票业务迁移并补全后台权限与代理结算体系
This commit is contained in:
43
README.md
43
README.md
@@ -11,28 +11,15 @@
|
||||
|
||||
侧栏与 `prd.*` 权限目录见 [`docs/admin-rbac.md`](docs/admin-rbac.md)。维护命令:`php artisan lottery:admin-auth-sync --audit`。
|
||||
|
||||
## 数据库基线
|
||||
## 数据库迁移
|
||||
|
||||
项目当前已经整理出一份**最终版基线结构**,并已将历史迁移链清理为 schema dump 模式:
|
||||
项目当前使用 **纯 migration 链** 维护 PostgreSQL 结构:
|
||||
|
||||
- PostgreSQL 基线文件:[`database/schema/pgsql-schema.sql`](database/schema/pgsql-schema.sql)
|
||||
- 适用场景:**新环境初始化**
|
||||
- 后续 migration 目录:`database/migrations/`
|
||||
- 适用场景:**从当前基线之后继续新增结构变更**
|
||||
- 新环境初始化:直接执行完整 migration
|
||||
- 已有环境升级:继续通过新增 migration 演进
|
||||
- 结构来源:`database/migrations/`
|
||||
|
||||
推荐约定如下:
|
||||
|
||||
- 新环境初始化时,优先使用 Laravel schema dump,让框架先加载 `database/schema/pgsql-schema.sql`,再执行该时间点之后的新迁移。
|
||||
- 已上线或已有数据的环境,如果已经接受 schema dump 作为唯一基线,可不再保留历史 migration 文件。
|
||||
- 之后的数据库结构演进,从当前 schema dump 往后继续追加新的 migration。
|
||||
|
||||
当数据库结构发生一轮阶段性稳定变更后,可重新生成基线:
|
||||
|
||||
```bash
|
||||
php artisan schema:dump --database=pgsql
|
||||
```
|
||||
|
||||
如果只是日常开发中的普通字段变更,仍然按正常方式新增 migration 即可;等累积到一段时间后,再统一刷新一次 schema dump。
|
||||
不再依赖 `schema dump` 作为数据库基线,部署时也不需要先导入 SQL 基线文件。
|
||||
|
||||
## 统一数据库初始化
|
||||
|
||||
@@ -44,7 +31,7 @@ php artisan lottery:db-init
|
||||
|
||||
这条命令会自动完成:
|
||||
|
||||
- 执行 `migrate`,让 Laravel 在空库时优先加载 `database/schema/pgsql-schema.sql`
|
||||
- 执行 `migrate`,直接跑完整 migration 链
|
||||
- 执行生产安全的基础种子 `FoundationSeeder`
|
||||
- 执行后台权限同步与体检 `lottery:admin-auth-sync --audit`
|
||||
- 在非 `production` 环境默认补充联调用演示数据 `LocalDemoSeeder`
|
||||
@@ -133,6 +120,12 @@ php artisan schedule:work
|
||||
|
||||
> 仅用系统 cron 每分钟执行一次 `schedule:run` **无法覆盖「每秒」的 `lottery:hall-countdown`**,开发大厅实时倒计时时请用 `schedule:work`(或生产上等价常驻调度进程)。
|
||||
|
||||
**队列消费者(推荐 `queue:work`,不要再用 `queue:listen`)**
|
||||
|
||||
```bash
|
||||
php artisan queue:work --tries=3 --timeout=120 --sleep=1
|
||||
```
|
||||
|
||||
只做 HTTP / 降级轮询、不测 WebSocket 时:**终端 2、3 可先不开**;要完整大厅 WS,则 **三项都开**。
|
||||
|
||||
## 统一配置说明
|
||||
@@ -146,6 +139,16 @@ php artisan schedule:work
|
||||
- `REVERB_HOST`:浏览器连接 Reverb 时看到的主机名或 IP
|
||||
- `SANCTUM_STATEFUL_DOMAINS`:允许带 Cookie 的前端来源列表
|
||||
|
||||
## 生产性能基线
|
||||
|
||||
为避免调度锁、大厅快照缓存与业务表争抢同一数据库,生产环境请至少满足:
|
||||
|
||||
- `CACHE_STORE=redis`
|
||||
- `QUEUE_CONNECTION=redis`
|
||||
- 常驻进程使用 `php artisan queue:work`,不要使用 `queue:listen`
|
||||
|
||||
若继续使用 database cache,`schedule:work` 的 `withoutOverlapping()` / `onOneServer()` 锁、大厅 countdown 指纹缓存、以及大厅快照碎片缓存都会额外打数据库,容易放大高频调度的抖动。
|
||||
|
||||
如果你要用局域网地址访问,比如 `http://192.168.0.101:8000`,通常只需要:
|
||||
|
||||
1. 把 `APP_BIND_HOST`、`VITE_HOST` 和 `REVERB_SERVER_HOST` 改成 `0.0.0.0`
|
||||
|
||||
Reference in New Issue
Block a user