Image Image Image Image Image

28

6 月

部署Memos的坎坷之路

  • By IanGoo

Memos是一个我很看好的开源笔记App,它基本上可以理解为本地版本的Flomo。我之所以看上这个项目,一个比较重要的原因是长期以来我一直使用群晖自带的Synology Note Station来写日记(正经人谁写日记啊摔),但是Synology Note Station是一个相当Old School的App,不支持任何现代的特性。而Memos就太合适了:

  1. 支持大量现代Features,比如Markdown。
  2. 支持本地部署,这个不需要多解释。
  3. 有一个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。

Container常规设置。我只打开了启用自动重新启动。不要通过Web Station启动。

容器端口为5230,本地端口自己选择,我用的是相同的5230

设定存储空间,容器的装在路径为var/opt/memos,本地的路径随意。我这里设定为docker/memos,这样可以将数据库保存在Host目录。


一路走完后就可以启动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

下载这个版本后,一切正常了。

Tags | ,