132 lines
3.8 KiB
Markdown
132 lines
3.8 KiB
Markdown
---
|
||
title: "专题 98 — CloudCLI 外网部署与 VPS 服务暴露规范"
|
||
created: 2026-06-25
|
||
version: v1.0
|
||
status: active
|
||
changelog: v1.0 初版
|
||
---
|
||
|
||
# 专题 98 — CloudCLI 外网部署与 VPS 服务暴露规范
|
||
|
||
## 1. 概述
|
||
|
||
CloudCLI 通过 FRP 内网穿透 + VPS Caddy 反代,绑定到 `claude.mysanguo.top` 实现外网访问。
|
||
|
||
整体链路:外网设备 → HTTPS → VPS Caddy(SSL 自动签发 + 反代)→ FRP 隧道 → Mac Mini CloudCLI。
|
||
|
||
## 2. 架构图
|
||
|
||
```
|
||
外网设备(浏览器)
|
||
↓ HTTPS
|
||
首尔 VPS 43.133.235.218
|
||
├── Caddy :443(SSL 自动签发 + 反代)
|
||
│ └── claude.mysanguo.top → 127.0.0.1:13001
|
||
└── frps :7000
|
||
↓ FRP 隧道
|
||
Mac Mini frpc
|
||
└── 127.0.0.1:3001 → CloudCLI(launchd 持久化)
|
||
```
|
||
|
||
## 3. 配置详情
|
||
|
||
### 3.1 DNS 记录(NameSilo)
|
||
|
||
| 主机记录 | 类型 | 值 | TTL |
|
||
|----------|------|-----|-----|
|
||
| claude | A | 43.133.235.218 | 3600 |
|
||
|
||
### 3.2 frpc 配置(Mac Mini)
|
||
|
||
配置文件路径:`~/.local/etc/frpc.toml`
|
||
|
||
```toml
|
||
[[proxies]]
|
||
name = "cloudcli"
|
||
type = "tcp"
|
||
localIP = "127.0.0.1"
|
||
localPort = 3001
|
||
remotePort = 13001
|
||
```
|
||
|
||
重启方式:
|
||
|
||
```bash
|
||
launchctl unload ~/Library/LaunchAgents/com.sanguo.frpc.plist
|
||
launchctl load ~/Library/LaunchAgents/com.sanguo.frpc.plist
|
||
```
|
||
|
||
### 3.3 VPS Caddy 配置
|
||
|
||
配置文件路径:`/etc/caddy/Caddyfile`
|
||
|
||
```caddyfile
|
||
claude.mysanguo.top {
|
||
reverse_proxy 127.0.0.1:13001
|
||
}
|
||
```
|
||
|
||
重载:`sudo systemctl reload caddy`
|
||
|
||
### 3.4 CloudCLI 持久化(Mac Mini)
|
||
|
||
- LaunchAgent:`~/Library/LaunchAgents/com.cloudcli.server.plist`
|
||
- 命令:`cloudcli start --port 3001`
|
||
- 日志:`~/.cloudcli/server.log`
|
||
- 绑定地址:`0.0.0.0:3001`
|
||
|
||
## 4. ⚠️ 关键教训:腾讯云防火墙不需要开后端端口
|
||
|
||
### 问题
|
||
|
||
配置完成后,误以为需要在腾讯云轻量服务器防火墙中开放 13001/TCP 端口。
|
||
|
||
### 根因
|
||
|
||
混淆了"VPS 对外暴露端口"和"Caddy 内部反代端口"的概念。
|
||
|
||
### 正确理解
|
||
|
||
```
|
||
外网 → :443(Caddy HTTPS)→ 127.0.0.1:13001(VPS 内部回环)→ FRP 隧道 → Mac Mini :3001
|
||
↑
|
||
这段是 VPS 本地回环通信
|
||
不经过腾讯云防火墙
|
||
```
|
||
|
||
### 规则
|
||
|
||
- 腾讯云防火墙只需要开放 **80/443**(Caddy 对外 HTTPS 入口)
|
||
- Caddy 到后端服务的反代走 `127.0.0.1`(本地回环),**不需要在腾讯云防火墙开放后端端口**
|
||
- ufw 同理,但 ufw 默认不拦截 lo(loopback)接口,所以 `ufw allow 13001` 虽然无害但也无必要
|
||
- 只有当服务直接对外暴露(不经过 Caddy 反代)时,才需要在防火墙开放对应端口
|
||
|
||
### 判断方法
|
||
|
||
如果 Caddy 配置中写的是 `reverse_proxy 127.0.0.1:XXXX`,则 XXXX 端口不需要对外开放。
|
||
|
||
## 5. 当前外网服务清单
|
||
|
||
| 子域名 | VPS Caddy 反代 | FRP 隧道远端端口 | 内网目标 | 服务 |
|
||
|--------|---------------|-----------------|---------|------|
|
||
| oc.mysanguo.top | → 127.0.0.1:18789 | 18789 | 127.0.0.1:18789 | OpenClaw |
|
||
| git.mysanguo.top | → 127.0.0.1:13000 | 13000 | 192.168.2.154:3000 | Gitea |
|
||
| claude.mysanguo.top | → 127.0.0.1:13001 | 13001 | 127.0.0.1:3001 | CloudCLI |
|
||
|
||
## 6. 添加新外网服务的标准流程
|
||
|
||
1. NameSilo 添加 DNS A 记录(仅此步需要手动操作)
|
||
2. Mac Mini frpc.toml 新增隧道段
|
||
3. VPS Caddyfile 新增 `reverse_proxy` 段
|
||
4. reload caddy + 重启 frpc
|
||
5. 验证 `curl -I https://新域名`
|
||
|
||
!!! warning "注意"
|
||
**不需要在腾讯云防火墙或 ufw 开放后端端口**(除非绕过 Caddy 直接暴露)。
|
||
|
||
## 7. 安全说明
|
||
|
||
- CloudCLI 自带账号密码认证(session + cookie),作为唯一安全层
|
||
- 未配置 Caddy Basic Auth(避免双重密码体验差)
|
||
- 如需增强安全,可在 Caddy 层加 Basic Auth 或 IP 白名单
|