把生词复习工具搬到腾讯轻量服务器:每一处缓存和依赖我都算了一遍

📖 本文共 3,471 字,阅读需要 12 分钟

本地跑得挺舒服的一个小工具:双击 run.bat,浏览器打开 127.0.0.1:8765,把有道词典里收藏的生词编成英文段落来复习。

但用久了就冒出一个念头——能不能把它搬到服务器上?这样手机、公司电脑,打开浏览器就能复习,不用非得开着那台装了有道词典的电脑。

搬之前我把账算了一遍:哪些文件必须带、哪些依赖得在服务器上装、装完到底能不能用、磁盘会涨多少。这篇就是这份清单,顺便把唯一一个大坑记下来。

一、先给结论

问题 答案
必须传上去的 代码 + 几个 json,一共 2.5 MB 左右
微软那套朗读(edge-tts) 要装,但大陆机房不一定连得上,装了也可能合成失败
豆包语音 ✅ 只填一个 API Key,什么都不用装,服务器上最稳
Piper 离线语音 ❌ 最重(175 MB 模型 + 120 MB 包),服务器上建议直接跳过
空间会涨多少 精简部署 个位数 MB,音频缓存随用随涨
最大的坑 服务器上读不到有道的词库(那是 Windows 本机的 SQLite)

二、实测:要搬上去的东西有多重

本地实测(2026-09-26,词库 904 词、雅思 7755 词、130 条段落缓存):

内容 体积 建议
代码(*.py + web/) ~0.2 MB ✅ 必带
data/vocab.json(有道生词) 0.63 MB ✅ 必带(原因见第四节)
data/lexicons/(雅思两套词库) 0.87 MB ✅ 建议带(服务器下不动,见下)
data/paragraphs.json(段落缓存) 0.6 MB 建议带,能省一笔大模型的钱
data/progress.json(复习进度) 0.01 MB 建议带
data/audio/(236 个音频文件) 25.6 MB 可不带,用的时候自己会长出来
data/piper/(ONNX 音色模型) 175 MB 不打算在服务器用 Piper 就别带

必须的部分加起来不到 3 MB。 真正占地方的是音频缓存和 Piper 模型,而它们都是「可再生」的。

雅思词库建议直接拷,别在服务器下载

新加的「一键下载雅思词库」是从 GitHub 的 raw.githubusercontent.com 拉数据的,大陆机房经常不通或极慢。本地先把词库下好(页面上点一下按钮就行),再一起把 data/lexicons/ 传上去最省事。

三、三条朗读通道,在服务器上各是什么命运

这个工具里有三条互相独立的朗读链路(当初就是为了对比才做的),搬到服务器上的表现完全不一样:

通道 要装什么 服务器上能不能用 建议
edge-tts(微软) pip install edge-tts,连同依赖约 3 MB ⚠️ 要连微软的 speech.platform.bing.com,大陆机房经常超时/失败 可装可不装,失败会自动回退浏览器朗读,不会崩
豆包(火山引擎) 什么都不用装,config.json 里填一个 API Key ✅ 国内接口,公网 HTTPS 直连,最稳 服务器上的主力通道
Piper(本地离线) piper-tts + onnxruntime + numpy ≈ 120 MB,再加音色模型 ✅ 完全离线,反而是最可靠的 ❌ 除非特别在意离线,否则别在服务器装

顺带说一句:Windows 上 pip install edge-tts 会因写 Scripts\*.exe 报 WinError 2 而整体回滚(得用 --no-deps --target 绕),这个坑在 Linux 上不存在,服务器上一条命令就装好了。

结论:服务器上用「豆包 + 有道真人发音(单词) + 浏览器兜底」的组合就够了。

四、最大的坑:服务器上没有有道词典

这个工具的词库来源,是直接读有道词典桌面版在本机的数据库:

%LOCALAPPDATA%\Yodao\DeskDict\WbData\<账号>\newlocal     ← SQLite

它是 Windows 上的文件。Linux 服务器上不存在这个东西,于是:

  • data/vocab.json 必须一起传上去,否则启动时会提示「未找到有道词典单词本数据库」(服务还是能起来,但一个词都没有)
  • 页面上那个「↻ 同步词库」按钮在服务器上会失败 —— 这是预期行为,不是坏了
  • 以后新增收藏词的正确流程变成了「本地导出 → 传上去」:
