飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
前言
笔记工具越换越多,最容易出现的情况不是"没地方记",而是内容散在不同App、云端和设备里:一段部署命令在电脑上,一份排错记录在手机里,真正要找的时候反而要先回忆"当时到底记在哪"。如果平时记录的主要是Markdown文本,其实不一定需要一套很重的知识库系统。
这次我把 flatnotes 部署到一台刷了飞牛NAS ARM版的RK3566小主机上。先通过SSH进入系统,用Docker启动官方镜像,把8080映射出来,并通过账号密码方式登录。
本地页面跑通以后,继续实际完成新建笔记、Markdown/WYSIWYG编辑、保存、模糊搜索和手机访问,确认它不仅是"容器Up",而是真的能承担日常记录。
最后再给8080增加外部访问入口,从随机公网地址切换到固定二级子域名。整篇重点是把飞牛NAS → flatnotes → Markdown笔记 → 搜索 → 手机/外网访问 这条链真正跑通,同时把示例账号、密码和SECRET_KEY这些安全配置单独说明清楚。
这类工具真正适合长期使用的地方,也不只是"打开就能记",而是笔记文件、搜索入口和访问方式都比较简单,后面换设备、做备份或继续迁移时,不需要先理解一套复杂的数据结构。

1 flatnotes适合解决什么问题
flatnotes更适合被理解成:
一个轻量、自托管、以Markdown文件为核心的笔记Web应用。
项目地址:
https://github.com/dullage/flatnotes
它的特点不是"功能越多越好",而是把日常记录需要的几件事集中起来:
- 新建Markdown笔记;
- 编辑和预览;
- 全文搜索;
- 标签和关联;
- 浏览器直接访问;
- 手机端自适应。
如果平时主要保存:
- 命令;
- 部署步骤;
- 技术备忘;
- 临时记录;
- 简单知识整理;
这种结构反而比较直接。
2 "不依赖传统数据库"不等于"没有数据要备份"
flatnotes的笔记最终以Markdown文件形式保存。
这确实比"所有内容都锁在某个数据库里"更容易理解和迁移。
但Docker部署里仍然需要持久化:
/data
所以更准确的说法是:
笔记以普通Markdown文件保存,不需要额外部署传统数据库服务。
而不是:
系统完全没有数据层、也不用做备份。
3 本次运行环境
这次使用的是:
RK3566小主机 + 飞牛NAS ARM版
飞牛NAS本身已经可以运行Docker。
页面:

所以不需要再单独安装Docker。
4 先开启SSH
进入飞牛NAS系统设置,开启SSH:

然后在Windows里打开终端:

执行:
shell
ssh rk3566@192.168.50.212
结果:

5 切换root
执行:
shell
sudo -i
结果:

后面的Docker部署都在这个终端里完成。
6 用Docker启动flatnotes
执行:
shell
docker run -d \
--name flatnotes \
--restart unless-stopped \
-p 8080:8080 \
-e PUID=1000 \
-e PGID=1000 \
-e FLATNOTES_AUTH_TYPE=password \
-e FLATNOTES_USERNAME=admin \
-e FLATNOTES_PASSWORD=123456 \
-e FLATNOTES_SECRET_KEY=flatnotes-secret-key-2026 \
-v flatnotes-data:/data \
dullage/flatnotes:latest
这条命令里主要包括:
- 容器名:
flatnotes - 重启策略:
unless-stopped - 端口:
8080:8080 - PUID:
1000 - PGID:
1000 - 登录方式:
password - 用户名:
admin - 密码:
123456 FLATNOTES_SECRET_KEY- 数据卷:
flatnotes-data:/data - 镜像:
dullage/flatnotes:latest
7 示例账号密码不要直接照抄长期使用
这份命令里的:
FLATNOTES_USERNAME=admin
和:
FLATNOTES_PASSWORD=123456
明显更适合作为演示值。
如果准备长期使用,尤其是后面还要开放公网,至少应该替换成:
- 自定义用户名;
- 强密码。
同样,FLATNOTES_SECRET_KEY=flatnotes-secret-key-2026也不适合直接作为长期公开环境里的固定示例值。
代码块按已经跑通的内容原样保留,但实际部署时更适合自己生成并保存独立密钥。
8 flatnotes-data是笔记数据的关键位置
Docker里挂载了:
flatnotes-data:/data
这意味着笔记数据并不只存在于容器临时层里。
所以后面重建容器时,数据可以继续保存在这个Docker Volume中。
但持久化不等于自动备份。
如果这些笔记有长期价值,仍然建议定期备份对应数据卷。
9 查看容器状态
执行:
shell
docker ps
页面:

