4f38522759
- 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>
24 lines
479 B
Plaintext
24 lines
479 B
Plaintext
# 构建上下文瘦身 + 防泄(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
|