本文来自我的个人博客:从一条Docker命令开始:搭建私有笔记,把数据主动权拿回来 - 叹惋博客
不知道你有没有这样的经历:脑子里突然闪过一个不错的想法,打开手机备忘录记下来(嗯,我有段时间就很喜欢去手机备忘录),结果换到电脑上就找不到了(我只会用文件传输助手复制粘贴呵呵);或者写了半天的笔记存到某云笔记里,心里总隐约担心哪天服务关了、数据丢了。
今天这篇文章,带你用 Docker 在自己的服务器上部署一个叫 Memos 的开源笔记工具——数据完全掌握在自己手里,没有广告,没有追踪,永久免费。
Memos 在 GitHub 上已经获得了60k+ Star,Docker 镜像轻量到只有 20MB 左右。它到底好在哪?后面会慢慢说。
一、Memos 是什么?能用来干什么?
简单说,Memos 是一个开源的、可以自己部署的碎片化知识管理工具。它主打“打开就写、数据在自己手里”。
你可以用它来:
1.记录每天的待办事项和工作计划
2.随手写下突然冒出来的灵感和想法
3.写读书笔记、观影感受
4.替代微信的“文件传输助手”或手机自带备忘录
5.打造一个属于自己的轻量化“卡片笔记”系统
它的几个核心特点:
1.极轻量——单个 Go 二进制文件,Docker 镜像大约只有 20MB。运行时的内存占用大约 50 到 80MB。哪怕是你手里吃灰的树莓派都能跑得动。
2.数据自主——所有笔记都存在你服务器上的数据库里(默认 SQLite),零遥测、无追踪。
3.颜值高——UI 设计简约大气,交互体验流畅。
4.支持中文,也支持多用户。
5.部署极其简单——一条 Docker 命令就能搞定。
顺便说一句,Memos 默认使用 SQLite 数据库——就是一个单文件,所有的用户、笔记、附件信息都存里面。以后想迁移数据,直接复制这个文件就行,不需要折腾导入导出。
二、准备工作
开始之前,你需要有一台 Linux 服务器,我用的是雨云服务器(本文以 Ubuntu 24.04 为例)。
硬件方面,Memos 的要求非常低:1核1G即可
端口方面,Memos 默认使用 5230 端口。你需要确保服务器防火墙放行这个端口,或者后续用 Nginx 反代到其他端口也行。
一个小提醒:如果你的服务器在国内,从 Docker Hub 拉取镜像可能会比较慢。后面我会提到怎么解决这个问题。
三、安装 Docker
如果你的服务器上还没有安装 Docker,需要先装一下。Ubuntu 系统可以用官方一键安装脚本:
(有时候安装的比较慢,不要急哈哈,耐心等一等)
curl -fsSL https://get.docker.com | sh
安装完成后,把当前用户加入 docker 组,避免每次都要输 sudo:
sudo usermod -aG docker $USER
然后退出当前终端重新登录,或者执行下面的命令让权限立即生效:
newgrp docker
验证一下 Docker 是否安装成功:
docker --version
docker compose version
能看到版本号就说明装好了。

