fix: manager tenant root path redirects to /admin, no NC drive route

Manager tenant has no NC container. Root path now redirects to /admin/
instead of pointing to nc-vmis:80 (Bad Gateway). Route structure:
- / → redirect to /admin/
- /admin/* → vmis-backend (StripPrefix)
- /api/* → vmis-backend

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VMIS Developer
2026-03-15 21:52:40 +08:00
parent a3d5dd2e67
commit 3ee7f72f52

View File

@@ -200,18 +200,22 @@ def _generate_tenant_route_yaml(tenant, is_active: bool) -> str:
lines = ["http:"] lines = ["http:"]
if tenant.is_manager: if tenant.is_manager:
# Manager 租戶:根路徑 redirect 到 /admin/admin 和 /api 指向 vmis-backend
lines += [ lines += [
" middlewares:", " middlewares:",
" vmis-strip-admin:", " vmis-strip-admin:",
" stripPrefix:", " stripPrefix:",
' prefixes: ["/admin"]', ' prefixes: ["/admin"]',
"", "",
" vmis-redirect-admin:",
" redirectRegex:",
f' regex: "^https://{domain}/?$"',
f' replacement: "https://{domain}/admin/"',
" permanent: false",
"",
] ]
lines += [" routers:"]
if tenant.is_manager:
lines += [ lines += [
" routers:",
f" {code}-admin:", f" {code}-admin:",
f' rule: "Host(`{domain}`) && PathPrefix(`/admin`)"', f' rule: "Host(`{domain}`) && PathPrefix(`/admin`)"',
f" service: {code}-vmis", f" service: {code}-vmis",
@@ -229,36 +233,49 @@ def _generate_tenant_route_yaml(tenant, is_active: bool) -> str:
" certResolver: letsencrypt", " certResolver: letsencrypt",
" priority: 200", " priority: 200",
"", "",
] f" {code}-root:",
f' rule: "Host(`{domain}`)"',
lines += [ f" service: {code}-vmis",
f" {code}-drive:", " entryPoints: [websecure]",
f' rule: "Host(`{domain}`)"', " middlewares: [vmis-redirect-admin]",
f" service: {code}-drive", " tls:",
" entryPoints: [websecure]", " certResolver: letsencrypt",
" tls:", " priority: 100",
" certResolver: letsencrypt", "",
"", f" {code}-http:",
f" {code}-http:", f' rule: "Host(`{domain}`)"',
f' rule: "Host(`{domain}`)"', " entryPoints: [web]",
" entryPoints: [web]", " middlewares: [redirect-https]",
" middlewares: [redirect-https]", f" service: {code}-vmis",
f" service: {code}-drive", "",
"", " services:",
" services:",
f" {code}-drive:",
" loadBalancer:",
" servers:",
f' - url: "{nc_url}"',
]
if tenant.is_manager:
lines += [
f" {code}-vmis:", f" {code}-vmis:",
" loadBalancer:", " loadBalancer:",
" servers:", " servers:",
' - url: "http://vmis-backend:10281"', ' - url: "http://vmis-backend:10281"',
] ]
else:
lines += [
" routers:",
f" {code}-drive:",
f' rule: "Host(`{domain}`)"',
f" service: {code}-drive",
" entryPoints: [websecure]",
" tls:",
" certResolver: letsencrypt",
"",
f" {code}-http:",
f' rule: "Host(`{domain}`)"',
" entryPoints: [web]",
" middlewares: [redirect-https]",
f" service: {code}-drive",
"",
" services:",
f" {code}-drive:",
" loadBalancer:",
" servers:",
f' - url: "{nc_url}"',
]
return "\n".join(lines) + "\n" return "\n".join(lines) + "\n"