暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

无需数据库的笔记flatnotes

各种折腾 2022-12-26
613

本文完成于 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

@所有人:写文不易,如果你都看到了这里,请点个
在看
,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。

文章转载自各种折腾,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论