Commit Graph
9 Commits
Author SHA1 Message Date
xmz7891 0ad3f648c6 修上一轮清理留下的副作用:占位符把运维脚本弄连不上了
上一个提交把仓库里的服务器 IP 换成了占位符,但**那些脚本本身要用这个 IP
去连服务器** —— 换掉之后它们就跑不起来了。这个提交把取值方式理清楚。

== 取值统一走 _build/lssh.py ==

    YKXMZ_LS_HOST 环境变量
    或 _build/.lightsail_host(一行 IP,已 gitignore)
    都没有就报错,并告诉你怎么设

十个运维脚本改成 `from lssh import ... HOST as LS_HOST`,
公开仓库里一个具体地址都不留。

== 顺带修的两个自己造的 bug ==

  * 用正则往 `from lssh import ...` 后面追加东西时,
    追加到了行尾的 `# noqa: E402` **注释里面** ——
    十处导入全是废的,脚本一跑就 NameError。
    改成先剥掉注释、拼好导入、再把 noqa 加回去。

  * 同一个正则还把 `from lssh import HOST as LS_HOST` 加进了
    **lssh.py 自己**,造成自我导入。

教训:**正则批量改导入语句很危险**(注释、行尾、顺序都能坑到),
这种地方宁可逐个 edit。

== 为什么要重建产物 ==

docs/AFTER-INSTALL.txt 会被打进服务端 zip,而它上一轮改过
(去掉了写死的旧管理员密码)—— 不重打的话发出去的还是旧的。

重打后确认:三个产物里都没有旧密码、没有服务器 IP。

== 验证 ==

    全量回归退出码 0,41 个阶段全 PASS
    603 个 Python 文件语法通过
    ykxmz-agent / server / watch 三个产物扫描干净
    提交前泄漏闸门通过
2026-10-09 00:02:32 +08:00
xmz7891 a53a3eee21 搬到 Lightsail:nginx 反代 + TLS + 公共 DNS + 后台口令改由服务器持有
== 架构(最终形态)==

    用户 --HTTPS--> Cloudflare CDN --HTTP/HTTPS--> nginx --+--> 127.0.0.1:13245
                    yk.xxmxxs.top                  13.54.30.196

中转只绑 127.0.0.1,公网只能经 nginx 进来 —— 少一个暴露面
(实测公网直连 :13245 返回 000,符合预期)。

== 这一轮加的 ==

1. **nginx 反代**(_build/setup_nginx.py)
   Cloudflare 只能回源到特定端口(80/8080/443/2053…),
   中转跑的 13245 不在列表里,所以中间必须有一层。
   配置要点:
     /download/  proxy_buffering on
     /v1/        proxy_read_timeout 180s + **proxy_buffering off**
                 (长轮询要挂 60 秒;关缓冲,否则要等整个响应完
                   才吐给客户端,那就不是长轮询了)

2. **源站 TLS 证书**(_build/setup_tls_origin.py)
   Cloudflare 的 SSL 模式是 Full(strict),回源走 443,源站只有 80
   -> 522。用 certbot 的 nginx 插件签了 Let's Encrypt 证书。
   开着橙色云朵也能签:HTTP-01 挑战经 Cloudflare 回源到 80 能验证。
   踩的坑:第一次用 example.com 当邮箱,Let's Encrypt 拒收保留域名。

3. **公共 DNS**(_build/fix_server_dns.py)
   换域名之后 **服务器自己解析不了** yk.xxmxxs.top:
   Lightsail 默认的内网解析器 172.26.0.2 还缓存着"不存在"(负缓存),
   而 1.1.1.1 / 8.8.8.8 已经能解析。
   后果不只是监测误报 —— 服务器上任何解析该域名的东西都会失败。
   配上公共 DNS,内网那个降为后备(它对 AWS 自家服务更快)。

4. **监测与预案重写**(relay/monitor-lightsail.sh、rescue-lightsail.sh)
   分两层探测,才能分清是哪一层坏的:
     PRIMARY   https://域名          用户实际走的
     FALLBACK  127.0.0.1:13245       中转本身
     PRIMARY 挂 + FALLBACK 好 -> edge 层 -> 动 nginx
     两个都挂               -> core 层 -> 动中转
   不区分的话只能瞎重启,而 edge 层的问题重启中转一万次也没用。

   做法上也改了:不再"SSH 过去用嵌套 heredoc 现场打补丁"
   (这一轮因此踩了五次转义/求值/百分号格式化的坑),
   改成**本地写完整文件、整份上传**,能进 git 做版本管理。

