feat(dev): containerize local dependencies
Some checks failed
ci / release-gate (push) Has been cancelled

This commit is contained in:
2026-08-04 13:27:25 +08:00
parent 33375a38d7
commit a517ffc6a7
15 changed files with 428 additions and 73 deletions

View File

@@ -6,14 +6,14 @@
- .NET 10 SDK
- Node.js 24+、npm 11+
- PostgreSQL
- RedisDevelopment 可不配置;涉及分布式缓存、频控或完整验收时应启动)
- Docker Desktop通过 Docker Compose 提供 PostgreSQL 18、Redis 7 和 MinIO
```bash
dotnet --version
node --version
npm --version
pg_isready -h 127.0.0.1 -p 5432
docker info
docker compose version
```
首次拉取代码后恢复依赖:
@@ -23,27 +23,54 @@ dotnet restore TIKU-BACKEND.slnx
npm --prefix Tiku.PlatformAdmin.Web install
```
## 配置数据库
## 启动 PostgreSQL、Redis 与对象存储
Development 未配置连接串时,默认使用当前系统用户连接本机 `tiku` 数据库
在仓库根目录启动依赖并等待健康检查通过
```bash
docker compose up -d --wait
docker compose ps
docker compose exec postgres pg_isready -U tiku -d tiku
docker compose exec redis redis-cli ping
curl --fail http://127.0.0.1:9000/minio/health/live
```
默认只监听本机回环地址:
```text
Host=localhost;Database=tiku;Username=<当前系统用户>
PostgreSQL: 127.0.0.1:5432数据库 tiku用户 tiku密码 tiku_dev
Redis: 127.0.0.1:6379
MinIO API: 127.0.0.1:9000Access Key tikuSecret Key tiku_minio_dev
MinIO 控制台: http://127.0.0.1:9001
```
首次使用可创建数据库
为 DbMigrator、API 和 Worker 设置相同的连接串
```bash
createdb -h 127.0.0.1 -U <数据库用户> tiku
export ConnectionStrings__Database='Host=127.0.0.1;Port=5432;Database=tiku;Username=tiku;Password=tiku_dev'
export ConnectionStrings__Redis='127.0.0.1:6379,abortConnect=false'
```
使用其他地址、端口或账号时,通过环境变量覆盖:
Development 配置会把 `local_dev` 对象存储指向该 MinIO没有完整阿里云 OSS 凭据时也会自动回退到 `local_dev`。文件内容保存在 MinIO 数据卷PostgreSQL 只保存业务元数据和对象引用。
这些默认凭据仅用于本机开发不能用于共享或生产环境。需要自定义数据库、MinIO 凭据或宿主机端口时,应在首次创建数据卷前设置 Compose 变量,并同步修改应用连接串或 `Storage:S3Compatible` 配置:
```bash
export ConnectionStrings__Database='Host=127.0.0.1;Port=5432;Database=tiku;Username=<数据库用户>;Password=<本地密码>'
export TIKU_POSTGRES_DB='<数据库名>'
export TIKU_POSTGRES_USER='<数据库用户>'
export TIKU_POSTGRES_PASSWORD='<本地密码>'
export TIKU_POSTGRES_PORT='<宿主机端口>'
export TIKU_REDIS_PORT='<宿主机端口>'
export TIKU_MINIO_ROOT_USER='<Access Key>'
export TIKU_MINIO_ROOT_PASSWORD='<Secret Key>'
export TIKU_MINIO_API_PORT='<宿主机 API 端口>'
export TIKU_MINIO_CONSOLE_PORT='<宿主机控制台端口>'
docker compose up -d --wait
```
不要把连接串、密码、Token 或私钥写入仓库。
PostgreSQL 初始化变量不会修改已有数据卷中的账号或数据库。不要把自定义连接串、密码、Token 或私钥写入仓库。
日常暂停使用 `docker compose stop`,恢复使用 `docker compose start``docker compose down` 会删除容器和网络但保留命名数据卷;`docker compose down -v` 会永久删除本地 PostgreSQL、Redis 与 MinIO 数据,只能在明确不需要数据时使用。
## 迁移与初始化
@@ -90,14 +117,10 @@ ASPNETCORE_ENVIRONMENT=Development dotnet run --project Tiku.Api --launch-profil
后台循环不在 API 内运行。需要处理域名、订阅、任务队列、授权缓存失效或商业账务时,另开终端启动 Worker
```bash
ASPNETCORE_ENVIRONMENT=Development dotnet run --project Tiku.Worker
DOTNET_ENVIRONMENT=Development dotnet run --project Tiku.Worker
```
如需 RedisAPI 与 Worker 应使用同一实例:
```bash
export ConnectionStrings__Redis='localhost:6379,abortConnect=false'
```
API 与 Worker 必须使用前面设置的同一 PostgreSQL、Redis 和对象存储。Worker 是通用 Host环境名使用 `DOTNET_ENVIRONMENT`;每个新终端都需要重新设置连接串,或通过本机未跟踪的安全配置注入。
## 验证修改
@@ -119,7 +142,7 @@ PostgreSQL 特有的 Migration、事务、约束和租户隔离行为必须由
### API 报数据库不可用
确认 PostgreSQL 已启动、数据库存在,并核对 `ConnectionStrings__Database``DATABASE_URL`非 Development 环境没有本地默认连接串。
先运行 `docker compose ps`,确认 PostgreSQL 为 `healthy`,再核对 `ConnectionStrings__Database``DATABASE_URL`。如果 `5432` 端口已被本机 PostgreSQL 占用,应停止该服务或通过 `TIKU_POSTGRES_PORT` 改用其他宿主机端口;非 Development 环境没有本地默认连接串。
### 找不到平台管理员临时密码
@@ -129,6 +152,10 @@ PostgreSQL 特有的 Migration、事务、约束和租户隔离行为必须由
`/api/system/health/ready` 会检查 PostgreSQL 和已配置的 Redis。先验证数据库连接配置 Redis 后还需确认 Redis 可访问。匿名响应不会暴露依赖详情。
### 上传或导出提示对象存储不可用
运行 `docker compose ps` 并确认 MinIO 为 `healthy`,再检查 `http://127.0.0.1:9000/minio/health/live`。自定义 MinIO 凭据或端口后,必须同步设置 `Storage:S3Compatible``S3_ENDPOINT``S3_ACCESS_KEY``S3_SECRET_KEY``S3_SECURE`
### API 启动了但后台任务不执行
Production 和常规 Development 都需要独立运行 `Tiku.Worker`。Development 仅额外在 API 中注册本地域名生命周期旁路,不代表 API 承载全部 Worker 循环。