本文完成于
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
文件夹的权限,最终用了下面的命令
# 进入 flatnotes 目录
cd /volume2/docker/flatnotes
# 更新目录权限
chown -R 1000:1000 ./data
这一步是必须的,否则会因为没有写入权限而导致容器启动失败,包括你拷入的文件,也必须更改归属权,否则文件将是只读的,也就是说你可以阅读笔记,但是修改后保存会报错
文件夹 | 装载路径 | 说明 |
---|---|---|
docker/flatnotes/data | /app/data | 存放笔记文件等 |
端口
本地端口不冲突就行,不确定的话可以用命令查一下
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 | 容器端口 |
---|---|
19980 | 19980 |
默认打开是没有端口的
其实默认端口是 80
,关于端口为什么要从默认的 80
改为 19980
,这就是第二个关键点
【关键点2】
如果使用默认的容器端口 80
,你会在容器的日志中看到下面的错误
2022-10-31 08:17:38 [INFO]: Application startup complete.
ERROR: [Errno 13] error while attempting to bind on address ('0.0.0.0', 80): permission denied
2022-10-31 08:17:38 [ERROR]: [Errno 13] error while attempting to bind on address ('0.0.0.0', 80): permission denied
老苏在命令行安装时尝试过:
--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
更快捷
# 新建文件夹 flatnotes 和 子目录
mkdir -p /volume2/docker/flatnotes/data
# 进入 flatnotes 目录
cd /volume2/docker/flatnotes
# 更新目录权限
chown -R 1000:1000 ./data
# 运行容器
docker run -d \
--restart unless-stopped \
--name flatnotes \
-p "19980:19980" \
-v "$(pwd)/data:/app/data" \
-e "FLATNOTES_AUTH_TYPE=password" \
-e "FLATNOTES_USERNAME=<登录用户>" \
-e "FLATNOTES_PASSWORD=<登录密码>" \
-e "FLATNOTES_SECRET_KEY=<一串随机字符串>" \
-e "PORT=19980" \
dullage/flatnotes:latest
# 示例
docker run -d \
--restart unless-stopped \
--name flatnotes \
-p "19980:19980" \
-v "$(pwd)/data:/app/data" \
-e "FLATNOTES_AUTH_TYPE=password" \
-e "FLATNOTES_USERNAME=laosu" \
-e "FLATNOTES_PASSWORD=123456" \
-e "FLATNOTES_SECRET_KEY=xPWrN5VUUStVzY4Yktc7ijyG" \
-e "PORT=19980" \
dullage/flatnotes:latest
也可以用 docker-compose
安装,将下面的内容保存为 docker-compose.yml
文件
version: '3'
services:
flatnotes:
image: dullage/flatnotes:latest
container_name: flatnotes
restart: unless-stopped
ports:
- 19980:19980
volumes:
- ./data:/app/data
environment:
- FLATNOTES_AUTH_TYPE=password
- FLATNOTES_USERNAME=laosu
- FLATNOTES_PASSWORD=123456
- FLATNOTES_SECRET_KEY=xPWrN5VUUStVzY4Yktc7ijyG
- PORT=19980
然后执行下面的命令
# 新建文件夹 flatnotes 和 子目录
mkdir -p /volume2/docker/flatnotes/data
# 进入 flatnotes 目录
cd /volume2/docker/flatnotes
# 更新目录权限
chown -R 1000:1000 ./data
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
运行
在浏览器中输入 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/flatnotes
Environment Variables · Dullage/flatnotes Wiki
地址:https://github.com/Dullage/flatnotes/wiki/Environment-Variables
Port 80 permission denied on Synology · Issue #28 · Dullage/flatnotes
地址:https://github.com/Dullage/flatnotes/issues/28