【实用的开源工具】Memos:自托管的碎片笔记,数据只放在自己服务器上
「实用的开源工具」系列:我只收集值得用的开源项目,写清楚它能做什么、怎么部署、有哪些坑,并在文末标明出处。内容整理自官方文档,核对日期 2026-10-30,具体版本以官方为准。
项目信息卡
| 项目 | 说明 |
|---|---|
| 名称 | Memos |
| 做什么 | 以时间线形式记录碎片笔记、想法、待办,支持标签、附件和 Markdown |
| 许可证 | MIT |
| 仓库 | github.com/usememos/memos |
| 文档 | usememos.com/docs |
| 在线演示 | demo.usememos.com |
| 最近版本 | v0.31.0(2026-09-19 发布,查询于 2026-10-30) |
| 运行方式 | 单个容器,默认用 SQLite,也可换 MySQL / PostgreSQL |
它能做什么

图:Memos 官方产品预览图,来源:usememos/.github,未做修改。
- 时间线笔记:打开就是输入框,写完一条就是一条,适合记零碎的想法,不用先想“放在哪个文件夹”。
- 标签和搜索:用
#标签归类,按标签筛选。 - 附件:可以存在数据库里、服务器本地磁盘,或 S3 兼容的对象存储。
- 隐私可控:可以设成必须登录才能看,也可以把某条笔记单独公开分享。
- 接口:提供 REST 和 gRPC 接口,方便接自己的脚本、机器人。
不适合的场景:需要多层目录、双向链接、大量长文档的人,更适合 Obsidian、Trilium 这类工具。Memos 的定位是“随手记”。
部署
先准备一个目录,例如 /opt/memos,里面放一个 compose.yaml:
services:
memos:
image: neosmemo/memos:stable
container_name: memos
restart: unless-stopped
ports:
- "127.0.0.1:5230:5230"
volumes:
- ./data:/var/opt/memos
environment:
MEMOS_PORT: 5230
MEMOS_DRIVER: sqlite
MEMOS_INSTANCE_URL: https://memos.example.com启动:
cd /opt/memos
docker compose up -d
docker compose logs -f官方文档的写法是 5230:5230,我改成了 127.0.0.1:5230:5230,原因见下面的“坑”。MEMOS_INSTANCE_URL 改成你自己的域名。
没有域名,只想先试一下,也可以用官方给的单行命令:
docker run -d --name memos -p 5230:5230 -v ~/.memos:/var/opt/memos neosmemo/memos:stable然后在浏览器打开 http://服务器IP:5230,创建第一个账号。
套上 HTTPS(Nginx)
生产环境建议放在反向代理后面。官方要求转发 Host、X-Forwarded-Proto、X-Forwarded-For 这几个头:
server {
listen 443 ssl;
server_name memos.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
client_max_body_size 50m;
location / {
proxy_pass http://127.0.0.1:5230;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}改完执行 nginx -t && systemctl reload nginx。
备份与升级
- 备份:官方的说法是数据都在挂载的数据目录里,备份这一个目录就行。如果附件没有存在数据库里,要确认附件文件也在备份范围内。
- 升级:
cd /opt/memos
cp -a data data.bak-$(date +%F) # 先备份
docker compose pull
docker compose up -d踩坑清单
- Docker 发布的端口会绕过 ufw 之类的防火墙规则。 直接写
5230:5230,别人可能不经过你的 Nginx 就能访问到。所以我把它绑定在127.0.0.1,只让本机的 Nginx 访问。 - 数据目录要可写。 官方排错页把“无法写入数据目录”列为常见问题。容器起来了但页面没反应,先看
docker logs memos,再看挂载目录的权限。 MEMOS_INSTANCE_URL要和对外网址一致。 官方说明,链接和 Cookie 都依赖它。反向代理后页面跳转异常、登录后又掉线,先查这一项和代理头。- 0.31 里“网址”和“访问策略”是分开的。 官方文档说,改了
MEMOS_INSTANCE_URL不会改变已有的公开/私有访问策略。想要必须登录才能看,要在实例设置里单独选私有。 - 0.31 登录用户名区分大小写。 升级后登录失败,先检查用户名大小写。
- 老笔记的标签可能不显示在筛选里。 官方说明 0.31 的标签语法变了,已有的标签索引不会自动重建,要把受影响的笔记重新保存一次。
- 版本号还是 0.x,升级前看发布说明。 项目还在快速迭代,上面几条都是跨版本的变化。生产使用前先备份,别直接跟着最新版走。
- 公开分享的链接在撤销或过期前一直有效。 即使把实例设成私有,已经发出去的分享链接仍可访问,要手动撤销。
出处
想要类似的东西?网站、Telegram 机器人、运维工具,说说你的需求。
发布需求有想法或问题?去留言板留言 →