feat: admin生产服务(/admin SPA fallback+health分级) + Docker两阶段构建 + 生产compose
- app/main.py: AdminSPA 纯 ASGI 挂载 /admin(dist 存在=StaticFiles html
+ SPA fallback(非 /admin/api 的 404 回 index.html 200);缺失=503 说明页);
ADMIN_DIST env 覆盖、请求期现势解析(构建后不重启生效/测试可注入)。
/health 分级: {status, tenants:[{slug,status,engine_ok}], domains}——
懒建未就绪 engine_ok=None 不探库;单租户库损坏只 degraded 仍 200,
不让 healthcheck 杀容器。
- host_middleware: /admin 与 /admin/ 前缀豁免租户解析(平台面;/admin-evil
仍 404,前缀精确到斜杠)。
- admin: .env.production VITE_BASE_URL=/admin/(产物资源引用与挂载同源,
单一事实源,不靠构建期 env 注入);package.json 钉 packageManager
pnpm@10.7.1(corepack 与本地同版本)。
- Dockerfile 两阶段: node:20-alpine 构建 admin/dist(corepack 按清单钉版)
→ python:3.13-slim 只带运行时(app/static/seed_profiles/scripts+dist,
含 tzdata 使 TZ 生效)。
- docker-compose: 生产编排(8018/env_file 可缺省/TZ/数据 bind mount/
mem_limit 768m/日志轮转/python urllib healthcheck/restart)。
- .dockerignore 防泄(.env 不进镜像)+ .gitattributes 钉部署文件 LF。
- tests/test_admin_serving.py: 假 dist 夹具 7 例(服务/fallback 边界/
Host 豁免/缺失降级/health 分级含坏库 degraded)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
# 构建上下文瘦身 + 防泄(Phase 4 Task 1):
|
||||
# - .env 必须排除(密钥不进镜像层);admin/.env.production 是构建输入,
|
||||
# 不受根级 .env 规则影响(.dockerignore 模式锚定在上下文根)
|
||||
# - tests/docs 不进生产镜像(镜像内不拷 tests,Dockerfile 与此保持一致)
|
||||
.git
|
||||
.gitignore
|
||||
.gitattributes
|
||||
.venv
|
||||
venv
|
||||
**/node_modules
|
||||
admin/dist
|
||||
.worktrees
|
||||
tests
|
||||
docs
|
||||
data
|
||||
tenants
|
||||
platform.db*
|
||||
.playwright-mcp
|
||||
.claude
|
||||
.pytest_cache
|
||||
**/__pycache__
|
||||
*.md
|
||||
.env
|
||||
Reference in New Issue
Block a user