当前位置: 首页 > news >正文

私有 Markdown 笔记部署:Docker 一键部署 Memos 笔记

本文基于 neosmemo/memos:stable 镜像(实测版本0.29.1),Ubuntu 24.04 服务器实测

怕笔记放 Notion、飞书、语雀,数据不在自己手里?Memos是一款开源、可自托管的轻量笔记服务——镜像约20MB,默认SQLite一条docker run就能跑。打开浏览器写 Markdown、打#标签、按时间线翻旧笔记,手机电脑同步访问,数据全在你自己的服务器上。

本文带你完成一次Memos 一条命令 Docker 部署:从轩辕镜像拉取、docker run一键启动、读懂启动日志,到浏览器注册管理员、切换中文界面、写下第一条 memo——全程零基础可跟做,文末附6 张实测截图

国内用户从 Docker Hub 拉取neosmemo/memos可能较慢,本文使用 轩辕镜像 加速域docker.xuanyuan.run。官方文档见 usememos.com/docs,源码仓库 usememos/memos。


一、Memos 是什么?

Memos是一款开源、自托管的轻量笔记服务,主打「打开就写、数据在自己手里」。核心能力:

能力说明
快速记录时间线 UI,打开即写,无需文件夹层级
数据自主自托管部署,笔记以 Markdown 存储,零遥测
极轻量单 Go 二进制,Docker 镜像约20MB;默认SQLite,无需 MySQL / Redis
可扩展MIT 许可,提供 REST 与 gRPC API,便于二次集成

典型使用场景:

  • 个人灵感库、碎片待办、读书摘抄
  • 小团队轻量知识库,数据不经过第三方 SaaS
  • 替代部分 Notion / 飞书文档的「随手记」场景,强调隐私与简单

与云笔记的区别:Memos 没有复杂协作与模板市场,胜在部署简单、资源占用极低、数据完全可控。若需要块级编辑与知识图谱,可考虑 SiYuan 等更重型的方案。


二、环境要求

项目建议
操作系统Linux(本文 Ubuntu 24.04)
Docker已安装 Docker 与 Docker Compose V2
内存≥ 512 MB(空闲约 50~80 MB)
CPU单核即可;双核更从容
磁盘≥ 1 GB(镜像 + SQLite + 附件)
端口5230(Memos 默认 Web 端口)

验证 Docker:

docker--versiondockercompose version

若尚未安装 Docker,可使用轩辕镜像一键脚本:

