build(GOV-009): 对齐应用部署与运行入口
This commit is contained in:
@@ -1,36 +1,41 @@
|
||||
# 本地开发环境
|
||||
|
||||
本地开发使用 Docker Compose 只启动 Redis,Web、API、Scheduler 和 Worker 从源码运行并使用开发环境模板。第一阶段不自动启动 MySQL 和 RocketMQ 5.x。
|
||||
本地开发由开发机提供 Node.js 22.x 与 pnpm 10.25.0,项目不安装或修改 Node。Docker Compose 只管理 Redis;Web、API、Scheduler 和 Worker分别从源码启动,MySQL 5.7 与 RocketMQ 5.x 使用外部开发实例且默认关闭。
|
||||
|
||||
## 配置
|
||||
|
||||
从 `deploy/env/development/` 中对应的 `*.env.example` 创建本机 `*.env.local`。应用和 Schema 工具优先读取 `api.env.local`;真实文件被 Git 忽略,不得写入生产地址或真实密钥。当前固定开发 MySQL 可使用白名单地址 `112.192.20.11:3306`,Schema 工具仍只允许开发环境和 `a_share_analysis_dev`。
|
||||
|
||||
开发环境配置文件约定:
|
||||
|
||||
- `api.env.local`:API 的 Redis、MySQL 和可选 AI 配置。
|
||||
- `scheduler.env.local`:Scheduler 的 Redis、调度和可选 RocketMQ 配置。
|
||||
- `worker.env.local`:Worker 的 Redis、MySQL、行情、AI 和可选 RocketMQ 配置。
|
||||
- `web.env.local`:只包含 `VITE_` 前缀的前端变量。
|
||||
|
||||
Schema 基线会在空开发库启用时生成 `captured_empty` 清单,记录 MySQL 5.7 元数据和零对象计数,不生成伪造的空 SQL;旧版本 format v1 基线保持可验证且不会被当前配置反向改写。
|
||||
|
||||
## Redis
|
||||
## 首次准备
|
||||
|
||||
```bash
|
||||
node --version
|
||||
pnpm --version
|
||||
pnpm install --frozen-lockfile
|
||||
docker compose -f deploy/compose/development.yml up -d
|
||||
docker compose -f deploy/compose/development.yml ps
|
||||
pnpm check:runtime
|
||||
```
|
||||
|
||||
把 `deploy/env/development/*.env.example` 复制为同目录的 `*.env.local`。四份 local 文件被 Git 忽略:Web 只能含 `VITE_` 公开变量;API、Scheduler、Worker 按最小权限分别读取自己的配置,不共享一份全能 env。
|
||||
|
||||
固定开发 MySQL 只允许 `a_share_analysis_dev`,主机必须是回环地址或代码内白名单 `112.192.20.11`,版本为 MySQL 5.7.x,字符集为 `utf8mb4`、排序规则为 `utf8mb4_general_ci`、会话时区为 `+08:00`。Schema 工具和开发检查禁止连接、探测或读取生产库。
|
||||
|
||||
## 启动顺序
|
||||
|
||||
建议分别打开四个终端,依次运行:
|
||||
|
||||
```bash
|
||||
pnpm --filter @a-share-analysis/server dev:api
|
||||
pnpm --filter @a-share-analysis/server dev:scheduler
|
||||
pnpm --filter @a-share-analysis/server dev:worker
|
||||
pnpm --filter @a-share-analysis/web dev
|
||||
```
|
||||
|
||||
API 健康端点是 `http://127.0.0.1:3000/api/v1/health`,Web 是 `http://127.0.0.1:5173/`。Scheduler 与 Worker 在 GOV-009 中保持 `ROCKETMQ_ENABLED=false`;没有经过验证的 Node RocketMQ 客户端时,启用配置会直接失败,不使用内存队列伪降级。
|
||||
|
||||
## 日常验证与停止
|
||||
|
||||
```bash
|
||||
pnpm check:contracts
|
||||
pnpm verify
|
||||
pnpm --filter @a-share-analysis/web test:e2e
|
||||
docker compose -f deploy/compose/development.yml down
|
||||
```
|
||||
|
||||
Redis 只绑定 `127.0.0.1:6379`,数据写入仓库忽略的 `.local/redis/`。不得把该 Compose 文件用于生产。
|
||||
|
||||
## RocketMQ 联调
|
||||
|
||||
RocketMQ 由开发者在项目 Compose 外独立启动。应用启用前至少需要 NameServer、Broker;采用推荐的 Node.js Proxy 接入时还需要 Proxy。默认端口约定:NameServer `9876`、Broker `10911`、Proxy gRPC `8081`。
|
||||
|
||||
`nc -vz 127.0.0.1 9876` 只能证明 NameServer TCP 可达,不能证明 Topic 路由、Broker 注册或消息收发可用。完整联调必须继续检查 Broker 列表,并执行一次测试 Topic 的生产与消费。开发模板默认 `ROCKETMQ_ENABLED=false`;启用后必须提供可用的 `ROCKETMQ_ENDPOINT`,不得把生产地址写入本地配置或仓库。
|
||||
|
||||
## 应用状态
|
||||
|
||||
Web 和 Server 尚未完成脚手架,因此本版本只交付配置契约和 Redis 开发环境。后续脚手架必须使用 Node.js 22 LTS、pnpm 10 和这些模板,不能在本文档中假装应用已经可启动。
|
||||
Redis 只绑定 `127.0.0.1:6379`,数据写入仓库忽略的 `.local/redis/`。RocketMQ 由开发者独立维护 NameServer、Broker 与需要时的 Proxy;TCP 端口可达不等于生产消费链路通过,完整联调仍需验证 Topic 路由和实际生产/消费。
|
||||
|
||||
Reference in New Issue
Block a user