Docker 部署 TypeWords:轻松搭建英语单词与文章练习平台

本文基于 zyronon/typewords:3.0.4,实测版本 3.0.4,生产阶段 nginx/1.31.3,测试平台 Ubuntu 24.04 Linux。

四级考前那一个月,最常见的不是「在自己电脑上安安静静背」,而是:教室机房的电脑装不了背单词 App,手机上要登录、弹会员、断网就同步失败;回宿舍换一台电脑,打卡天数和错词本还留在上一个账号里。考研、雅思也一样——词表在 App 里,例句和听力却要另开网页;真要练拼写时,手指还是在手机小键盘上点,打完一个长词,记忆曲线早就被通知打断了。

公共机房、图书馆电子阅览室、培训班的机位,往往只给浏览器。老师想让全班对着同一套 CET-4 或考研词库跟写,既不想让三十个人各自下一个要实名的客户端,也不想把班级词表交到某个云同步账号里。自己 clone 源码、装 Node 再编成静态页,对只想先有一个内网网址的人又不划算:缺的是镜像拉起来、浏览器打开就能敲。

把练习站放到宿舍小主机、家里的 NAS,或机房那台已有 Docker 的 Ubuntu 上,一个 http://IP:端口 全班共用。各人用自己的浏览器,进度互不相通,清不了别人的错词本,也不用为去广告付钱。TypeWordstypewords.cc)就是做这件事的开源工具:对着屏幕逐键输入,用记忆曲线安排今天练哪些词;跟写、听写、默写和文章跟打都在同一个页面,内置四六级、考研、雅思、专四专八等词库。镜像 zyronon/typewords镜像页)把这套前端交给 Nginx 托管,容器内监听 80——无数据库、无登录。进度写在当前浏览器里,换设备要自己备份。

部署跑通之后,你实际能做这些事:

场景部署后怎么用
个人备考打开 http://服务器IP:8080,选 CET-4 等词库,按引导开始跟写
宿舍 / 机房共用同一地址,各人用自己的浏览器,进度互不影响
文章跟打侧栏 文章,新概念或自行导入
导入自己的词单词页支持 txt / json / xlsx;资料页有外链教材,打不开与容器无关

本文用 轩辕镜像 加速拉取 zyronon/typewords:3.0.4Docker Compose 映射 8080 → 80,走完四步引导即可练习。无 Compose 时用文末 docker run。局域网以实测 192.168.1.35 为例,请换成你的 IP。

上手要点

  • 部署:第五节 Compose;临时试玩见第八节
  • 访问:宿主机 8080 → 容器 80,实测 http://192.168.1.35:8080(官方示例的宿主机 3000 不要照抄,见 FAQ)
  • 数据:不挂业务卷;进度在浏览器本地,清站点数据会丢
  • 账号:无登录
  • 首次:宣传页进入工作台后有 4 步引导;练习页没有输入框,直接按键,空格继续
  • 标签3.0.4tags),不要写 latest

项目:GitHub · zyronon/TypeWords。许可证:GNU GPL-3.0


一、TypeWords 是什么?

这是一个英语打字练习前端:单词跟写、文章跟打,词库和进度都在浏览器里。不是网校后台,也不需要 MySQL。

TypeWords(本文)商业背单词 App
入口浏览器 IP:8080应用商店 + 账号
数据当前浏览器本地厂商云端
练习跟写 / 听写 / 默写 + 文章以各 App 为准
运维单容器 Nginx 静态站不用自维,进度受平台约束
浏览器  ──:8080──▶  Nginx(容器内 :80)── TypeWords 静态页
进度留在浏览器,不写进容器磁盘

发布镜像由 Node 构建、nginx:alpine 托管,实测 nginx/1.31.3。GitHub 仓库里那份 docker-compose.yml源码 build 用的(还带着对 :3000 的 Node 检查),不能拿来跑 Hub 镜像,跟做用第五节。

社区里还有 cxoto/typewords 等同名图,端口和版本线可能不同,不要和 zyronon/typewords 混用。


二、环境要求

项目建议
系统Linux,建议 Ubuntu 24.04
DockerEngine + Compose V2
架构3.0.4amd64 为准;ARM 见 FAQ
内存256~512 MB 可用
磁盘实测 CONTENT SIZE 30.5 MB / DISK USAGE 107 MB
端口宿主机 8080(可改左侧;右侧保持 80
docker --version
docker compose version

Linux 未装 Docker 可使用轩辕镜像一键安装脚本:

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)

备用地址:

