P0 只解决一件事
做这个项目最容易犯的错,是还没验证链路就先写页面。页面写完了,发现家里根本连不通,全部推翻重来。
所以 P0 阶段一行业务代码都不写,只回答一个问题:公网能不能稳定地访问到家里那台机器?
三步走
第一步:确认封锁范围。 家宽封了 80/443,但高位端口是通的。也就是说家里的服务不能直接监听 80,但可以监听 2320 这样的端口,由云上那台机器转发过来。
第二步:解决动态 IP。 家里没有固定公网 IP,光猫重启一次地址就变了。解法是 DDNS:家里跑一个上报客户端,IP 变化时去更新一条 A 记录。云端 OpenResty 回源时不写死 IP,而是解析 home.gaoyanpeng.com,TTL 设短一点。
实测下来,从 IP 变化到解析生效、链路恢复,基本在两分钟内。这个数字决定了 DDNS 的 TTL 该设多短——设太长恢复慢,设太短查询压力大,60 秒是个还行的折中。
第三步:卸载 TLS。 443 只存在于云端。OpenResty 那里终止 TLS,回源走 HTTP;家里到云端这一段是明文,但走的是内网隧道,风险可控。证书用 Let's Encrypt 自动续期。
验收标准
P0 完成的定义很朴素:
- 从外网访问
https://gaoyanpeng.com能拿到家里返回的页面 - 手动重启一次光猫,两分钟内自动恢复
- 云端那台机器挂掉时,报错是明确的 502,而不是超时
第三条经常被忽略。链路断了要能一眼看出断在哪一环,否则排障时会在云和家两边反复横跳。