# 在装了有道词典的那台 Windows 上
python youdao.py

# 传到服务器覆盖
scp data/vocab.json root@<服务器IP>:/opt/word-review/data/

传完刷新页面就行,不用重启服务——服务端每次请求都会重新读盘。

五、部署清单(以 Ubuntu 22.04 为例)

flowchart LR
    subgraph L[本地 Windows]
        A[有道桌面版<br/>SQLite 词库] -->|python youdao.py| B[data/vocab.json]
        B -->|scp| C[data/ 词库 · 进度 · 段落缓存]
    end
    subgraph S[腾讯轻量服务器]
        C --> D["python3 server.py<br/>--host 0.0.0.0 --port 8765"]
        D -->|HTTPS| E[DeepSeek<br/>编段落]
        D -->|HTTPS| F[豆包<br/>语音合成]
        D -->|dict.youdao.com| G[音标 · 例句 · 真人发音]
        D --> H[手机 / 公司电脑<br/>浏览器直接访问]
    end
# 1. 本地打包(只带必须的,不带 audio 和 piper)
tar -czf word-review.tar.gz \
  *.py web data/vocab.json data/lexicons \
  data/paragraphs.json data/progress.json

# 2. 传上去、解开
scp word-review.tar.gz root@<服务器IP>:/opt/
ssh root@<服务器IP>
mkdir -p /opt/word-review && tar -xzf /opt/word-review.tar.gz -C /opt/word-review

# 3. 装可选的朗读通道(豆包不用装,只要 Key)
cd /opt/word-review
python3 -m pip install edge-tts

# 4. 起服务(想常驻就配 systemd / screen)
python3 server.py --host 0.0.0.0 --port 8765

几个容易忘的点:

  • run.bat 在 Linux 上不能用(它是 Windows 批处理,chcp、%~dp0 那套),直接跑 python3 server.py --host 0.0.0.0
  • Python 要 3.9+:Ubuntu 22.04 自带 3.10 可以直接用;CentOS 7 自带的 3.6 不行,得另装
  • 腾讯轻量要在「安全组」里放行 8765(服务器上再放行一次 ufw/firewalld),否则手机连不上
  • 没有 HTTPS,自己用够了;要域名/证书就 nginx 反代一层
  • 从大陆服务器访问这几家都没问题:有道在线接口 ✅、DeepSeek ✅、豆包 ✅,只有 GitHub raw ❌

六、数据全在服务器上,意味着什么

当初在本地跑,所有东西都在自己电脑上,没什么感觉;搬到服务器之后有几件事得想清楚:

  1. 复习进度会变成两份。 data/progress.json 是进度的唯一真源,本地一份、服务器一份,不会自动同步。要么以后固定在一头用,要么手动传。
  2. data/ 就是全部个人数据。 词库、段落缓存、进度、音频缓存都在里面,定期 tar 一份下来就是完整备份。
  3. 音频缓存会慢慢涨。 每个单词的真人发音、每段朗读都会缓存成小文件(现在 236 个文件 25 MB),几百个词也就几十 MB,不用太担心,真要清就删 data/audio/ 里对应的子目录。
  4. ⚠️ 这个服务没有任何登录。 谁扫到 IP + 端口,就能看到你的词库和段落、能用你配置的 Key 去调大模型(花你的钱)——当然 Key 本身是打码返回的,读不走。真要放到公网,建议至少做一件事:安全组只放行自己常用 IP、或者 nginx 加一层 Basic Auth、或者换个不常见的端口。

七、小结

结论
要传的 代码 + vocab.json + lexicons/ + paragraphs.json + progress.json ≈ 2.5 MB
要装的 edge-tts(3 MB,可选)
不用装的 豆包(只要一个 Key)
别装的 Piper(175 MB 模型 + 120 MB 包)
要注意的 有道的词库读不到,靠 vocab.json 传;同步按钮在服务器上会失败
要留心的 没有登录鉴权,别裸奔在公网

整体比想象中轻——真正需要动脑的地方不是空间,而是「词库从哪来」。想清楚这条链路,剩下的就是一条 scp 和一条 python3 server.py。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部