bash <(wget -qO- https://get.xuanyuan.me/docker.sh)

更多见 轩辕镜像使用手册

ss -tlnp | grep 8080

8080 被占用时改成 "18080:80",访问 http://IP:18080。容器内仍是 80。


三、标签怎么选

Hub 上撰写时 3.0.4latest / 3 / 3.0 同一构建。跟做只写 3.0.4

标签含义推荐
3.0.4固定发布版本文跟做
3.0.22026-04 构建回滚
3.0.1更旧;Hub 上可见 amd64 + arm64仅 ARM 且拉不到 3.0.4
latest / 3 / 3.0浮动指针不要写入跟做命令

完整列表:tags。GitHub 源码 Release(如 v3.0.3)和镜像标签不一定同步,以 tags 页为准。升级时 pull、Compose、docker run 三处一起改标签。


四、拉取镜像

轩辕镜像 加速拉取:

docker pull docker.xuanyuan.run/zyronon/typewords:3.0.4

Ubuntu 24.04 实测:

3.0.4: Pulling from zyronon/typewords
44136fa355b3: Download complete
55afa1ecc21d: Pull complete
1223f016b4e4: Pull complete
46519e7231d2: Pull complete
3cd534fe98c6: Pull complete
62bec68d7c31: Pull complete
46f977ee452f: Pull complete
d0008c891db4: Pull complete
390dc935348d: Pull complete
50f25485593c: Pull complete
1a49cae41b58: Download complete
Digest: sha256:f2585590e1dbdc18f064d143525bad729f79e6a681609ad0dff68c80891f3c7c
Status: Downloaded newer image for docker.xuanyuan.run/zyronon/typewords:3.0.4
docker.xuanyuan.run/zyronon/typewords:3.0.4
docker images docker.xuanyuan.run/zyronon/typewords:3.0.4
IMAGE                                         ID             DISK USAGE   CONTENT SIZE
docker.xuanyuan.run/zyronon/typewords:3.0.4   f2585590e1db        107MB         30.5MB

五、Docker Compose 部署(推荐)

平台工作目录
Linux(正文默认)/www/wwwroot/typewords
macOS~/docker/typewords
Windows(Docker Desktop)C:\docker\typewords

5.1 创建目录

mkdir -p /www/wwwroot/typewords
chown -R "$USER:$USER" /www/wwwroot/typewords
cd /www/wwwroot/typewords

# macOS:mkdir -p ~/docker/typewords && cd ~/docker/typewords

非 root 时给 mkdir / chownsudo

5.2 编写 docker-compose.yml

cat > docker-compose.yml <<'EOF'
services:
  typewords:
    image: docker.xuanyuan.run/zyronon/typewords:3.0.4
    container_name: typewords
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      TZ: Asia/Shanghai
EOF
说明
image钉死 3.0.4
ports8080→80
volumes静态站,进度不在容器里
TZ可选;实测日志为上海时区
不要抄仓库 compose那是源码构建 + 3000:80 + Node healthcheck,见 FAQ

5.3 启动并验证

docker compose up -d
docker compose ps
docker compose logs --tail 50

Ubuntu 24.04 实测:

[+] up 2/2
 ✔ Network typewords_default Created
 ✔ Container typewords       Started
NAME        IMAGE                                         COMMAND                  SERVICE     CREATED          STATUS          PORTS
typewords   docker.xuanyuan.run/zyronon/typewords:3.0.4   "/docker-entrypoint.…"   typewords   28 seconds ago   Up 26 seconds   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp

日志关键行:

typewords  | /docker-entrypoint.sh: Configuration complete; ready for start up
typewords  | 2026/08/25 11:05:37 [notice] 1#1: nginx/1.31.3
typewords  | 2026/08/25 11:05:37 [notice] 1#1: start worker processes
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/
200

返回 200 后打开浏览器。


六、浏览器首次访问

http://192.168.1.35:8080

本机用 http://127.0.0.1:8080。不用注册。

6.1 宣传首页

第一次打开是深色介绍页,口号「打字记单词,科学间隔复习」。能看到这一页,说明端口已经通了。点页面上的开始练习 / 立即使用一类按钮(文案以界面为准),进入左侧带「单词」「文章」侧栏的工作台。

picture.image

工作台会弹出四步引导。跟着点即可;关掉引导也可以自己点选词典。

6.2 选词典(引导 1/4)

引导会写「点击这里选择词典开始学习」。主区是推荐词库(CET-4、CET-6、考研、雅思、新概念、程序员常用词等),还有收藏、错词本和「导入自己的单词」。

picture.image

6.3 词典列表(引导 2/4)

按考试或用途分类,每张卡有词数。实测选 CET-4,点 下一步 (2/4)

picture.image

6.4 打开词库(引导 3/4)

CET-4 介绍为大学英语四级词库,实测 2607 条。右上角点 学习(引导「点击这里开始学习」)。测试是自测,和跟写不是同一条路。

picture.image

6.5 学习设置(引导 4/4)

可改每日新词(默认 20)、复习上限和起始位置。点 确认 进入跟写。

picture.image


七、练习页、文章与资料

7.1 跟写:没有输入框

确认后进入练习。实测第一个词是 cancel,有音标、发音、释义和例句,右侧是本组词表,底栏为「新词 · 跟写」。

直接按键盘,不要找输入框;敲完按 空格 继续。可标已掌握、收藏。若顶部提示 TTS 用浏览器引擎且没有声音,到左下角 设置 里查语音,不是 Nginx 没起来。

picture.image

7.2 回到单词页

侧栏再点 单词。当前词典变为 CET-4,顶部有进度和 开始学习;紫色条可导入 txt / json / xlsx。换词库仍在推荐区点选。

picture.image

7.3 文章跟打

侧栏 文章。可导入 JSON / XLSX 或手建「我的书籍」。推荐区有 新概念英语 1~4 册(实测 72 / 96 / 60 / 48 篇)。

picture.image

7.4 资料页

侧栏 资料 是外链目录(新概念、影视、语法、听力)。链接失效与本容器无关。主题、音效、快捷键仍在左下角 设置,改完刷新即可,同样存在浏览器本地。

picture.image


八、备选:docker run

仅临时试玩或没有 Compose 时使用。

docker run -d \
  --name typewords \
  --restart unless-stopped \
  -p 8080:80 \
  -e TZ=Asia/Shanghai \
  docker.xuanyuan.run/zyronon/typewords:3.0.4

访问同样是 http://IP:8080。与 Compose 重名时先 docker compose down,或换 --name

docker ps | grep typewords
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/

九、生产加固与升级

建议
版本保持 3.0.4 这类具体标签
HTTPS前置 Nginx / Caddy / Traefik,反代 127.0.0.1:8080
子路径静态资源按站点根路径 / 构建。要挂 /typewords/ 需反代到根,不能只改 baseURLIssue #206
暴露优先内网或 VPN;公网无登录
升级改标签后 docker compose pull && docker compose up -d
备份保留 compose 与反代配置;学习进度在浏览器侧,换设备按项目说明自行导出
cd /www/wwwroot/typewords
docker compose pull
docker compose up -d

十、常见问题 FAQ

Q1:打不开 :8080
docker compose ps 是否 Up、本机 curl 是否 200、防火墙是否放行。冲突则 "18080:80"

Q2:官方写 -p 3000:80,为什么用 8080?
容器内是 80。宿主机 3000 常被前端开发占用,本系列默认避开。只改左侧端口。

Q3:要挂数据卷吗?进度会丢吗?
不用挂卷。删容器一般不影响浏览器里的进度;清站点数据、换浏览器或换设备会丢。项目说的「数据在本地」是指浏览器,不是 /www/wwwroot/typewords

Q4:默认账号?
没有,打开即用。

Q5:练习页没有输入框?
就是这样设计的:直接按键,空格继续。

Q6:没有发音?
TTS 走浏览器引擎。去 设置 查音量和语音包,与 curl 200 无关。

Q7:GitHub 里的 docker-compose.yml 能直接 up 吗?
不能。那是 build 源码、映射 3000:80,healthcheck 还打 Node 的 3000。发布镜像是 Nginx,跟做用第五节。

Q8:ARM / Apple Silicon 报 no matching manifest
tags 看该标签有没有你的架构。3.0.4 以 amd64 为主;更旧的 3.0.1 可见 arm64,功能落后。也可按官方 Dockerfile 本机构建。

Q9:和 cxoto/typewords 等有什么区别?
本文只跟做 zyronon/typewords

Q10:镜像页示例写成 --name docker.xuanyuan.run/typewords
容器名不能用镜像坐标。用 --name typewords

Q11:挂到子路径 /typewords/
当前按根路径构建。用反代把 /typewords/ 转到本容器根路径。见 Issue #206

Q12:拉取 401 / 402?
401:见 登录认证。402:流量用尽,见 充值。其它见 常见问题


十一、命令速查

docker pull docker.xuanyuan.run/zyronon/typewords:3.0.4

cd /www/wwwroot/typewords
# macOS:cd ~/docker/typewords
docker compose up -d
docker compose ps
docker compose logs -f --tail 100
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/
# 浏览器 http://服务器IP:8080

docker compose down

备选:

docker run -d --name typewords --restart unless-stopped -p 8080:80 \
  -e TZ=Asia/Shanghai \
  docker.xuanyuan.run/zyronon/typewords:3.0.4

十二、延伸阅读


总结

  • Compose 拉起 zyronon/typewords:3.0.48080→80;实测 curl 200,日志 nginx/1.31.3
  • 无登录;四步引导选词库后跟写。练习页直接按键。进度在浏览器里。
  • 宿主机不要用官方示例里的 3000;不要用仓库那份源码 compose 跑 Hub 镜像。
  • 生产钉死标签;公网加 HTTPS 或访问控制。

阅读原文

0
0
0
0
评论
未登录
暂无评论