本指南已按你的最新要求对齐:
- backend 在本地机器运行(LanceDB 同机存储)
- 本地 Nginx 提供 HTTPS(前置 backend)
- pb-mapper 把本地 HTTPS 服务映射到云端端点
- 前端页面加载后,直接请求云端 pb-mapper 暴露端点
- 云端 Nginx 仅作为可选层(域名/443/证书管理)
更新时间:2026-02-10
Frontend(fetch/XHR, 已加载页面)
|
v
https://<cloud-host>:8888/api (pb-mapper 在云端暴露的 endpoint)
|
v
pb-mapper tunnel
|
v
Local Nginx :3443 (HTTPS)
|
v
Local backend :3000 (HTTP)
|
v
Local LanceDB (/path/to/lancedb)
Frontend(fetch/XHR)
|
v
Cloud Nginx :443
|
v
https://127.0.0.1:8888/api (pb-mapper local endpoint)
|
v
pb-mapper tunnel -> Local Nginx -> Local backend
重点:你的主诉求是“前端直接请求云端 pb-mapper endpoint”。 云端 Nginx 是可选增强,不是必选前置。
make bin-all
./target/release/sf-cli init --db-path ./data/lancedb./target/release/sf-cli sync-notes \
--db-path ./data/lancedb \
--dir ./content \
--recursive \
--generate-thumbnail
# 批量导入后可手动补建索引
./target/release/sf-cli ensure-indexes --db-path ./data/lancedb行为说明:
- 扫描 markdown
- 解析本地图片引用并写入
images表(二进制 + 向量 + 可选缩略图) - 自动把 markdown 图片链接改写为
images/<sha256_id> - upsert 文章到
articles表
LANCEDB_URI=../data/lancedb \
PORT=3000 \
BIND_ADDR=127.0.0.1 \
RUST_ENV=production \
ALLOWED_ORIGINS=https://acking-you.github.io \
./target/release/static-flow-backend本地验证:
curl http://127.0.0.1:3000/api/articles
curl http://127.0.0.1:3000/api/images复制配置:
sudo cp deployment-examples/nginx-staticflow-api.conf /etc/nginx/conf.d/staticflow-local.conf按本机环境调整:
- backend 端口(默认
127.0.0.1:3000) - 证书路径(
ssl_certificate/ssl_certificate_key)
验证:
sudo nginx -t
sudo systemctl reload nginx
curl -k https://127.0.0.1:3443/api/articles仓库:https://github.com/acking-you/pb-mapper/
已按源码确认当前 CLI 语法(tcp-server --key --addr --pb-mapper-server)。
# 本地(服务提供侧)
pb-mapper-server-cli tcp-server \
--key staticflow-api-https \
--addr 127.0.0.1:3443 \
--pb-mapper-server <cloud-ip>:7666
# 云端(映射消费侧)
# 若要让前端可直接访问,建议绑定 0.0.0.0:8888
pb-mapper-client-cli tcp-server \
--key staticflow-api-https \
--addr 0.0.0.0:8888 \
--pb-mapper-server 127.0.0.1:7666在云端:
curl -k https://127.0.0.1:8888/api/articles在可访问云端网络的客户端:
curl -k https://<cloud-host>:8888/api/articles若浏览器要无警告访问
https://<cloud-host>:8888,需要本地 Nginx 提供的证书对该 host 可验证。 如果证书不便管理,建议启用第 4 节(可选云端 Nginx 443 终止)。
如果你不想让前端直接访问 :8888,可用云端 Nginx 暴露标准 443。
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginxsudo cp deployment-examples/nginx-staticflow-cloud-proxy.conf /etc/nginx/sites-available/staticflow-api
sudo nano /etc/nginx/sites-available/staticflow-api必须修改:
server_name(你的真实域名)proxy_pass https://127.0.0.1:8888/api/(你的 pb-mapper 映射端口)
sudo ln -sf /etc/nginx/sites-available/staticflow-api /etc/nginx/sites-enabled/staticflow-api
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d api.yourdomain.com验证:
curl https://api.yourdomain.com/api/articlesSTATICFLOW_API_BASE=https://<cloud-host>:8888/api
STATICFLOW_API_BASE=https://api.yourdomain.com/api
backend/.env.production 示例:
RUST_ENV=production
PORT=3000
BIND_ADDR=127.0.0.1
LANCEDB_URI=/opt/staticflow/data/lancedb
ALLOWED_ORIGINS=https://acking-you.github.io,https://your-frontend-domain.com
RUST_LOG=info# backend
curl http://127.0.0.1:3000/api/articles
# 本地 Nginx HTTPS
curl -k https://127.0.0.1:3443/api/articles
# LanceDB 可读(示例)
./target/release/sf-cli query --db-path ./data/lancedb --table articles --limit 3# pb-mapper 映射是否可达
curl -k https://127.0.0.1:8888/api/articles
# 若启用云端 Nginx,验证域名
curl https://api.yourdomain.com/api/articles
# Nginx 配置与日志(可选云端 Nginx)
sudo nginx -t
sudo tail -f /var/log/nginx/staticflow_error.log检查:
- markdown 中图片是否为
images/<sha256_id> images表里是否存在该 id- 前端
STATICFLOW_API_BASE是否配置正确
- 确认
RUST_ENV=production - 正确设置
ALLOWED_ORIGINS - 前端页面来源与白名单一致
原因通常是证书与访问 host 不匹配。
可选处理:
- 在本地 Nginx 使用可被浏览器信任且匹配 host 的证书
- 或启用云端 Nginx 443 做 TLS 终止