ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

jcode Phone Server架构解析:Tailscale+Lambda唤醒的远程链路设计

jcode Phone Server架构解析:Tailscale+Lambda唤醒的远程链路设计 jcode Phone Server架构解析TailscaleLambda唤醒的远程链路设计【免费下载链接】jcodeThe most RAM efficient harness项目地址: https://gitcode.com/GitHub_Trending/jcod/jcodejcode 是终端里运行的 AI 编程代理官方定位是最省内存的 harness而它的 Phone Server 是一套自管理的远程链路手机iOS 应用或 Termius通过 Tailscale 私网直连 EC2 上的 jcode 服务器一次点击 Lambda 唤醒链接就能把停机的服务器拉起来再叠加多层成本护栏让整条链路每月花费被锁死在 10 美元以内。本文把这条远程链路从端到端拆开讲清楚。jcode 是什么为什么需要手机远程链路jcode 本身是一个在终端里跑 AI 编码会话的工具可以对接 Bedrock、Anthropic、OpenAI 等多个模型提供方。Phone Server 想解决的问题很直接出门在外时手机想直接用 jcode但中间不能有一台笔记本电脑在线中转——服务器必须自己能启动、能配对、能关机还要保证账单可控。整体架构一览三条互不干扰的链路整套设计见 scripts/phone-server/README.md可以画成三条独立链路手机 (jcode iOS app / Termius经 Tailscale 接入) │ WebSocket :7643配对 token 鉴权仅 tailnet 可达 ▼ EC2 jcode 服务器 ──实例角色──▶ AWS Bedrock默认 Opus 4.6 ▲ │ 点击唤醒链接API Gateway → wake lambda │ Pair this phone 按钮lambda → SSM Run Command → jcode pair │ AWS 预算 $10 ──▶ SNS jcode-guard-stop ──▶ breaker lambda ──▶ 停止实例 └──▶ 邮件通知数据平面手机 ↔ 服务器走 Tailscale 私网公网零端口暴露控制平面唤醒、配对走公网 API Gateway Lambda但全程 token 鉴权成本平面独立存在AWS 预算超标直接触发熔断 Lambda 停机。三条链路互相解耦任何一层故障都不会放大到其他层。私网通道Tailscale 让手机直达服务器这是整条链路里最关键的一步棋不开放任何公网入站端口。EC2 实例以jcode-phone身份加入 Tailscale tailnet获得 100.x 私网地址jcode 的 WebSocket 网关端口 7643只响应 tailnet 内的连接安全组没有任何公网入站规则SSH22 端口同样只在 tailnet 内可达手机装好 Tailscale 后iOS 应用直接连100.x.x.x:7643Termius 这类 SSH 客户端也能直连。好处很实际不需要公网 IP 入站、不需要 NAT 穿透、不需要证书域名安全组的默认姿态就是全关。常驻与自熄systemd 服务 空闲自动关机服务器要随时可用又不白烧钱靠的是两个 systemd 单元的分工常驻守护units/jcode-serve.service 是一个用户级单元配合 linger开机即运行启动jcode serve并设置Restartalways进程崩了 5 秒后自动拉起。空闲自熄units/idle-autostop.timer 每 5 分钟触发一次 idle-autostop.sh空闲的定义非常严格必须同时满足7643网关和 22SSH上没有已建立的客户端连接jcode 进程没有 :443 出站连接即没有在从 Bedrock 流式拉取响应。连续空闲 30 分钟后脚本执行poweroff。由于实例属性被设置为 stop而非 terminate关机后计算资源计费归零只剩约每月 6 美元的加密 EBS 闲置 Elastic IP 底费。一键唤醒Lambda 唤醒链路的完整流程服务器停着的时候手机怎么把它叫醒答案是一个书签链接。整个流程源码见 wake-lambda.py收藏唤醒链接。形如https://api-id.execute-api.us-east-1.amazonaws.com/#ttoken——注意 token 放在URL fragment# 之后浏览器发起 HTTP 请求时根本不会把它发出去点击链接API Gateway 把请求转给jcode-phone-wakeLambdaGET 返回一个带 CSP 的落地页。页面里的 JS 把 fragment 里的 token 换到Authorization: Bearer请求头然后 POSTwake动作Lambda 拉起实例调用ec2:StartInstances之后页面每 5 秒轮询statusEC2 实例状态 SSM 管理代理是否 Online就绪后显示 Ready配对手机点 Pair this phone 按钮Lambda 通过SSM Run Command在实例上执行jcode pair从输出里正则解析出 6 位配对码拼成jcode://pair?host...port7643code...深链直接唤起 iOS 应用完成配对。配对码只有5 分钟 TTLSSH 兜底如果不想走 iOS 应用也可以经 Tailscale SSH 进机器后运行phone命令接入或新建一个 tmux 里的 jcode 会话。这里有个容易忽视的设计配对码不再通过任何公开端口获取——早期版本用一个 7644 端口的本地 HTTP 服务后来整体迁移到 SSM Run Command 通道端口随之关闭见 units/jcode-pair.service 已被禁用。成本护栏五层防线锁住每月 10 美元自管理的核心是账单安全而且每一层都经过实测层级触发条件动作idle-autostop30 分钟无客户端且无流式输出实例自动 poweroffjcode-bedrock-tokens-warn15 分钟内 300 万输入 token邮件告警jcode-bedrock-tokens-stop15 分钟内 1000 万输入 token连续 2 个周期熔断 Lambda 停机 邮件AWS Budget 预警预测 50% 或实际 80%$10 预算邮件告警AWS Budget 熔断实际支出 100%$10SNSjcode-guard-stop→ breaker-lambda.py 停止实例 邮件熔断 Lambda 的逻辑极其简单查实例状态 → running 就stop_instances→ 发布一条 SNS 警告。它的 IAM 权限也小到只能操作这一台实例。安全设计细节token 不落地公网日志唤醒 token 存 URL fragmentJS 取出后立刻history.replaceState清掉地址栏里的 fragment旧的?t查询串链接会被 302 一次性重定向到 fragment 形式落地页防注入CSP 用一次性 noncestyle-src nonce-...响应头带X-Frame-Options: DENY等全套加固鉴权全闭环/pair要求 5 分钟有效的 6 位码WebSocket 连接要求配对时签发的 bearer tokentoken 服务端只存哈希IAM 最小权限实例角色只有 Bedrock 推理指定 Opus 4.6 profile SSM 被管理权限wake Lambda 只能 Start/Describe 这一台实例breaker Lambda 只能 Stop/Describe。完整的权限评估与迁移计划见 IAM-LEAST-PRIVILEGE.md账户级加固CloudTrail 多区域管理事件写入私有加密桶保留 90 天、IAM Access Analyzer、S3 Block Public Access、EBS 默认加密、API Gateway 访问日志不含查询串和鉴权头且 30 天过期。文件导读想深入这条链路的实现按这个顺序读文件作用scripts/phone-server/README.md总览架构图、成本护栏表、重建步骤wake-lambda.py唤醒 Lambda落地页、SSM 配对、token 鉴权breaker-lambda.py熔断 Lambda停止实例 SNS 告警idle-autostop.sh空闲判定脚本units/jcode-serve.servicejcode 守护服务单元IAM-LEAST-PRIVILEGE.mdIAM 最小权限评估与迁移方案test_wake_lambda.py唤醒 Lambda 的单元测试用假 EC2/SSM 验证全链路ios/手机端 iOS 应用源码从零重建这条链路约 15 分钟README 给出了完整重建清单核心步骤浓缩为开一台 AL2023 实例加密 gp3 根盘、BedrockSSM 实例角色、零入站规则的安全组关联 Elastic IP 供出站使用安装 jcode、Tailscale、tmux以jcode-phone身份加入 tailnet配置网关 host 为 tailnet 地址部署jcode-serve.service与 idle-autostop 单元开启 linger部署 wake Lambda配WAKE_TOKEN、INSTANCE_ID并用 API Gateway 路由建 SNS 主题把 $10 预算的 100% 告警接到jcode-guard-stop验收四件事熔断能停机、唤醒链接能开机、tailnet 内/health可达、配对按钮返回指向 tailnet 地址的码。小结jcode Phone Server 的精髓不在单点技术而在分层自管理Tailscale 负责可达且私密systemd 负责常驻且能自熄Lambda SSM 负责一键唤醒与无端口配对AWS Budget SNS 负责账单熔断。四个组件各司其职、权限彼此隔离才让手机直连远程 AI 编程服务器这件事既安全又可负担。【免费下载链接】jcodeThe most RAM efficient harness项目地址: https://gitcode.com/GitHub_Trending/jcod/jcode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进