四种暴露 OpenCode 的方式,按场景选,不按习惯选。
下面四种都能把 OpenCode 流量送到 KKCode。选哪个取决于:谁要访问、地址多久变一次、你的开发机已经跑了什么。没有「放之四海皆准」的最优,只有「对你的场景最优」的选择。
快速选择
| 如果你需要… | 选 | 为什么 |
|---|---|---|
| 就你自己一台 iPhone,零配置 | 扫码隧道(@kkcode-app/agent) | 开发机一行命令,手机扫个码搞定。不用账号、域名、路由器配置。 |
| 自己的 iPhone + 其他设备,地址要稳定 | Tailscale | tailnet 内私有 HTTPS,不暴露公网,个人免费,跨蜂窝/家庭网络都能用。 |
| 任何浏览器都能访问 + iPhone,绑自己的域名 | Cloudflare Tunnel | 公网 HTTPS + 稳定域名,免路由器端口转发,可叠加 Cloudflare Access 做 SSO。 |
| 开发机已经在跑 Caddy / Nginx / Traefik | 反向代理 | 复用现有 HTTPS 基础设施。确保 SSE 和 WebSocket upgrade 都通。 |
方案 A —— KKCode 内置扫码隧道
打包在 @kkcode-app/agent 这个 npm 包里。开发机上跑:
npx -y @kkcode-app/agent@latest
agent 会起 opencode serve、通过 KKCode 中继开一条出站隧道、并在终端打印一个二维码。打开 KKCode,在连接页点扫码,URL 和鉴权头自动填好。
优势
- 零配置。不用注册账号、不用持有域名、不用碰路由器。
- 一码一扫。蜂窝和 Wi-Fi 都能用。
- 开发机只做 outbound 连接,在严格 NAT、运营商级 NAT、公司防火墙后都能用。
- 重连由 agent 负责。kill 掉重启即恢复。
取舍
- 流量经过 KKCode 中继。绝不能离开自己基础设施的代码别走它。
- 地址绑定在 agent 进程上。agent 一停,下次启动得重新扫一次码。
- 天生单租户 —— 想让别人也能用,要么把二维码(和密码)发出去,要么走别的方案。
方案 B —— Tailscale
只需要自己设备访问时的默认选项。它让 OpenCode 继续绑在 loopback,并在 tailnet 内提供一个私有 HTTPS 地址。
搭建
# 开发机
opencode serve --hostname 127.0.0.1 --port 4096
tailscale serve --bg 4096
tailscale serve status
iPhone 装 Tailscale、登同一个 tailnet,把 https://machine-name.tailnet-name.ts.net 这个地址填进 KKCode。
优势
- 天生私有 —— 这个地址只在你的 tailnet 内能解析。
- 稳定 hostname,重启和换 IP 不影响。
- 个人使用免费,ACL 管理简单。
- 跨蜂窝和 Wi-Fi,不用端口转发。
取舍
- 需要一个 Tailscale 账号,每个要访问的设备都要装 Tailscale。
- tailnet 增长、key 过期、ACL 变更都是你自己要管的运维事项。
- 不适合要把同一个 OpenCode 分享给 tailnet 外的人。
方案 C —— Cloudflare Tunnel
Cloudflare Tunnel 给你一个公网 HTTPS URL + 稳定域名 + 免路由器端口转发。因为 URL 公网可达,OpenCode 鉴权是必须开的 —— 隧道管的是传输,不管身份。
搭建
# quick tunnel(临时 URL)
cloudflared tunnel --url http://127.0.0.1:4096
# named tunnel(自己域名下的稳定 hostname)
cloudflared tunnel login
cloudflared tunnel create opencode-mobile
cloudflared tunnel route dns opencode-mobile opencode.example.com
cloudflared tunnel run opencode-mobile
把得到的 URL 填进 KKCode。开 app 之前先用 curl -u user:password 验证一下 /global/health。
优势
- 公网 HTTPS,不开端口转发,开发机不用公网 IP。
- 绑你自己已有的域名,hostname 稳定。
- 可叠加 Cloudflare Access 做 SSO、设备态势、审计日志。
- 个人用量免费档够用。
取舍
- URL 公网任何人都能访问。把 OpenCode 密码当成公网凭证对待。
- quick tunnel 的 URL 是临时的,用完即弃。
- 流式和 WebSocket 流量必须在隧道配置里保留 —— 实际使用前先验 SSE 通不通。
方案 D —— 反向代理
如果开发机已经跑了 Caddy / Nginx / Traefik,把 OpenCode 挂在一个路径前缀下,复用现有 HTTPS。
Caddy 示例
opencode.example.com {
reverse_proxy 127.0.0.1:4096
}
路径前缀示例
dev.example.com {
@opencode path /api/*
reverse_proxy @opencode 127.0.0.1:4096
}
把完整 URL(含前缀)填进 KKCode。SSE 和 WebSocket upgrade 的坑见 远程接入 / 反向代理。
优势
- 复用现有 TLS、证书、可观测性栈。
- 挂在自己域名和路径约定下。
- 直接对接公司 SSO、IP 白名单、限流。
取舍
- 配置全靠你 —— 代理配错 SSE 默默就挂了,从 App 上看就像连接错误。
- 暴露面完全取决于你的 DNS 和代理配置,不适合快速试。
纯局域网和 SSH 端口转发呢?
在合适场景下两者都成立,见 远程接入。iPhone 和开发机在同一个可信 Wi-Fi 时用局域网;想跳过任何隧道产品时 SSH 转发够用。它们都不是"默认远程"方案,所以上面四种才是"在哪里都能用 OpenCode"的真正选择。