Files
tiku-backend.net/docs/quickstart.md
xiong a517ffc6a7
Some checks failed
ci / release-gate (push) Has been cancelled
feat(dev): containerize local dependencies
2026-08-04 13:27:25 +08:00

162 lines
6.8 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.

# 本地开发快速上手
本页用于日常开发:初始化依赖、迁移数据库、启动 API/Worker/平台前端并完成基础验证。若要从空数据库验收“创建租户 → Owner 激活 → 发布站点”的完整流程,请改看[空数据库到租户建站验收](tenant-provisioning.md)。
## 前置依赖
- .NET 10 SDK
- Node.js 24+、npm 11+
- Docker Desktop通过 Docker Compose 提供 PostgreSQL 18、Redis 7 和 MinIO
```bash
dotnet --version
node --version
npm --version
docker info
docker compose version
```
首次拉取代码后恢复依赖:
```bash
dotnet restore TIKU-BACKEND.slnx
npm --prefix Tiku.PlatformAdmin.Web install
```
## 启动 PostgreSQL、Redis 与对象存储
在仓库根目录启动依赖并等待健康检查通过:
```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
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
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 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
```
PostgreSQL 初始化变量不会修改已有数据卷中的账号或数据库。不要把自定义连接串、密码、Token 或私钥写入仓库。
日常暂停使用 `docker compose stop`,恢复使用 `docker compose start``docker compose down` 会删除容器和网络但保留命名数据卷;`docker compose down -v` 会永久删除本地 PostgreSQL、Redis 与 MinIO 数据,只能在明确不需要数据时使用。
## 迁移与初始化
API 不执行 Migration。数据库结构、内置权限/菜单目录和 `starter` 套餐统一由 `Tiku.DbMigrator` 初始化:
```bash
ASPNETCORE_ENVIRONMENT=Development dotnet run --project Tiku.DbMigrator
```
默认 Development seed 会在尚无平台角色绑定时创建 `admin@tiku.local`、演示租户和演示运营数据;随机临时密码只在首次创建时输出,首次登录必须改密。
若需要不含演示数据的空库,使用显式 Bootstrap 流程,不要运行默认 Development seed
```bash
export ASPNETCORE_ENVIRONMENT=Development
export TIKU_BOOTSTRAP_PLATFORM_ADMIN_EMAIL='<平台管理员邮箱>'
export TIKU_BOOTSTRAP_PLATFORM_ADMIN_PASSWORD='<临时密码>'
export TIKU_BOOTSTRAP_PLATFORM_ADMIN_NAME='<显示名称>'
dotnet run --project Tiku.DbMigrator -- \
--skip-development-seed \
--bootstrap-platform-admin
```
完整空库验收步骤见[空数据库到租户建站验收](tenant-provisioning.md)。
## 启动运行时
启动 API
```bash
ASPNETCORE_ENVIRONMENT=Development dotnet run --project Tiku.Api --launch-profile http
```
`Tiku.Api.csproj` 的 SPA Proxy 会在 Development 启动 `Tiku.PlatformAdmin.Web` 的 Vite 服务。默认入口:
- 平台管理端:<http://localhost:5173>
- API<http://localhost:5090>
- Scalar<http://localhost:5090/scalar/v1>
- OpenAPI<http://localhost:5090/openapi/v1.json>
- Liveness<http://localhost:5090/api/system/health>
- Readiness<http://localhost:5090/api/system/health/ready>
后台循环不在 API 内运行。需要处理域名、订阅、任务队列、授权缓存失效或商业账务时,另开终端启动 Worker
```bash
DOTNET_ENVIRONMENT=Development dotnet run --project Tiku.Worker
```
API 与 Worker 必须使用前面设置的同一 PostgreSQL、Redis 和对象存储。Worker 是通用 Host环境名使用 `DOTNET_ENVIRONMENT`;每个新终端都需要重新设置连接串,或通过本机未跟踪的安全配置注入。
## 验证修改
```bash
dotnet build TIKU-BACKEND.slnx --no-restore
dotnet test TIKU-BACKEND.slnx --no-build
dotnet format TIKU-BACKEND.slnx --verify-no-changes --no-restore
npm --prefix Tiku.PlatformAdmin.Web run check
dotnet ef migrations has-pending-model-changes \
--project Tiku.Infrastructure \
--startup-project Tiku.DbMigrator \
--no-build
git diff --check
```
PostgreSQL 特有的 Migration、事务、约束和租户隔离行为必须由真实 PostgreSQL 集成测试验证EF InMemory 不能替代。接口、DTO 和错误响应以当前运行时 OpenAPI/Scalar 为准。
## 常见问题
### API 报数据库不可用
先运行 `docker compose ps`,确认 PostgreSQL 为 `healthy`,再核对 `ConnectionStrings__Database``DATABASE_URL`。如果 `5432` 端口已被本机 PostgreSQL 占用,应停止该服务或通过 `TIKU_POSTGRES_PORT` 改用其他宿主机端口;非 Development 环境没有本地默认连接串。
### 找不到平台管理员临时密码
默认 Development seed 和显式 Bootstrap 都只在创建账号时输出一次临时密码,后续运行不会重放。不要从日志或数据库恢复明文;应通过受控流程重置,或在确认无需保留本地数据后重建开发数据库。
### Readiness 返回 503
`/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 循环。