【实用的开源工具】Memos:自托管的碎片笔记,数据只放在自己服务器上

阅读约 4 分钟
【实用的开源工具】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 的时间线界面

图:Memos 官方产品预览图,来源:usememos/.github,未做修改。

  • 时间线笔记:打开就是输入框,写完一条就是一条,适合记零碎的想法,不用先想“放在哪个文件夹”。
  • 标签和搜索:用 #标签 归类,按标签筛选。
  • 附件:可以存在数据库里、服务器本地磁盘,或 S3 兼容的对象存储。
  • 隐私可控:可以设成必须登录才能看,也可以把某条笔记单独公开分享。
  • 接口:提供 REST 和 gRPC 接口,方便接自己的脚本、机器人。

不适合的场景:需要多层目录、双向链接、大量长文档的人,更适合 Obsidian、Trilium 这类工具。Memos 的定位是“随手记”。

部署

先准备一个目录,例如 /opt/memos,里面放一个 compose.yaml:

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

启动:

bash
cd /opt/memos
docker compose up -d
docker compose logs -f

官方文档的写法是 5230:5230,我改成了 127.0.0.1:5230:5230,原因见下面的“坑”。MEMOS_INSTANCE_URL 改成你自己的域名。

没有域名,只想先试一下,也可以用官方给的单行命令:

bash
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 这几个头:

nginx
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。

备份与升级

  • 备份:官方的说法是数据都在挂载的数据目录里,备份这一个目录就行。如果附件没有存在数据库里,要确认附件文件也在备份范围内。
  • 升级:
bash
cd /opt/memos
cp -a data data.bak-$(date +%F)    # 先备份
docker compose pull
docker compose up -d

踩坑清单

  1. Docker 发布的端口会绕过 ufw 之类的防火墙规则。 直接写 5230:5230,别人可能不经过你的 Nginx 就能访问到。所以我把它绑定在 127.0.0.1,只让本机的 Nginx 访问。
  2. 数据目录要可写。 官方排错页把“无法写入数据目录”列为常见问题。容器起来了但页面没反应,先看 docker logs memos,再看挂载目录的权限。
  3. MEMOS_INSTANCE_URL 要和对外网址一致。 官方说明,链接和 Cookie 都依赖它。反向代理后页面跳转异常、登录后又掉线,先查这一项和代理头。
  4. 0.31 里“网址”和“访问策略”是分开的。 官方文档说,改了 MEMOS_INSTANCE_URL 不会改变已有的公开/私有访问策略。想要必须登录才能看,要在实例设置里单独选私有。
  5. 0.31 登录用户名区分大小写。 升级后登录失败,先检查用户名大小写。
  6. 老笔记的标签可能不显示在筛选里。 官方说明 0.31 的标签语法变了,已有的标签索引不会自动重建,要把受影响的笔记重新保存一次。
  7. 版本号还是 0.x,升级前看发布说明。 项目还在快速迭代,上面几条都是跨版本的变化。生产使用前先备份,别直接跟着最新版走。
  8. 公开分享的链接在撤销或过期前一直有效。 即使把实例设成私有,已经发出去的分享链接仍可访问,要手动撤销。

出处

想要类似的东西?网站、Telegram 机器人、运维工具,说说你的需求。
发布需求

有想法或问题?去留言板留言 →