feat(deploy): 正式環境部署設定

- frontend/api.js: API URL 自動判斷 (localhost=dev, 其他=相對路徑 /api/v1)
- main.py: 加入 StaticFiles 掛載 admin-portal,CORS 開放
- schedule_tenant: Traefik 路由範本更新
  - 管理租戶加入 /api 路由 (priority 200)
  - /admin 加入 StripPrefix middleware
  - admin 服務改指向 vmis-backend:10281
- docker/vmis: 新增 Dockerfile + docker-compose.yml

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VMIS Developer
2026-03-15 18:11:31 +08:00
parent 62baadb06f
commit 8eb3909ca9
5 changed files with 74 additions and 6 deletions

View File

@@ -195,13 +195,33 @@ def _generate_tenant_route_yaml(tenant, is_active: bool) -> str:
domain = tenant.domain
nc_url = f"http://nc-{code}:80" if is_active else f"http://nc-{code}-test:80"
lines = ["http:", " routers:"]
lines = ["http:"]
if tenant.is_manager:
lines += [
" middlewares:",
" vmis-strip-admin:",
" stripPrefix:",
' prefixes: ["/admin"]',
"",
]
lines += [" routers:"]
if tenant.is_manager:
lines += [
f" {code}-admin:",
f' rule: "Host(`{domain}`) && PathPrefix(`/admin`)"',
f" service: {code}-admin",
f" service: {code}-vmis",
" entryPoints: [websecure]",
" middlewares: [vmis-strip-admin]",
" tls:",
" certResolver: letsencrypt",
" priority: 200",
"",
f" {code}-api:",
f' rule: "Host(`{domain}`) && PathPrefix(`/api`)"',
f" service: {code}-vmis",
" entryPoints: [websecure]",
" tls:",
" certResolver: letsencrypt",
@@ -232,10 +252,10 @@ def _generate_tenant_route_yaml(tenant, is_active: bool) -> str:
if tenant.is_manager:
lines += [
f" {code}-admin:",
f" {code}-vmis:",
" loadBalancer:",
" servers:",
' - url: "http://10.1.0.245:10280"',
' - url: "http://vmis-backend:10281"',
]
return "\n".join(lines) + "\n"