master #14

Merged
kdletters merged 226 commits from master into release 2026-05-13 13:23:09 +08:00
3 changed files with 55 additions and 9 deletions
Showing only changes of commit 8e6d1971ea - Show all commits

View File

@@ -48,8 +48,30 @@ server {
try_files $uri =404;
}
# 开发服也不恢复旧一体化 API、生成资源代理和健康检查公网入口
location ~ ^/(api|generated-|healthz) {
# 临时兼容主站仍在使用的 /api/* HTTP facade前端完成 SpacetimeDB SDK 迁移后删除
location ~ ^/api(?:/|$) {
default_type application/json;
if ($genarrative_maintenance) {
return 503 '{"ok":false,"error":{"code":"MAINTENANCE","message":"服务维护中"}}';
}
proxy_pass http://127.0.0.1:8082;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
add_header X-Accel-Buffering no always;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Request-Id $request_id;
}
# 开发服仍不恢复旧生成资源代理和健康检查公网入口。
location ~ ^/(generated-|healthz) {
return 404;
}

View File

@@ -62,8 +62,30 @@ server {
try_files $uri =404;
}
# 生产公网不再暴露旧一体化 API、生成资源代理和健康检查入口
location ~ ^/(api|generated-|healthz) {
# 临时兼容主站仍在使用的 /api/* HTTP facade前端完成 SpacetimeDB SDK 迁移后删除
location ~ ^/api(?:/|$) {
default_type application/json;
if ($genarrative_maintenance) {
return 503 '{"ok":false,"error":{"code":"MAINTENANCE","message":"服务维护中"}}';
}
proxy_pass http://127.0.0.1:8082;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
add_header X-Accel-Buffering no always;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Request-Id $request_id;
}
# 生产公网不再暴露旧生成资源代理和健康检查入口。
location ~ ^/(generated-|healthz) {
return 404;
}

View File

@@ -43,9 +43,9 @@
## 生产架构
- Nginx 作为唯一公网入口,负责 HTTPS、静态站点、后台静态页面、维护页`/admin/api/` 反向代理。
- Nginx 作为唯一公网入口,负责 HTTPS、静态站点、后台静态页面、维护页`/admin/api/` 反向代理,以及临时兼容期的主站 `/api/*` 反向代理。
- SpacetimeDB 作为系统服务运行,监听 `127.0.0.1:3101`,数据根目录为 `/stdb``3000` 保留给部署机本机 Git/Web 服务,禁止再让 SpacetimeDB 占用该端口。
- Rust `api-server` 作为系统服务运行,监听 `127.0.0.1:8082`,只被 Nginx 的 `/admin/api/` 访问
- Rust `api-server` 作为系统服务运行,监听 `127.0.0.1:8082`。当前临时兼容期仍允许 Nginx 将主站 `/api/*``/admin/api/` 反向代理到该服务;前端完成 SpacetimeDB SDK / bindings 直连迁移后,再删除公网 `/api/*` 反代
- 主站与后台前端构建为静态文件,发布到服务器固定目录,不放入 Jenkins 目录,也不跟随 Docker 镜像。
- 除网站静态发布外,`api-server` 发布、SpacetimeDB 模块发布、数据库导入、服务器配置变更都必须先进入维护模式。
@@ -100,22 +100,24 @@
- `/`:主站静态页面。
- `/admin/`:后台前端静态页面,后台构建时使用 `/admin/` 作为 base path。
- `/admin/api/`:反向代理到 `http://127.0.0.1:8082/admin/api/`
- `/api``/api/*`:临时反向代理到 `http://127.0.0.1:8082`,保留原始请求 URI用于兼容当前主站前端仍在使用的 HTTP facade。
- HTTP 到 HTTPS`production-https` 模式只保留 301 重定向。
- `/maintenance.html`:维护中页面。
移除这些公网反向代理:
当前仍需移除这些公网反向代理:
- `/api/*`
- `/generated-*`
- 公网 `/healthz`
- 其他旧的一体化 web server 代理入口。
`/api/*` 仅作为临时兼容债务保留,不代表生产长期 API 暴露策略。后续主站前端完成 SpacetimeDB SDK / bindings 接入后,必须从 Nginx 模板中删除 `/api``/api/*` 反代,并恢复其公网 404 行为。
SpacetimeDB 公网路由默认保持收敛,只按实际前端 SDK 需要暴露最小集合。禁止开放可远程发布数据库或管理实例的通用入口。
Nginx 配置文件分为两类:
- `deploy/nginx/genarrative.conf`:生产正式域名 HTTPS 配置,`genarrative.example.com` 只是占位域名,安装时必须替换为真实 `SERVER_NAME`,并要求 `/etc/letsencrypt/live/<SERVER_NAME>/fullchain.pem``privkey.pem` 已存在。
- `deploy/nginx/genarrative-dev-http.conf`:开发服无域名时的 HTTP-only 配置,只允许 `DEPLOY_TARGET=development` 使用。没有域名时,`SERVER_NAME` 填开发机 IP 或临时主机名。它仍复用同一套静态目录、后台 API 反代和 SpacetimeDB SDK 最小公网路由,不恢复旧 `/api/*``/generated-*` 或公网 `/healthz`
- `deploy/nginx/genarrative-dev-http.conf`:开发服无域名时的 HTTP-only 配置,只允许 `DEPLOY_TARGET=development` 使用。没有域名时,`SERVER_NAME` 填开发机 IP 或临时主机名。它仍复用同一套静态目录、后台 API 反代、临时主站 `/api/*` 反代和 SpacetimeDB SDK 最小公网路由,不恢复旧 `/generated-*` 或公网 `/healthz`
## 维护模式