]>
acesimba.cloud Git - words.git/commit
feat: HTTPS 同源部署 + 离线预取修复(PWA 离线缓存生效)
## 背景
思维导图/语音此前在离线模式不缓存,根因是 Service Worker 在非安全上下文
(http://IP:端口)下不激活。本次完成 HTTPS 部署(Let's Encrypt 证书 + nginx
反代),使 SW 在安全上下文中激活,并修复预取逻辑两处 bug,离线缓存终于生效。
## 改动点
1. HTTPS 同源部署(零风险,原 :55 完全不动)
- api.js: API_BASE 改为读取 REACT_APP_API_BASE(默认值仍为本机 IP:1060,:55 行为不变)
- 新增 build-https(REACT_APP_API_BASE="" → 同源相对路径)
- 新增 deploy/lexicon-frontend-https.service(:8444 同源前端 serve)
- 新增 deploy/certbot-auth-hook.sh(DNS-01 手动挑战钩子,轮询等待 TXT 生效)
- 新增 deploy/nginx-words-https.conf(:8443 TLS → /:8444,/api/:1060)
- 新增 deploy/nginx-conf.d-words.conf.disabled(原占用 :55 的旧 nginx 站点,已停用)
- 在 /etc/nginx 中禁用占用 :55 的 lexicon 与 conf.d/words.conf,避免与 :55 冲突
- certbot 签发 acesimba.cloud 证书(DNS-01 手动,Plan B),已配置自动续期
2. 修复离线预取(sync.js)
- 去重逻辑由 meta.prefetchedGroups 改为直接查 SW 缓存 caches.match(url),
避免 SW 未接管时请求绕过 SW 未真正缓存却被误标"已完成"导致永久跳过
- 预取目标仍为 G48–G60(未完成组 + 未开始组前 10 组)的每组首词思维导图 + 每词语音
3. SW 接管时机(index.js)
- 在 navigator.serviceWorker.ready 之后再触发一次同步+预取,
确保预取请求被 SW 拦截并写入缓存(首屏即可缓存,无需手动刷新)
4. 前端标题(index.html):单词学习 → Words
5. 云端日志:补充 G38 review3(完成时间 2026-08-03)
## 验证
- https://acesimba.cloud:8443 可打开,SW 激活
- 联网同步后 G48–G60 思维导图/语音写入 Cache Storage(words-pwa-v1)
- 离线模式打开 G48–G60 各组思维导图正常显示
- :55 原学习路径保持可用