3.6 KiB
3.6 KiB
环境差异:本地开发 / 测试 / 生产
结论:
rpc-tunnel.sh和public-https.sh是本地开发联调工具,测试/生产环境不应依赖它们。
1. 对比表
| 能力 | 本地开发(当前机器) | 测试 / 生产 |
|---|---|---|
| 业务 RPC | 用 SSH 隧道 scripts/rpc-tunnel.sh,因为 RPC 端口外网不可达 |
不需要隧道,直接填内网 RPC 地址(服务 DNS / VPC / 专线) |
| RPC 地址 | jsonrpc://<tunnel-gateway>:24503 等隧道网关地址 |
jsonrpc://<rpc-host>:24503 等真实内网地址 |
| 公网 HTTPS | Cloudflare Quick Tunnel + scripts/public-https.sh |
不需要 Quick Tunnel,用正式域名 + Ingress/Nginx/ALB + TLS |
| WhatsApp webhook | 临时 Quick Tunnel URL,重启会变 | 正式域名,例如 https://crm.example.com/webhooks/whatsapp/... |
| 公网路径白名单 | public-gateway(本地 compose 服务) |
由 Ingress/Nginx 统一处理,或保留 gateway 作为内部服务 |
| Demo 页面 | scripts/serve-web.sh,:8088 |
不需要 |
| 数据库/Redis | compose 内 Postgres/Redis,宿主机端口仅绑 127.0.0.1 |
使用托管数据库/Redis 或内网集群,不暴露宿主机端口 |
| 环境变量 | .env 指向本地/测试地址 |
.env 指向测试/生产真实地址 |
| 密钥 | 本地 .env |
Secret Manager / CI/CD Secret,不入库 |
2. RPC:本地隧道 vs 测试/生产直连
本地开发
RPC 端口外网不可达时,才需要:
bash scripts/rpc-tunnel.sh --apply
它会:
- 在本机建 SSH 隧道到远端 RPC
- 把
.env的 RPC URL 改为隧道网关地址 - 重建 bridge
测试 / 生产
不要运行 rpc-tunnel.sh。
直接配置:
RECOMMEND_URL=jsonrpc://<recommend-service>:24503
ORDER_API_URL=jsonrpc://<order-service>:24505
MEMBER_RPC_URL=jsonrpc://<member-service>:24506
INVENTORY_API_URL=jsonrpc://<inventory-service>:24509
要求:
- bridge 容器能直接访问这些地址
- 测试/生产网络放行对应端口
- 不要指向开发机的 SSH 隧道网关
如果测试/生产网络确实隔离,应该用 VPC 对等连接 / 专线 / VPN / 内网反向代理,而不是开发机上的 SSH 隧道。
3. 公网 HTTPS:Quick Tunnel vs 正式域名
本地开发
只有本地联调 WhatsApp/公网 webhook 时才需要:
bash scripts/public-https.sh
特点:
- Cloudflare Quick Tunnel
- URL 每次重启可能变化
- 需要重新更新 LibreDesk
root_url和 Meta webhook - 只适合临时联调
测试 / 生产
不要使用 Cloudflare Quick Tunnel。
使用:
- 正式域名(
crm.example.com) - Ingress / Nginx / ALB / API Gateway
- 正式 TLS 证书
- 固定公网出口
配置:
PUBLIC_BASE_URL=https://crm.example.com
并同步:
- LibreDesk
app.root_url - Meta WhatsApp callback URL
public-gateway的上游地址(如果保留)
public-gateway 的去留
services/public-gateway 只负责路径白名单:
/webhooks/whatsapp/
/hc/
/widget*
/static/public/
测试/生产可以:
- 继续保留它,放在 Ingress 后面
- 或者把同样的路径规则直接写进 Ingress/Nginx
Quick Tunnel 只是本地把请求转发进来的手段,不是生产架构的一部分。
4. 测试/生产上线检查
- 未运行
rpc-tunnel.sh - RPC URL 指向内网真实地址,不是
172.23.0.1 - 未运行
public-https.sh PUBLIC_BASE_URL是正式 HTTPS 域名- LibreDesk
root_url是正式域名 - Meta webhook 是正式域名
- 数据库/Redis 不暴露公网
- 不使用
serve-web.sh的 8088 demo - 密钥来自 Secret Manager / CI Secret,不在仓库和镜像里