用 Docker 部署一个自己的 Memos 碎片笔记小站
这篇是写给未来自己的 “Memos 部署速记”:用 Docker 跑起一个可以公网访问、数据可持久化的 Memos 小站,避免每次都从 README 和博客里翻命令。
一、Memos 是什么,为啥要用 Docker 部署?
简单一句话:Memos 是一个轻量的碎片笔记 / 流水账 / 生活流工具,适合随手记灵感、待办、生活片段,比传统博客轻,自己部署又比托管服务更自由。
选择 Docker 部署的原因和前面 MySQL / Redis 篇类似:
- 安装简单:不需要关心系统依赖,拉个镜像就能跑。
- 升级方便:换版本就是换镜像标签。
- 易于迁移和备份:配置 + 数据卷 + docker-compose,换机器也不慌。
本文会从零开始做到:
- 拉取官方 Memos 镜像并用
docker run启动一个实例 - 把数据目录挂到宿主机,实现持久化
- 用
docker-compose管理,方便一键启动 / 停止 - 简单说明如何配合反向代理(以 Nginx 为例)暴露到公网
二、准备:确认 Docker 环境
默认你已经按照前文(MySQL 篇)装好 Docker / Docker Desktop,这里只简单校验一下:
docker versiondocker info能正常输出版本信息,就可以继续。
三、拉取 Memos 镜像
Memos 官方镜像名一般是类似 neosmemo/memos 或 usememos/memos,这里统一写成:
docker pull neosmemo/memos:latest拉完之后确认一下:
docker images能看到一行 neosmemo/memos 就说明镜像到手。
如果你未来需要锁定版本,可以把
latest换成对应版本号,比如neosmemo/memos:0.22.0,避免升级带来行为变化。
四、第一次运行 Memos 容器(最小可用)
先用最简单的方式把 Memos 跑起来,感受一下:
docker run --name my-memos \ -p 5230:5230 \ -d neosmemo/memos:latest参数说明:
--name my-memos:容器名字,后续管理方便。-p 5230:5230:把宿主机 5230 端口映射到容器的 5230 端口(Memos 默认监听 5230)。-d:后台运行。
启动后查看状态:
docker ps浏览器打开:
http://127.0.0.1:5230
按页面提示创建管理员账号,即可开始使用。
这个最小版本的问题很明显:没有数据卷,容器一删数据就没了。所以下一步要做的就是持久化。
五、挂载数据卷:让 Memos 数据不丢
Memos 默认会把数据存放在容器内某个目录(常见是 /var/opt/memos 或类似路径,官方文档会写清楚),我们的目标是把这个目录挂到宿主机。
下面假设容器内数据目录为 /var/opt/memos,后续如果官方变更,你只需要对照 README 调整一下路径即可。
1. 创建宿主机数据目录
Linux / macOS:
mkdir -p ~/docker-data/memosWindows(PowerShell):
mkdir C:\docker-data\memos2. 用数据卷重新运行 Memos
先停掉并移除旧容器:
docker stop my-memosdocker rm my-memos再用挂载卷的方式重建:
docker run --name my-memos \ -p 5230:5230 \ -v ~/docker-data/memos:/var/opt/memos \ -d neosmemo/memos:latest关键点:
-v ~/docker-data/memos:/var/opt/memos:把容器的数据目录映射到宿主机,实现持久化。
此后:
- 你可以随时删掉
my-memos容器; - 再用同一卷启动一个新容器时,之前的账号、笔记、配置都会还在。
六、使用 docker-compose 管理 Memos
当你不想记一长串 docker run 命令时,就是 docker-compose 登场的时候了。
我们把整个服务描述成一个 docker-compose.yml 文件。
在一个合适的目录(比如你的项目根目录或 deploy/memos)创建:
version: "3.9"
services: memos: image: neosmemo/memos:latest container_name: my-memos restart: always ports: - "5230:5230" volumes: - ./memos-data:/var/opt/memos environment: # 按需增加,比如: # MEMOS_MODE: prod # MEMOS_PORT: 5230 # TZ: Asia/Shanghai TZ: Asia/Shanghai说明一下这里做的事情:
- 把镜像名、端口映射、数据卷等信息都写进了 YAML,可读性比命令行强。
- 用
./memos-data做数据卷,方便和仓库一起管理(可以.gitignore掉)。 - 加了
restart: always,服务器重启后服务会自动拉起。 TZ设置时区,方便时间显示符合习惯。
在 docker-compose.yml 同级目录下运行:
docker compose up -d稍等几秒,浏览器访问:
http://服务器IP或域名:5230查看容器状态:
docker compose ps停止服务:
docker compose down默认 down 不会删除 ./memos-data 里的数据(除非你加 -v)。
七、配合反向代理:用域名访问 Memos
很多时候,我们不希望通过 :5230 这样的端口形式访问,而是想用:
https://memos.your-domain.com比较常见的方案是:
- 让 Memos 容器只监听内网端口
- 用 Nginx / Caddy / Traefik 等反向代理接入公网和 HTTPS
下面以最常见的 “宿主机 Nginx + Docker 内网 Memos” 为例,说明一个大致配置思路。
1. 调整 Memos 暴露端口
在 docker-compose.yml 里,我们仍保持:
ports: - "5230:5230"如果你只想在内网使用,也可以把端口映射改成交给代理使用的内部端口,比如:
ports: - "127.0.0.1:5230:5230"这样 Memos 只在本机 5230 可访问,由 Nginx 转发。
2. Nginx 示例配置(片段)
在 Nginx 的 server 块里,大致是这样:
server { listen 80; server_name memos.your-domain.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; }}实际使用时你还会叠加:
- HTTPS 证书(Let’s Encrypt / ACME),把
listen 80换成443 ssl等。 - 简单的访问限制,比如只让自己能访问等。
配置完 Nginx 并重启后,就可以用 https://memos.your-domain.com 打开你的 Memos 站点了。
八、常见小坑和习惯动作
1. 端口占用
如果 5230 已经被其他服务占用,启动 Memos 时会看到类似:
Bind for 0.0.0.0:5230 failed: port is already allocated
解决方案:
- 查是谁占用了 5230(Windows 用资源监视器,Linux 用
lsof -i:5230或ss -tulnp)。 - 停掉那个服务,或者给 Memos 换一个宿主机端口,比如:
ports: - "8080:5230"访问时改成 http://IP:8080 即可。
2. 数据目录权限问题(Linux)
如果把数据卷挂到权限严格的目录(特别是 root 拥有的目录),可能导致 Memos 容器无法写入,表现为:
- 容器启动秒退
- 日志里出现权限相关错误
比较稳妥的做法:
- 把数据卷挂到
/home/youruser/docker-data/memos这类普通用户目录。 - 或把目录所有者改成你运行 Docker 的用户:
sudo chown -R youruser:youruser /home/youruser/docker-data/memos3. 升级与回滚
建议的习惯:
- 在
docker-compose.yml里固定一个版本号,而不是写latest。 - 升级时:
docker compose pull拉取新镜像;docker compose up -d滚动重启;- 观察一段时间,确认功能正常。
- 如果发现问题,可以改回旧版本号再
up -d,数据仍然在卷里。
4. 备份
即便已经做了卷挂载,备份仍然是必要的:
- 一种简单方式是定期打包
./memos-data目录(压缩后丢到对象存储或另一台机器)。 - 如果部署在云服务器,可以配合云盘快照进一步多一层保险。
九、简单回顾:Memos Docker 部署流程
最后再把本文的核心步骤压缩成一小段 checklist,方便以后快速复习:
- 确保 Docker 环境正常。
- 拉镜像:
docker pull neosmemo/memos:版本号。 - 用
docker run跑起一个最小实例,确认页面能访问。 - 创建数据目录(如
~/docker-data/memos),挂载到容器的数据目录(如/var/opt/memos)实现持久化。 - 写一个
docker-compose.yml,把镜像、端口、卷、环境变量、重启策略都写进去,以后用docker compose up -d一键启动。 - (可选)用 Nginx / 其他反向代理接上域名和 HTTPS,让 Memos 变成一个对外可访问的小站。
有了这篇速记,以后再想给自己或者朋友搭一个 Memos,只需要改一改端口、目录和域名,就能很快复制出一套新的环境。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!