5. **后台口令改由服务器持有**(_build/set_admin_password.py)
   密码只写进 /opt/ykxmz-relay/data/admin_password.txt(600),
   **不进代码、不进仓库**。本地脚本从环境变量或
   _build/.admin_password(已 gitignore)读取。
   这个仓库已经吃过一次"管理员密码硬编码进提交历史"的教训了。

6. **验证脚本**(_build/verify_admin_login.py)
   第一版只看登录请求的状态码,结果"对的密码/错的密码/不带凭据"
   **全是 302** —— 等于没测。改成看 cookie 再访问 /admin,
   区分拿到的是登录页还是后台页。实测:
     正确密码 -> cookie 1 条 -> 后台页
     错误密码 -> cookie 0 条 -> 登录页
     账号写错 -> cookie 0 条 -> 登录页
     经 Cloudflare 域名 -> 后台页

== 其他修复 ==

  * 下载响应有**两条** Cache-Control(nginx 和 relay 各发一条),
    Cloudflare 遇到重复的缓存指令可能直接跳过缓存 -> 去掉 nginx 那条
  * 监测探测地址跟着监听地址改(改入口必须回头看所有探测入口)
  * curl 加 -L 跟跳转(certbot 加了 http->https 301)
  * 旧服务器(随身 WiFi 那台)的服务全部停掉并取消自启,
    但**没关机、没删文件** —— 保持可逆

全量回归 46 个阶段通过;594 个 Python 文件语法通过。
2026-10-08 23:07:45 +08:00
xmz7891 e1c04d617a 清掉工作区最后两处明文密码 + 加 .gitignore 规则
演练 scrub_password_history.sh 时抓出来的:

1. _build/rotate_password.sh —— **我自己写的脚本**,
   为了测「老密码应该登不上」,把老密码写进去了。
   改成从 OLD_ADMIN_PASSWORD 环境变量取,不设就跳过。
   (又一次证明:写测试的时候很容易顺手把秘密抄进去)

2. _build/_hdr_data/data/admin_password.txt —— 测试数据文件,
   居然被 git 跟踪着。已 git rm --cached。

3. .gitignore 加了规则,以后 admin_password.txt 进不来:
       admin_password.txt
       *admin_password*.txt
       /_build/_hdr_data/
       /_build/relay_info.json

现在工作区搜不到明文密码了,只剩 git 历史里那 7 个提交
(等用户确认后再做历史重写 + 强制推送)。
2026-10-07 20:50:25 +08:00
xmz7891 0ee91b68de 清理误提交的测试数据目录 + 扩展 .gitignore 2026-10-07 19:01:33 +08:00
xmz7891 65dc2fad65 1.6.1:常规发布
- 版本号 1.6.1 -> 1.6.1
- 重建三端并打包
- 关键测试全过
2026-10-06 23:08:07 +08:00
xmz7891 e86679294a chore: 排除 cloudflared 二进制与测试临时数据 2026-10-06 23:08:06 +08:00
xmz7891 ebd87300b9 chore: 排除 PyInstaller / Android 构建中间产物 2026-10-06 23:08:06 +08:00
xmz7891 edac13dbe2 chore: 排除 dist/ 构建产物(改用 release 附件分发) 2026-10-06 19:01:39 +08:00
xmz7891 b62ac865ea ykxmz 1.5.0:修复手表端 TLS 证书校验 + MTU 修复网络稳定性
被控端
- 修复 MTU 问题:夹 MSS + 路径 MTU 探测(公网可用率 48% -> 100%)
- 复用 HTTP 连接(免掉每次新建 TLS 的 30% 握手失败)
- 每分钟回头找局域网,自动切回快 400 倍的路径
- 画面心跳帧:静止时省流量,客户端仍知道流是活的
- 锁屏时给出可操作的提示

手表端
- 内置 GTS Root R4 / GlobalSign Root CA,修 SSLHandshakeException
- 连接错误翻译成人话(证书/时间/解析/超时分别提示)
- 经中转连上后用服务器报的地址刷新已配对记录
- 新增局域网连接页面、服务器延迟检测

服务器端
- 支持 chunked 请求体(修每 16 秒一次的连接错乱与大面积 502)
- 网络调优脚本 net-tune.sh(开机自动应用)
- 管理页:批量删除、网络体检、下载区
- 隧道改 HTTP/2 + 双连接

文档
- 许可协议 / 安装前必读 / 安装后须知(作者:小麦子)
2026-10-06 19:01:05 +08:00