状态显示:
- Up;
- healthy。
说明容器进程已经正常。
但这一步只能证明:
容器在运行。
还要继续验证8080页面。
10 浏览器打开8080
访问:
shell
http://192.168.50.212:8080
页面:

能够打开以后,可以确认:
浏览器 → 飞牛NAS:8080 → flatnotes
已经跑通。
11 使用账号密码登录
登录页面:

使用前面Docker环境变量里配置的账号密码登录。
进入以后:

首页非常简洁。
这也是flatnotes比较明显的设计取向:
先搜索,需要时再创建。
12 新建一篇笔记
点击右上角:
New Note
页面:

进入编辑页面。
13 编辑器同时照顾Markdown和可视化编辑
编辑页面:

flatnotes支持:
- 标题;
- Markdown正文;
- WYSIWYG切换。
继续切换模式:

对于熟悉Markdown的人,可以直接写语法。
不熟悉Markdown时,也可以使用可视化方式编辑。
14 保存以后回到主页
点击:
Save
页面:

首页会显示刚刚保存的笔记标题。
这一层验证的是:
编辑 → 保存 → 首页展示
已经完整跑通。
15 点进笔记还能继续预览和编辑
页面:

详情页面可以继续:
- 阅读;
- 编辑;
- 删除。
做到这里,flatnotes作为一个基本笔记工具已经具备日常使用能力。
16 搜索比文件夹层级更重要
flatnotes没有把复杂文件夹作为核心。
真正高频的查找方式是:
搜索。
例如输入:
shell
一个*
页面:

这里使用*进行前后模糊匹配。
如果以后已经积累很多部署记录,只记得标题或正文里的一部分词,这种方式会比一层层翻目录更快。
17 搜索能不能找到内容,比"笔记数量多少"更重要
知识库真正容易失效的原因,不是写得少,而是:
写完以后找不到。
flatnotes的思路就是让:
- 标题;
- 正文;
- 标签;
都围绕搜索组织。
所以如果你的记录习惯本来就是短笔记、命令片段和技术步骤,这种结构很合适。
18 手机端也直接测试
在手机浏览器里输入飞牛NAS的局域网地址:

页面能够正常适配。
这说明:
电脑和手机都能直接用浏览器访问同一个flatnotes。
不需要再单独安装客户端。
19 "浏览器能访问"不等于所有笔记天然安全
flatnotes本身提供认证能力。
但笔记里可能保存:
- 服务器命令;
- IP地址;
- 内网服务;
- 部署步骤;
- 项目记录;
- 账号相关提示。
所以后面一旦准备公网访问,认证强度就很重要。
尤其不建议继续保留:
admin / 123456
这种演示账号。
20 到这里,本地flatnotes已经跑通
当前链路是:
RK3566飞牛NAS
↓
Docker
↓
flatnotes
↓
8080
↓
账号登录
↓
新建笔记
↓
Markdown / WYSIWYG编辑
↓
保存
↓
模糊搜索
↓
手机访问
如果只在局域网里使用,到这里已经可以作为轻量笔记服务。
21 接下来解决外部访问
cpolar说明图:

本地服务已经跑在:
8080
后面的远程链路解决的是:
外部浏览器如何访问这个8080页面。
22 安装cpolar
执行:
shell
sudo curl https://get.cpolar.sh | sh
结果:

安装完成以后检查服务状态:
shell
sudo systemctl status cpolar
结果:

看到:
active (running)
以后再进入Web管理页面。
23 打开cpolar Web UI
访问:
http://192.168.50.212:9200
页面:

注册并登录以后进入隧道管理。
24 查看默认隧道
登录以后:

可以看到默认隧道。
这次处理:
website
这条HTTP隧道即可。
25 把website改给flatnotes使用
编辑隧道:

本地目标改成:
8080
这样公网入口就会指向flatnotes。
26 查看随机公网地址
进入:
状态 → 在线隧道列表
页面:

会看到HTTP和HTTPS地址。
使用HTTPS测试:

