上线与运维
Dokploy 部署
用持久化 SQLite 把 localfed 部署到 Dokploy。
templates/localfed 默认用于本机开发。通过 Compose 部署时会关闭 Local Account,避免无需凭证的本地登录入口暴露到公网,并把 SQLite 数据保存在持久化 /data volume 中。
Dokploy 配置
在 Dokploy 里创建应用,选择当前 Git 仓库:
| 配置项 | 值 |
|---|---|
| 部署模式 | Compose |
| Compose 文件 | ./docker-compose.yml |
| Container port | 43127 |
| Volume | Compose 自动创建 downcity_infra_data |
HOST、PORT、数据库路径和登录模式已经写在 docker-compose.yml 中:
HOST=0.0.0.0
PORT=43127
DATABASE_PATH=/data/downcity.sqlite
LOCAL_LOGIN=false/data 必须是持久化 volume。City、账户和 Federation env 都会保存在这个 SQLite 数据库里。
域名路径
Node 街区默认监听 43127,Federation API 直接挂在服务根路径下:
GET /health
POST /v1/env/upsert
GET /v1/services
POST /v1/ai/text如果你的域名是 https://base.example.com,产品侧 SDK 和可信后端应该使用:
base_url=https://base.example.comProvider Key
localfed 模板直接读取进程环境中的 DEEPSEEK_API_KEY。在 Dokploy 中把它配置为 Secret:
DEEPSEEK_API_KEY=sk-...验证
Dokploy 部署完成后,先验证公开服务:
curl https://base.example.com/health只用 IP 和端口时:
curl http://1.2.3.4:43127/health预期返回大致如下:
{
"ok": true,
"services": ["env", "cities", "bureaus", "accounts", "ai"]
}如果这里超时,说明 Dokploy 服务没有对外暴露、VPS 防火墙没放行 43127,或还没有绑定可访问的域名。
产品侧调用
产品前端和应用应该通过 @downcity/city 调用 Node 街区:
import { City } from "@downcity/federation/legacy";
const city = new City({
federation_url: "https://base.example.com",
user_token: "user_token",
});可信后端应该用 FederationAdmin 携带管理员会话 Token:
import { FederationAdmin } from "@downcity/federation/legacy";
const admin = new FederationAdmin({
base_url: "https://base.example.com",
credential: administrator_session_token,
});完整 SDK 能力继续看 User City 和 FederationAdmin。