无需数据库的笔记flatnotes
本文完成于
10月底;
什么是 flatnotes?
flatnotes是一个自托管的、无数据库的笔记Web应用程序,它利用文件夹存储Markdown文件。
官方演示站点:https://demo.flatnotes.io/
前言
本文介绍的软件很简单,但是有两个关键点,这两个关键的点不搞清楚,你安装的容器就会起不来
- 关键点1:文件夹权限
- 关键点2:端口的权限
具体的内容,我们在居然涉及到的地方再展开说,不然感觉很突兀,也不舒畅
安装
不推荐用群晖图形方式安装,因为涉及到文件夹的权限老苏不知道怎么设置,老苏目前只会用命令行,既然都已经用了命令行,不如直接用命令行完成全部的安装
在群晖上以 Docker 方式安装。
在注册表中搜索 flatnotes ,选择第一个 dullage/flatnotes,版本选择 latest。

卷
在 docker 文件夹中,创建一个新文件夹 flatnotes,并在其中建一个子文件夹 data 。
这里我们遇到了第一个关键点:
【关键点1】
官方原始的描述 please ensure the current directory contains a folder called "data" and that it's writable by user 1000.
老苏觉得比较好的策略是将容器的 UID/GID 与主机的匹配,对于群晖来说,并不需要存在 1000 这个用户,也正因为这个用户不存在,所以老苏不知道怎么用图像界面来设置 data 文件夹的权限,最终用了下面的命令
1 | # 进入 flatnotes 目录 |

这一步是必须的,否则会因为没有写入权限而导致容器启动失败,包括你拷入的文件,也必须更改归属权,否则文件将是只读的,也就是说你可以阅读笔记,但是修改后保存会报错
| 文件夹 | 装载路径 | 说明 |
|---|---|---|
docker/flatnotes/data |
/app/data |
存放笔记文件等 |

端口
本地端口不冲突就行,不确定的话可以用命令查一下
1 | # 查看端口占用 |
| 本地端口 | 容器端口 |
|---|---|
19980 |
19980 |
默认打开是没有端口的

其实默认端口是 80,关于端口为什么要从默认的 80 改为 19980,这就是第二个关键点
【关键点2】
如果使用默认的容器端口 80,你会在容器的日志中看到下面的错误
1 | 2022-10-31 08:17:38 [INFO]: Application startup complete. |

老苏在命令行安装时尝试过:
--user 1000:1000--cap-add NET_BIND_SERVICE--privileged
但都没用,直到最后看了官方的 Issue,才找到了最终的解决方案,那就是需要将容器端口改为 1024以上才行,而这可以通过环境变量来实现,所以老苏最终用了 19980 端口,从日志看获得了成功

现在只要设置端口就可以了

环境
| 可变 | 值 |
|---|---|
FLATNOTES_AUTH_TYPE |
认证的方式 |
FLATNOTES_USERNAME |
登录的用户 |
FLATNOTES_PASSWORD |
登录的密码 |
FLATNOTES_SECRET_KEY |
应用程序密码 |
PORT |
默认为 80 |
关于 FLATNOTES_AUTH_TYPE 简单说一下,其支持三种认证方式
none:不需要认证,直接使用 ;password:用账号密码认证;totp:除了账号密码,还需要基于时间的一次性密码,totp的全称是Time-based One-time Password,这个在介绍Authelia的时候涉及过,有兴趣可以自己研究
更多的参数请看官方的 wiki:https://github.com/Dullage/flatnotes/wiki/Environment-Variables
端口已经有,直接修改

其他四项为新增

命令行安装
如果你熟悉命令行,可能用 docker cli 更快捷
1 | # 新建文件夹 flatnotes 和 子目录 |
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
1 | version: '3' |
然后执行下面的命令
1 | # 新建文件夹 flatnotes 和 子目录 |
运行
在浏览器中输入 http://群晖IP:19980 就能看到登录界面

用我们前面设置的 FLATNOTES_USERNAME 和 FLATNOTES_PASSWORD登录,登录成功后是一个搜索界面

点右上角的 NEW 新建笔记

复制了一篇,用预览模式查看

返回首界面可以看到刚才写的笔记

笔记就保存在 /data 目录中
/data/.flatnotes是索引目录

老苏直接拷入了几篇

直接刷新主页,都有了

但是编辑保存的时候会出错误

看日志还是跟文件权限有关系

直接查看文件,所以这实际上还是属于【关键点1】

所以接下来只要执行 chown -R 1000:1000 . 就可以了
注意后面的小点别落下了;

再回到网页就可以正常保存了
所以总结一下就是,从外部拷入的文件还是需要修改所有权,但是系统中新建的文件不存在这样的问题
参考文档
Dullage/flatnotes: A self-hosted, database-less note taking web app that utilises a flat folder of markdown files for storage.
地址:https://github.com/Dullage/flatnotesEnvironment Variables · Dullage/flatnotes Wiki
地址:https://github.com/Dullage/flatnotes/wiki/Environment-VariablesPort 80 permission denied on Synology · Issue #28 · Dullage/flatnotes
地址:https://github.com/Dullage/flatnotes/issues/28