feat: ship blog platform admin and deploy stack
This commit is contained in:
83
deploy/caddy/Caddyfile.tohka.example
Normal file
83
deploy/caddy/Caddyfile.tohka.example
Normal file
@@ -0,0 +1,83 @@
|
||||
# termi-blog / tohka Caddyfile 模板
|
||||
#
|
||||
# 说明:
|
||||
# - 这是“参考模板”,不是已部署配置
|
||||
# - 适合 tohka 上“宿主机大 Caddyfile -> localhost 端口 -> Docker 容器”的模式
|
||||
# - 默认假设:
|
||||
# - frontend 绑定到 localhost:4321
|
||||
# - admin 绑定到 localhost:4322
|
||||
# - backend 绑定到 localhost:5150
|
||||
|
||||
|
||||
# -----------------------------
|
||||
# 方案 A:推荐,子域名分流
|
||||
# -----------------------------
|
||||
|
||||
blog.init.cool {
|
||||
import common
|
||||
reverse_proxy http://localhost:4321
|
||||
}
|
||||
|
||||
admin.blog.init.cool {
|
||||
import common
|
||||
# 推荐:admin 域名整体走 TinyAuth / Pocket ID 保护
|
||||
# tohka 现成片段会转发:
|
||||
# Remote-User / Remote-Name / Remote-Email / Remote-Groups
|
||||
import tinyauth
|
||||
|
||||
# admin 静态资源与后台 API 都走同一受保护域名
|
||||
# 如果 backend 开启了 TERMI_ADMIN_PROXY_SHARED_SECRET,
|
||||
# 记得在转发 /api 到 backend 时补一个共享密钥头,避免直接伪造 Remote-User。
|
||||
handle /api/* {
|
||||
reverse_proxy http://localhost:5150 {
|
||||
header_up X-Termi-Proxy-Secret {$TERMI_ADMIN_PROXY_SHARED_SECRET}
|
||||
}
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy http://localhost:4322
|
||||
}
|
||||
}
|
||||
|
||||
# 前台公开 API 可单独暴露(评论 / 搜索 / AI 问答等)
|
||||
api.blog.init.cool {
|
||||
import common
|
||||
reverse_proxy http://localhost:5150
|
||||
}
|
||||
|
||||
|
||||
# -----------------------------
|
||||
# 方案 B:单域名 + 路径分流
|
||||
# -----------------------------
|
||||
#
|
||||
# 注意:
|
||||
# 1. /admin 方案要求 admin 构建时设置:
|
||||
# VITE_ADMIN_BASENAME=/admin
|
||||
# 2. /admin 使用 handle_path,进入 admin 容器前会去掉 /admin 前缀
|
||||
# 3. /api 不要用 handle_path;backend 当前路由本身就包含 /api 前缀
|
||||
# 4. 如果 /admin 也要调用受保护 API,需要同时把 /api 接到 backend 并加 tinyauth
|
||||
|
||||
init.cool {
|
||||
import common
|
||||
|
||||
handle_path /admin* {
|
||||
import tinyauth
|
||||
reverse_proxy http://localhost:4322
|
||||
}
|
||||
|
||||
handle /api* {
|
||||
import tinyauth
|
||||
reverse_proxy http://localhost:5150 {
|
||||
header_up X-Termi-Proxy-Secret {$TERMI_ADMIN_PROXY_SHARED_SECRET}
|
||||
}
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy http://localhost:4321
|
||||
}
|
||||
}
|
||||
|
||||
# 部署时 backend 记得配套:
|
||||
# TERMI_ADMIN_TRUST_PROXY_AUTH=true
|
||||
# TERMI_ADMIN_LOCAL_LOGIN_ENABLED=false
|
||||
# TERMI_ADMIN_PROXY_SHARED_SECRET=<随机长字符串>
|
||||
43
deploy/caddy/Caddyfile.tohka.production.example
Normal file
43
deploy/caddy/Caddyfile.tohka.production.example
Normal file
@@ -0,0 +1,43 @@
|
||||
# 直接粘到 tohka 宿主机大 Caddyfile 里的推荐块
|
||||
# 前提:
|
||||
# 1. 已存在 import common / import tinyauth 片段
|
||||
# 2. docker compose 使用 compose.tohka.override.yml,把容器端口绑到 127.0.0.1
|
||||
# 3. 环境里已设置:
|
||||
# TERMI_ADMIN_PROXY_SHARED_SECRET=<随机长字符串>
|
||||
|
||||
blog.init.cool {
|
||||
import common
|
||||
reverse_proxy http://127.0.0.1:4321
|
||||
}
|
||||
|
||||
admin.blog.init.cool {
|
||||
import common
|
||||
import tinyauth
|
||||
|
||||
# 后台 API:受 TinyAuth 保护,并附带后端共享密钥
|
||||
handle /api/* {
|
||||
reverse_proxy http://127.0.0.1:5150 {
|
||||
header_up X-Termi-Proxy-Secret {$TERMI_ADMIN_PROXY_SHARED_SECRET}
|
||||
}
|
||||
}
|
||||
|
||||
# 后台静态资源 / SPA
|
||||
handle {
|
||||
reverse_proxy http://127.0.0.1:4322
|
||||
}
|
||||
}
|
||||
|
||||
# 前台公开 API(评论 / 搜索 / AI 问答 / 订阅管理)
|
||||
api.blog.init.cool {
|
||||
import common
|
||||
reverse_proxy http://127.0.0.1:5150
|
||||
}
|
||||
|
||||
# 对应 deploy/docker/.env 关键项:
|
||||
# APP_BASE_URL=https://admin.blog.init.cool
|
||||
# PUBLIC_API_BASE_URL=https://api.blog.init.cool
|
||||
# ADMIN_API_BASE_URL=https://admin.blog.init.cool
|
||||
# ADMIN_FRONTEND_BASE_URL=https://blog.init.cool
|
||||
# TERMI_ADMIN_TRUST_PROXY_AUTH=true
|
||||
# TERMI_ADMIN_LOCAL_LOGIN_ENABLED=false
|
||||
# TERMI_ADMIN_PROXY_SHARED_SECRET=<随机长字符串>
|
||||
Reference in New Issue
Block a user