bash<(wget-qO- https://xuanyuan.cloud/docker.sh)

更多安装说明见 轩辕镜像使用手册。


三、快速体验:单容器部署

适合:个人试用、内网随手记、资源有限的 VPS。

3.1 创建数据目录

sudomkdir-p/www/wwwroot/memos/datasudochown-R$USER:$USER/www/wwwroot/memoscd/www/wwwroot/memos

3.2 拉取并启动容器

拉取镜像(若已拉取可跳过):

dockerpull docker.xuanyuan.run/neosmemo/memos:stable

启动 Memos:

dockerrun-d\--namememos\--restartunless-stopped\-p5230:5230\-v/www/wwwroot/memos/data:/var/opt/memos\docker.xuanyuan.run/neosmemo/memos:stable

各参数说明:

配置说明
-p 5230:5230对外暴露 Web 访问端口
-v ...:/var/opt/memos持久化 SQLite 数据库与本地附件
stable生产推荐标签(实测对应0.29.1
--restart unless-stopped宿主机重启后自动拉起
官方镜像轩辕镜像加速拉取
neosmemo/memos:stabledocker pull docker.xuanyuan.run/neosmemo/memos:stable

3.3 验证启动

查看日志:

dockerlogs-fmemos

成功时终端类似输出(Ubuntu 24.04 实测):

time=2026-06-28T05:11:44.804Z level=INFO msg="initializing new database with latest schema" time=2026-06-28T05:11:44.826Z level=INFO msg="database initialized successfully" schemaVersion=0.28.1 Memos 0.29.1 started successfully! Data directory: /var/opt/memos Database driver: sqlite Server running on port 5230 Access your memos at: http://localhost:5230 Happy note-taking!

看到Memos 0.29.1 started successfully!Server running on port 5230即表示启动成功。另开终端快速探测:

curl-Ihttp://127.0.0.1:5230

应返回 HTTP200302(重定向到登录/注册页)。

日志提示:首次打开浏览器时可能出现refresh token not foundclient error,属于未登录时的正常请求,不影响使用。

确认容器状态:

dockerps|grepmemos

3.4 首次注册:创建管理员账户

浏览器打开:

http://你的服务器IP:5230

首次访问会进入创建账户页面。第一个注册的用户自动成为站点管理员(Memos 无固定默认账号密码)。

填写用户名与密码,点击注册即可登录。

安全提示:若对公网开放 5230,请尽快完成注册,避免他人抢先注册成为管理员。生产环境建议关闭公网直连,改用第五节 Compose + 反向代理 HTTPS

3.5 登录后主界面

注册成功后会进入 Memos 主界面:左侧为日历、标签与导航;中间上方为「Any thoughts…」输入框,下方为时间线 feed。

此时还没有任何 memo,会显示「No data found.」,属正常状态。

3.6 切换简体中文

默认界面为英文。点击左下角用户头像Language→ 选择简体中文,界面即可切换为中文。

切换后,搜索框变为「搜索备忘录…」,输入框提示变为「此刻的想法…」,标签区提示「您可以通过输入 ‘#标签’ 创建标签」

3.7 写第一条 memo

在输入框中写下内容,例如:

记录我此时此刻的想法。

点击保存。memo 会按时间线展示在下方,支持私有 / 公开可见性切换。

日常用法速记

  • 正文中写#工作#灵感会自动生成标签,点标签可筛选
  • 顶部搜索框按关键词检索标题与正文
  • 手机浏览器访问同一地址即可跨设备同步(数据在自建服务器上)

3.8 附件与多媒体(可选)

输入框左侧「+」可插入更多内容,不限于纯文字:

菜单项用途
Media插入图片、视频
录制音频浏览器内录音,适合语音备忘
文件上传附件
链接备忘录关联另一条 memo
添加位置为 memo 附加地理位置
更多展开其他扩展项

3.9 捷径过滤器(可选)

Memos 支持用表达式创建捷径(Shortcut),快速筛选 pinned、特定标签、未完成待办等。点击左侧捷径图标 →创建捷径,可参考右侧示例:

示例表达式含义
置顶pinned仅显示置顶 memo
近 1 小时created_ts >= now() - 60 * 60最近一小时内创建
工作标签tag in ["work"]含指定标签


四、生产推荐:Docker Compose

适合:长期运行、需要可复现配置、便于git管理部署文件的场景。

4.1 目录结构

cd/www/wwwroot/memos

将包含:

/www/wwwroot/memos/ ├── docker-compose.yml └── data/ # SQLite 与附件(自动创建)

4.2 编写docker-compose.yml

services:memos:image:docker.xuanyuan.run/neosmemo/memos:stablecontainer_name:memosrestart:unless-stoppedports:-"5230:5230"volumes:-./data:/var/opt/memosenvironment:MEMOS_PORT:5230MEMOS_DRIVER:sqlite# 生产环境填公网 URL,便于链接、Cookie 与分享正确# MEMOS_INSTANCE_URL: https://memos.example.com

4.3 启动与运维

dockercompose up-ddockercomposepsdockercompose logs-fmemos

常用运维命令:

# 查看日志dockercompose logs-fmemos# 停止(保留 data 目录)dockercompose down# 升级:拉新镜像后重建dockercompose pulldockercompose up-d

4.4 可选:PostgreSQL 后端

默认SQLite对个人与小团队足够。若用户较多或需独立数据库备份,可改用 PostgreSQL:

services:memos:image:docker.xuanyuan.run/neosmemo/memos:stablecontainer_name:memosrestart:unless-stoppedports:-"5230:5230"volumes:-./data:/var/opt/memosenvironment:MEMOS_DRIVER:postgresMEMOS_DSN:"postgresql://memos:请改为强密码@memos-db:5432/memos?sslmode=disable"MEMOS_INSTANCE_URL:https://memos.example.comdepends_on:-memos-dbmemos-db:image:docker.xuanyuan.run/library/postgres:16-alpinecontainer_name:memos-dbrestart:unless-stoppedenvironment:POSTGRES_USER:memosPOSTGRES_PASSWORD:请改为强密码POSTGRES_DB:memosvolumes:-memos_pgdata:/var/lib/postgresql/datavolumes:memos_pgdata:

使用外部数据库时,./data卷仍用于本地附件等实例数据,请一并备份。

4.5 生产环境注意

  • HTTPS:将 Memos 放在 Nginx、Caddy 或 Traefik反向代理之后,对外只暴露 443。详见 官方反向代理文档。
  • MEMOS_INSTANCE_URL:设为公网 URL(如https://memos.example.com),确保分享链接与登录 Cookie 正确。
  • 备份:定期备份./data目录(含memos_prod.db与上传文件);使用 PostgreSQL 时另备份数据库卷。
  • 防火墙:若必须直连端口,可sudo ufw allow 5230/tcp;云服务器需在安全组放行。更推荐仅反代对外、5230 仅内网访问。

4.6 镜像标签说明

标签适用场景
stable生产推荐,跟随稳定发布线(实测0.29.1
0.29.1等版本号完全固定版本,便于审计与回滚
latest偏开发向,不建议生产使用

五、常用环境变量速查

摘自 官方 Docker 文档:

变量默认用途
MEMOS_PORT5230HTTP 监听端口
MEMOS_ADDR绑定地址(空 = 所有网卡)
MEMOS_DATA/var/opt/memos数据目录
MEMOS_DRIVERsqlite数据库类型(sqlite/postgres/mysql
MEMOS_DSN自动postgres / mysql 连接串
MEMOS_INSTANCE_URL实例公网访问地址
MEMOS_MODEprod运行模式(prod/dev/demo
MEMOS_LOG_LEVELinfo日志级别(debug/info/warn/error

六、常见问题 FAQ

Q1:5230端口被占用怎么办?

单容器启动时改映射,例如宿主机用 8080:

dockerrun-d--namememos--restartunless-stopped\-p8080:5230\-v/www/wwwroot/memos/data:/var/opt/memos\docker.xuanyuan.run/neosmemo/memos:stable

浏览器访问http://服务器IP:8080。Compose 中把ports改为"8080:5230"即可。

Q2:数据存在哪里?

宿主机挂载目录(上例为/www/wwwroot/memos/data),容器内路径为/var/opt/memos。其中包含 SQLite 数据库(如memos_prod.db)与用户上传的附件。删除该目录会丢失全部笔记,升级镜像时请勿删除此目录。

Q3:如何升级 Memos?

# 单容器dockerpull docker.xuanyuan.run/neosmemo/memos:stabledockerstop memos&&dockerrmmemos# 再执行第三节 docker run(data 卷不变)# Composecd/www/wwwroot/memosdockercompose pulldockercompose up-d

Q4:日志里出现refresh token not found正常吗?

正常。首次打开页面、尚未登录时,浏览器会尝试刷新 token,服务端返回Unauthenticated并记一条client error不影响注册与使用。注册登录后该日志一般不再出现。

Q5:忘记密码怎么办?

Memos 无内置「忘记密码邮件」的默认流程,需参考官方文档或通过数据库重置。请参阅:

https://usememos.com/docs

建议在注册时使用强密码,并妥善保存;生产环境可限制注册或仅内网访问。

Q6:与 Docker Hub 官方镜像neosmemo/memos的关系?

功能相同。docker.xuanyuan.run/neosmemo/memos:stable为轩辕镜像加速的 Docker Hub 同步版,便于国内拉取。配置中将镜像名替换为轩辕域即可,其余命令与官方文档一致。

Q7:可以多人同时使用吗?

可以。管理员可在设置中管理用户与权限。小团队用 SQLite 通常足够;用户量较大时建议第四节 PostgreSQL 方案

Q8:如何停止与卸载?

# 单容器(保留 data 目录)dockerstop memos&&dockerrmmemos# Compose(保留 data 目录)cd/www/wwwroot/memos&&dockercompose down# 删除数据目录(慎用,笔记将全部丢失)rm-rf/www/wwwroot/memos/data

Q9:容器启动后浏览器无法访问?

依次检查:docker ps确认容器为Updocker logs memos看报错;本机curl -I http://127.0.0.1:5230是否通;云服务器安全组 / 防火墙是否放行 5230;若仅绑定了内网 IP,需用正确地址访问。


七、命令速查

操作命令
拉取镜像docker pull docker.xuanyuan.run/neosmemo/memos:stable
快速启动docker run -d --name memos --restart unless-stopped -p 5230:5230 -v /www/wwwroot/memos/data:/var/opt/memos docker.xuanyuan.run/neosmemo/memos:stable
Compose 启动cd /www/wwwroot/memos && docker compose up -d
查看日志docker logs -f memosdocker compose logs -f memos
健康检查curl -I http://127.0.0.1:5230
Web 访问http://服务器IP:5230
停止服务docker stop memos && docker rm memos

八、延伸阅读

主题链接
项目首页https://usememos.com
官方文档https://usememos.com/docs
Docker 部署https://usememos.com/docs/deploy/docker
Docker Composehttps://usememos.com/docs/deploy/docker-compose
反向代理 / HTTPShttps://usememos.com/docs/deploy/reverse-proxy
在线 Demohttps://demo.usememos.com/
GitHub 源码https://github.com/usememos/memos
轩辕镜像页https://xuanyuan.cloud/zh/r/neosmemo/memos
轩辕镜像https://xuanyuan.cloud

总结:Memos =私有化轻量 Markdown 笔记,镜像 20MB、一条命令就能跑。个人试用选第三节单容器,浏览器注册管理员 → 切换中文 → 写 memo;长期运行选第四节 Compose,配合数据备份反向代理 HTTPS,笔记数据完全在自己服务器上。

http://www.jsqmd.com/news/1096611/

相关文章:

  • 网络即生命线:智能运维引领企业网络监控新纪元
  • 如何高效下载国家中小学智慧教育平台电子课本:终极免费工具指南
  • Bebas Neue字体完整教程:从零开始掌握这款免费开源标题字体的终极指南
  • 【Python】内存探秘:从变量到容器,用sys.getsizeof剖析内存占用真相
  • 分布式存储一致性实战:Raft 协议在百万级集群中的“反直觉“陷阱
  • 西平全案装修亲测:拎包入住细节复盘
  • STM32G4的FDCAN滤波器到底怎么配?手把手教你用HAL库搞定数据帧和广播帧过滤
  • 智慧校园数字化改造实战:智能锁身份核验+通断电联动,解决宿舍教室安全与运维痛点
  • 机器学习工程化:可复现实验流程的系统性设计方法
  • 如何在5分钟内用EfficientNet-PyTorch完成终极图像分类任务
  • 告别默认界面!新版MyDockFinder深度定制指南:从“资源管理器”到完美仿Mac
  • Windows系统文件api-ms-win-core-path-l1-1-0.dll丢失找不到问题解决
  • 【鸿蒙 PC三方库构建系统】解决 OpenHarmony SHA 库编译问题:从动态链接错误到静态链接优化
  • 独立站全流程运营自动化实战:Web 端 MCP 协议配置与 AI Agent 非侵入式架构选型指南
  • 从模拟到数字:音频接口的演进与选型指南
  • 手把手教你复现Juniper SRX的CVE-2023-36845漏洞(附EXP与FOFA语法)
  • 深入解析fullPage.js:从模块化架构设计到企业级全屏滚动解决方案
  • 像素级还原与微交互:从设计稿到代码的毫米级精度实践
  • 系统调用与字符设备驱动:从内核态切换到硬件交互的全链路实战
  • Agent可观测性工程:给AI装上仪表盘
  • 从草图到实体:探索BimAnt在线3D CAD的BRep内核与几何约束求解
  • STM32F103C8T6 ADC调试实战:从EOC标志位卡死到稳定采样的解决之道
  • 如何用ncmdump轻松解锁网易云音乐NCM加密格式:终极免费转换指南
  • 基于Unity 3D + C#实现的宗祠文化主题重阳节虚拟展馆交互漫游系统
  • PKHeX自动化合法性插件深度解析:技术原理与实战应用指南
  • 数据可视化实战:从“能看“到“一眼看懂“的看板设计
  • Steam游戏自动破解终极指南:3步搞定SteamStub解包与Goldberg模拟器应用
  • Claude_Code_Desktop_教程桌面版的安装和使用(最新附带图文教程)
  • 告别转圈圈:UiPath依赖项恢复失败的四大实战破解指南
  • 全栈自研闭环落地:拆解小鹏汽车 2026 年的物理 AI 技术跃迁路径