能够正常打开以后,可以确认:
外部浏览器 → 公网地址 → 飞牛8080 → flatnotes
已经跑通。
27 随机地址更适合先做连通验证
随机地址适合:
- 临时测试;
- 偶尔访问;
- 先确认外网链路。
如果准备把flatnotes长期收藏到浏览器或手机,再继续配置固定二级子域名。
28 保留固定二级子域名
进入预留页面:
shell
https://dashboard.cpolar.com/reserved
配置说明:
| 配置项 | 说明 |
|---|---|
| 地区 | 与隧道保持一致,例如China Top |
| 名称 | 自定义二级子域名,例如flatnotes |
| 描述 | 方便自己识别即可 |
页面:

实际名称以自己账号最终成功保留的结果为准。
29 编辑flatnotes隧道
回到隧道列表:

把域名类型改成:
二级子域名
填写已经保留的名称:

更新即可。
30 查看固定公网地址
进入在线隧道列表:

可以看到flatnotes隧道已经切换成固定二级子域名形式。
31 最后做一次固定地址访问
浏览器打开:

继续登录并进入笔记:

做到这里,可以确认:
固定公网地址 → flatnotes登录 → 笔记访问
已经完整跑通。
32 固定地址解决的是入口稳定
固定二级子域名主要解决:
- 浏览器长期收藏;
- 手机不用反复找新地址;
- 多设备使用同一个入口。
它解决的是:
地址不频繁变化。
并不代表:
- flatnotes账号自动安全;
- Markdown数据绝对不会丢;
- Docker Volume自动备份;
- 公网地址永远不受账号或服务状态影响。
33 自托管更准确的理解是什么
把flatnotes部署到自己的NAS上以后:
- Web服务在自己的设备上;
- 笔记数据卷在自己的环境里;
- 账号由自己配置;
- 访问入口由自己维护。
这确实比完全依赖第三方笔记平台更可控。
但"自托管"不等于:
数据绝对不会泄露或丢失。
真正决定长期可靠性的还是:
- 账号密码;
SECRET_KEY;- 数据卷备份;
- NAS硬盘;
- Docker环境;
- 公网访问范围。
34 这套方案更适合什么人
比较适合:
- 经常记录命令;
- 保存部署步骤;
- 想用Markdown写技术笔记;
- 不喜欢复杂文件夹结构;
- 想让电脑和手机共用同一套笔记;
- 已经有NAS或小主机。
如果真正需要:
- 多人协作;
- 权限体系;
- 数据库级结构化知识;
- 大型团队文档;
- 复杂工作流;
flatnotes就不一定是最合适的选择。
它更擅长的是:
简单、直接、随手记。
35 最后把完整技术链重新看一遍
硬件:
RK3566小主机
系统:
飞牛NAS ARM版
部署:
Docker → dullage/flatnotes:latest
端口:
8080:8080
认证:
password
数据:
flatnotes-data:/data
本地使用:
登录 → 新建 → 编辑 → 保存 → 搜索 → 手机访问
随机远程:
公网随机地址 → 8080
固定远程:
固定二级子域名 → 8080
实际完成:
- 飞牛Docker;
- SSH;
- root;
- flatnotes容器;
- 8080访问;
- 管理员登录;
- 新建笔记;
- Markdown编辑;
- WYSIWYG编辑;
- 保存;
- 详情预览;
- 模糊搜索;
- 手机访问;
- cpolar安装;
- 随机公网访问;
- 固定二级子域名;
- 固定地址登录;
- 笔记访问。
这样flatnotes才真正从"一个轻量Markdown项目",变成一套运行在自己NAS上的浏览器笔记入口。
总结
这次真正跑通的是一条完整的flatnotes使用链:先在RK3566飞牛NAS上通过Docker启动flatnotes,把8080映射出来,并用密码方式完成首次登录。
本地验证没有停在"容器healthy"。后面继续完成了新建笔记、Markdown和WYSIWYG两种编辑方式、保存、详情预览、模糊搜索和手机访问,确认它确实可以承担日常技术笔记和命令记录。
这篇最需要注意的是账号和密钥。Docker命令里的admin / 123456以及示例FLATNOTES_SECRET_KEY都更适合作为演示值,如果准备长期使用或开放公网,应该替换成自己的强密码和独立密钥,同时给flatnotes-data做额外备份。
远程部分是在8080本地访问正常以后再增加的能力。随机公网地址先验证链路,固定二级子域名再解决长期入口变化的问题;固定地址让电脑和手机更方便收藏,但真正决定笔记安全的仍然是flatnotes认证、NAS本身和数据备份。