28
6 月
部署Memos的坎坷之路
- By IanGoo
Memos是一个我很看好的开源笔记App,它基本上可以理解为本地版本的Flomo。我之所以看上这个项目,一个比较重要的原因是长期以来我一直使用群晖自带的Synology Note Station来写日记(正经人谁写日记啊摔),但是Synology Note Station是一个相当Old School的App,不支持任何现代的特性。而Memos就太合适了:
- 支持大量现代Features,比如Markdown。
- 支持本地部署,这个不需要多解释。
- 有一个Timeline功能,可以以日历 + 时间的形式来显示笔记,这太日志了。
所以,我很久以前就开始考虑在NAS上部署一个Memos。但是因为各种问题一直没有能够部署成功。
拉取Docker镜像
因为一些虫豸在Docker Hub上搞事,导致Docker Hub乃至国内的很多镜像都被GFW一波带走了。所以,第一步拉取Docker镜像就把我卡在原地,很长时间动弹不得。
我手头有VPN,所以在PC上连接Docker Hub不是问题,但是在NAS上,我是没有办法直接用VPN连接Docker Hub的。所以,对于我来说最合理的解决方案就是使用VPN连接Docker Hub,然后将数据传到NAS 上——但是Docker Hub并不支持这种全手动操作。普遍都是要求使用Docker Composer直接拉取后在本地运行。这就很蛋疼。
终于我决定考虑解决这个问题,并且一番搜索后找到了解决方案。我使用的是这个文章中提到的docker-drag。
这个软件的主题非常简单,就是一个docker-pull.py
,正好我也有完整的Python环境,就用它了。运行这个Python脚本需要一个名为requests的Package,然后运行这个脚本:
pip install requests
python docker-pull.py neosmemo/memos
这个Python脚本就会将neosmemo/memos从Docker Hub上抓下来,所以,运行Python脚本的时候需要挂上梯子。经过一段时间的等待,就会在Python脚本所在的目录当中生成neosmemo_memos.tar
。这就是Memos的 Docker Image。
这可真的是……从第一步开始走的就是邪道。
上传 Docker 镜像
接下来,就是将这个.tar
文件上传到NAS。这个很简单而且有800种办法,不用多说。
然后,就是将.tar
文件添加到NAS 的 Docker映像列表。

很幸运,Synology在Docker里留了这个口子,可以让我们从文件添加Docker镜像。添加之后,就可以在“映像”列表中看到Memos。
添加并启动容器
之后就是相对来说比较常规的操作了,从映像添加并启动Container就可以了。
在群晖上部署Memos的教程网上实在很多,我也参考了其中的一篇。基本上我的操作除了第一步是用docker-pull.py
手动拉取、手动上传的之外,后面的操作就和这些教程没有什么区别了。
一路走完后就可以启动Container了。
外部访问
这时候,如果在内网的话,应该是可以通过nas:5230
来访问Memos的。但是我此时并没有在内网,而是在办公室。如果直接用DDNS提供的域名和端口号来访问的话,就会报ERR_CONNECTION_CLOSED
的错误。想要在外网访问,添加一个反向代理就可以了。

我这里设定的反代来源端口为假如是abcd
,走https
协议,启用HSTS,然后我只需要使用域名:abcd
就可以访问Memos了,一次成功:

以上就是在Synology NAS上部署Memos的全纪录。
Update 2024-12-26:
这两天Memos更新,但是在使用docker-pull.py
抓取Image的时候出问题了:
Traceback (most recent call last):
File "C:\tools\docker-drag\docker_pull.py", line 87, in <module>
layers = resp.json()['layers']
~~~~~~~~~~~^^^^^^^^^^
KeyError: 'layers'
去GitHub上看了一眼,似乎是和Schema Version有关。并且有人已经在原始版本上Fork了一个支持新版Schema的:
https://github.com/heran226813/docker-drag
下载这个版本后,一切正常了。