四、部署 Memos
方式一:直接用 docker run 命令(最简单,推荐新手)
这是最快的方式,一条命令搞定。
首先创建一个目录用来存放 Memos 的数据(这一步非常重要,如果不做数据挂载,容器删了笔记就没了):
mkdir -p ~/.memos
然后执行启动命令:
docker run -d \
--name memos \
--restart unless-stopped \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
neosmemo/memos:stable
这条命令的几个参数解释一下:
| 参数 | 含义 |
|---|---|
-d |
后台运行容器 |
--name memos |
给容器起个名字叫 memos,方便管理 |
--restart unless-stopped |
服务器重启后自动启动 Memos |
-p 5230:5230 |
把容器内的 5230 端口映射到服务器的 5230 端口 |
-v ~/.memos:/var/opt/memos |
把数据挂载到本地目录,数据持久化 |
如果你在国内拉取镜像很慢,可以用镜像加速地址替换 neosmemo/memos:stable:
docker run -d \
--name memos \
--restart unless-stopped \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
docker.xuanyuan.me/neosmemo/memos:stable
命令执行后,查看一下容器是否正常运行:
docker ps
应该能看到名为 memos 的容器状态是 Up。
![]()
也可以看启动日志确认:
docker logs memos
如果看到类似这样的输出,就说明启动成功了。
方式二:用 docker-compose(适合喜欢整洁配置的朋友)
如果你更习惯用配置文件来管理服务,可以写一个 docker-compose.yml。
创建项目目录和配置文件:
mkdir -p ~/memos
cd ~/memos
新建 docker-compose.yml 文件,写入以下内容:
version: "3.0"
services:
memos:
image: neosmemo/memos:stable
container_name: memos
restart: unless-stopped
volumes:
- ~/.memos:/var/opt/memos
ports:
- 5230:5230
然后启动:
docker compose up -d
效果和上面用 docker run 是一样的。以后要停止或重启,只需要在 ~/memos 目录下执行:
docker compose down # 停止
docker compose up -d # 重新启动
五、初始化 Memos
部署完成后,打开浏览器,访问:
http://你的服务器IP:5230
第一次打开会看到注册页面。第一次注册的账号会自动成为系统管理员。
填好用户名、密码,点击注册。
注意:管理员账号请一定记好密码,目前 Memos 没有提供自助重置密码的功能。
注册完成后,界面默认是英文的(我没想通为啥注册界面是中文,注册完进去又变回英文了)。切换成中文:
六、开始使用
写第一条笔记
在页面右侧的输入框里直接打字就行。Memos 支持 Markdown 语法,比如:
# 我的第一条笔记
今天成功部署了 Memos!以后所有零碎的想法都可以记在这里了。
- 支持 **加粗** 和 *斜体*
- 支持 `代码`
- 支持 #标签 自动识别
输入完成后,点击保存或按快捷键就能发布。
常用功能
标签:在笔记内容中以 # 开头输入,比如 #想法、#读书笔记,系统会自动识别成标签,以后可以按标签筛选。
日历视图:左侧有日历,可以按日期查看当天的所有备忘。
公开/私有:每条笔记都可以设置可见范围——公开、仅自己、或指定成员。
关闭用户注册(个人使用建议)
如果你只是想自己用,不想让别人注册账号,可以在设置里关掉注册功能:
这样其他人就打不开注册页面了。
七、进阶配置:Nginx 反向代理 + HTTPS 证书(可选)
通过 IP+端口访问始终不太方便,而且 HTTP 明文传输在公网环境下存在安全隐患。配一个域名和 SSL 证书体验会好很多。
7.1 安装 Nginx
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
7.2 编写站点配置
假设你的域名是 memos.example.com,在 /etc/nginx/sites-available/memos 创建配置文件:
sudo nano /etc/nginx/sites-available/memos
把下面这段内容贴进去。记得把memos.example.com换成你自己的域名
server {
listen 80;
server_name memos.example.com;
location / {
proxy_pass http://127.0.0.1:5230;
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
粘贴完后后按Ctrl+X,按Y,再按Enter退出。
启用配置:
sudo ln -s /etc/nginx/sites-available/memos /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
7.3 申请 SSL 证书(Certbot)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d memos.example.com
按照提示输入邮箱并同意协议,Certbot 会自动申请证书并修改 Nginx 配置。证书有效期 90 天,Certbot 会通过 systemd timer 自动续期。
八、数据备份与恢复
8.1 备份策略
Memos 的所有数据都在 ~/.memos 目录下。
sudo docker stop memos
mkdir -p ~/backups
sudo tar -czf ~/backups/memos_$(date +%Y%m%d_%H%M%S).tar.gz -C ~ .memos
sudo docker start memos
# 验证备份文件存在
ls -lh ~/backups/

8.2 恢复数据
docker stop memos
cp ~/backups/memos_20260101.db ~/.memos/memos_prod.db
docker start memos
注意:恢复时的 Memos 版本最好与备份时的版本一致,否则可能存在数据库 schema 迁移问题。建议升级前先做备份,升级后如果出问题还能回滚。
九、使用单点登录
第一步:在 GitHub 上创建 OAuth 应用
1.进入设置页面:登录 GitHub 后,点击右上角的头像,在菜单中进入 Settings (设置)。
2.找到开发者设置:在 Settings 页面的左侧边栏最下方,找到并点击 Developer settings。
3.创建新 OAuth App:在 Developer settings 页面中,选择左侧的 OAuth Apps,然后点击页面右侧的 New OAuth App 按钮。
4.填写应用信息:在注册新应用的页面,你需要填写以下信息:
<1>Application name:填写一个你容易识别的名字
<2>Homepage URL:填写你的 Memos 站点首页地址,如 https://memos.your-domain.com。
<3>Authorization callback URL:这是最关键的一步,必须精确填写。
格式为 你的Memos站点地址/auth/callback。
例如,如果你的 Memos 地址是 https://memos.example.com
那么这里就应该 写 https://memos.example.com/auth/callback。
5.注册应用:填写完成后,点击 Register application 按钮。
6.获取凭证:应用创建成功后,页面会跳转到该应用的管理界面。你会看到 Client ID 和 Client Secret 两个关键信息。
Client ID是公开的,可以直接复制使用。Client Secret是机密信息,请务必妥善保管,不要泄露给任何人。你需要点击 Generate a new client secret 按钮来生成它,并立即复制下来(离开页面后将无法再次查看)。
第二步:在 Memos 中配置 SSO 登录
1.进入系统设置:使用你的管理员账号登录 Memos,点击左下角 进入设置页面。
2.找到 SSO 设置:在设置页面中,找到并点击 单点登录。
3.添加身份提供商:点击 创建 或 添加 按钮,选择提供商模板为 GitHub。
4.填写配置信息:根据你从 GitHub 获取的信息,填写以下字段:
clientId:粘贴你在上一步获取的 Client ID。clientSecret:粘贴你在上一步获取的 Client Secret。- 确保 Scopes 字段至少包含
user:email,这是为了获取你的 GitHub 邮箱信息。
5.保存配置:填写完毕后,点击保存。
验证与测试
1.退出登录:保存配置后,先退出你的管理员账号。
2.检查登录页面:回到 Memos 的登录页面,你应该能看到一个新增的 “使用 GitHub 登录” 或类似的按钮。
3.测试登录:点击该按钮,它应该会跳转到 GitHub 的授权页面。授权后,如果一切顺利,你就会被重定向回 Memos 并成功登录。
十、容器运维常见操作
# 查看容器状态
docker ps -a --filter "name=memos"
# 查看实时日志(按 Ctrl+C 退出)
docker logs -f memos
# 进入容器内部(调试用)
docker exec -it memos /bin/sh
# 更新镜像版本
docker pull neosmemo/memos:stable
docker stop memos
docker rm memos
docker run -d --name memos --restart unless-stopped -p 5230:5230 -v ~/.memos:/var/opt/memos neosmemo/memos:stable
# 清理无用镜像
docker image prune -f
升级时有个细节要注意:如果跨大版本升级,Memos 可能会自动执行数据库迁移,这个过程取决于数据量大小,一般几秒到几十秒。期间容器可能短暂不可用,属于正常现象,不要强制重启。升级前强烈建议先备份数据。
关于端口改动的说明:如果你的服务器 5230 端口已被占用,修改宿主机映射端口即可,例如改为 -p 5231:5230。但要注意,改了端口之后,所有外部访问都需要使用新端口,Nginx 代理配置中的 proxy_pass http://127.0.0.1:5230 也要同步修改。
十一、Memos 的丰富生态
Memos 虽然本身是个轻量级工具,但社区生态相当活跃:
Web Clipper:官方提供了 Chrome 和 Firefox 的浏览器剪藏插件,可以一键保存网页、选中的文本和图片到你的 Memos 实例
Moe Memos:第三方 iOS 和 Android 客户端,支持 Memos 0.27.0 到 0.29.1 版本,体验接近原生 App
微信小程序:社区有开发者做了微信小程序版本
Telegram Bot:可以通过 Telegram 机器人发送消息到 Memos
API 支持:Memos 提供了完整的 REST 和 gRPC API,方便二次开发和集成
十二、写在最后
从拉取镜像到完成初始化,快的朋友可能五分钟就走完了。这也是我当初选择 Memos 的原因——它足够简单,却又足够好用。
给自己搭一个专属的笔记系统,听起来好像挺有技术门槛,其实几条命令就能搞定。现在动手试一下,说不定明天开始,你的碎片想法就有了一个安稳的「家」。
部署过程中遇到任何问题(镜像拉取超时、端口被占、数据库报错等等),欢迎在评论区留言,我看到就会回复。





