Flask-MDict搭建在线Mdict词典服务
根据昨天发布的『 告杨浦居民书(二十六)』,新一轮的核酸开始了。

本文是应网友
司徒的要求折腾的
什么是 MDict ?
MDict是一个开放的词典平台。
什么是 Flask-MDict ?
Flask-MDict是在线Mdict词典服务器,可用于读取MDX/MDD字典数据并对外提供标准HTTP服务。
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
Flask-MDict 官方没有提供镜像,代码也有点老,但看起来应该是个标准的 flask 应用,下面的 Dockerfile 是老苏基于标准的 flask 框架改的。
1 | FROM python:3.8-slim |
check_mdx.sh 是用来检测 /content 目录下是否有 mdx 文件的。
有 2 点需要特别说明一下:
- 官方提供的说明比较简单,但看起来必须先要有字典才能运行,为了避免容器直接挂掉,老苏增加了一个死循环来确保进程不退掉,只有当检测到
mdx字典文件时才退出死循环,所以在导入mdx字典文件之前,web服务是访问不了的; - 因为使用了
ls来检测/content目录下是否有mdx文件,所以容器需要用--privileged提升权限,否则会因为Operation not permitted而无法正确检测;
【已知问题】:在能正常使用后再删空字典,虽然容器不会挂,但是访问网页会报错👇

这个时候就算你再把字典拷回去也没用,因为已经退出了死循环,所以只能重启启动容器,正常情况下也应该不会有人这么干吧?
再次申明,老苏不是程序员,也不懂
linux,所以用的方法比较挫 😓,见谅见谅~
1 |
|
构建镜像和容器运行的基本命令如下👇
1 | # 直接下载代码 |
安装
在群晖上以 Docker 方式安装。
老苏发布了 30 多个镜像,但是你只能在群晖中搜索到 29 个

如果直接在注册表中搜索 flaskmdict 是什么都搜不到

直接在 映像 –> 新增 –> 从 URL 添加

输入 https://hub.docker.com/r/wbsu2003/flaskmdict
`
点 新增 之后,选择版本 latest 就可以了

权限
勾选 使用高权限执行容器

卷
在 docker 文件夹中,创建一个新文件夹 flaskmdict,并在其中建一个子文件夹 content,将网上下载的 mdx 放入这个目录即可,如果有同名 .mdd 文件、 .css 文件的,也要一起放入。
| 文件夹 | 装载路径 | 说明 |
|---|---|---|
docker/flaskmdict/content |
/app/content |
存放 mdx 字典 |

端口
本地端口不冲突就行,不确定的话可以用命令查一下
1 | # 查看端口占用 |
| 本地端口 | 容器端口 |
|---|---|
5860 |
5000 |

环境
| 可变 | 值 |
|---|---|
FLASK_ENV |
默认设为 development,不要改 |
FLASK_APP |
默认设为 app.py,不要改 |
MDICT_DIR |
默认设为 /app/content,不要改 |

命令行安装
如果你熟悉命令行,可能用 docker cli 更快捷
1 | # 新建文件夹 flaskmdict 和子文件夹 |
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
1 | version: '3' |
然后执行下面的命令
1 | # 新建文件夹 flaskmdict 和子文件夹 |
运行
在浏览器中输入 http://群晖IP:5860 就能看到主界面
- 必须要在
content中放入了字典文件才能访问web页面- 第一次打开的时间可能会比较长,因为会将
mdx文件转为db文件,文件越大越慢

软件很简单就不用介绍了,老苏得到网友 司徒 的授权,贴几张他使用不同字典的实际效果(老苏对原图做了裁剪处理)




参考文档
liuyug/flask-mdict: Flask Mdict Server. Query word online with MDICT dictionary
地址:https://github.com/liuyug/flask-mdict牛津 / 朗文 / 柯林斯 / 韦氏词典mdx词库文件(适用于欧路词典 / Mdict / 深蓝词典) - 米斯特范工作室®
地址:https://www.mrfan.org/dicts