用 Docker 部署一个自己的 Memos 碎片笔记小站

1882 字
9 分钟
用 Docker 部署一个自己的 Memos 碎片笔记小站

这篇是写给未来自己的 “Memos 部署速记”:用 Docker 跑起一个可以公网访问、数据可持久化的 Memos 小站,避免每次都从 README 和博客里翻命令。

一、Memos 是什么,为啥要用 Docker 部署?#

简单一句话:Memos 是一个轻量的碎片笔记 / 流水账 / 生活流工具,适合随手记灵感、待办、生活片段,比传统博客轻,自己部署又比托管服务更自由。

选择 Docker 部署的原因和前面 MySQL / Redis 篇类似:

  • 安装简单:不需要关心系统依赖,拉个镜像就能跑。
  • 升级方便:换版本就是换镜像标签。
  • 易于迁移和备份:配置 + 数据卷 + docker-compose,换机器也不慌。

本文会从零开始做到:

  1. 拉取官方 Memos 镜像并用 docker run 启动一个实例
  2. 把数据目录挂到宿主机,实现持久化
  3. docker-compose 管理,方便一键启动 / 停止
  4. 简单说明如何配合反向代理(以 Nginx 为例)暴露到公网

二、准备:确认 Docker 环境#

默认你已经按照前文(MySQL 篇)装好 Docker / Docker Desktop,这里只简单校验一下:

Terminal window
docker version
docker info

能正常输出版本信息,就可以继续。

三、拉取 Memos 镜像#

Memos 官方镜像名一般是类似 neosmemo/memosusememos/memos,这里统一写成:

Terminal window
docker pull neosmemo/memos:latest

拉完之后确认一下:

Terminal window
docker images

能看到一行 neosmemo/memos 就说明镜像到手。

如果你未来需要锁定版本,可以把 latest 换成对应版本号,比如 neosmemo/memos:0.22.0,避免升级带来行为变化。

四、第一次运行 Memos 容器(最小可用)#

先用最简单的方式把 Memos 跑起来,感受一下:

Terminal window
docker run --name my-memos \
-p 5230:5230 \
-d neosmemo/memos:latest

参数说明:

  • --name my-memos:容器名字,后续管理方便。
  • -p 5230:5230:把宿主机 5230 端口映射到容器的 5230 端口(Memos 默认监听 5230)。
  • -d:后台运行。

启动后查看状态:

Terminal window
docker ps

浏览器打开:

  • http://127.0.0.1:5230

按页面提示创建管理员账号,即可开始使用。

这个最小版本的问题很明显:没有数据卷,容器一删数据就没了。所以下一步要做的就是持久化。

五、挂载数据卷:让 Memos 数据不丢#

Memos 默认会把数据存放在容器内某个目录(常见是 /var/opt/memos 或类似路径,官方文档会写清楚),我们的目标是把这个目录挂到宿主机。

下面假设容器内数据目录为 /var/opt/memos,后续如果官方变更,你只需要对照 README 调整一下路径即可。

1. 创建宿主机数据目录#

Linux / macOS:

Terminal window
mkdir -p ~/docker-data/memos

Windows(PowerShell):

Terminal window
mkdir C:\docker-data\memos

2. 用数据卷重新运行 Memos#

先停掉并移除旧容器:

Terminal window
docker stop my-memos
docker rm my-memos

再用挂载卷的方式重建:

Terminal window
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 同级目录下运行:

Terminal window
docker compose up -d

稍等几秒,浏览器访问:

http://服务器IP或域名:5230

查看容器状态:

Terminal window
docker compose ps

停止服务:

Terminal window
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:5230ss -tulnp)。
  • 停掉那个服务,或者给 Memos 换一个宿主机端口,比如:
ports:
- "8080:5230"

访问时改成 http://IP:8080 即可。

2. 数据目录权限问题(Linux)#

如果把数据卷挂到权限严格的目录(特别是 root 拥有的目录),可能导致 Memos 容器无法写入,表现为:

  • 容器启动秒退
  • 日志里出现权限相关错误

比较稳妥的做法:

  • 把数据卷挂到 /home/youruser/docker-data/memos 这类普通用户目录。
  • 或把目录所有者改成你运行 Docker 的用户:
Terminal window
sudo chown -R youruser:youruser /home/youruser/docker-data/memos

3. 升级与回滚#

建议的习惯:

  • docker-compose.yml 里固定一个版本号,而不是写 latest
  • 升级时:
    1. docker compose pull 拉取新镜像;
    2. docker compose up -d 滚动重启;
    3. 观察一段时间,确认功能正常。
  • 如果发现问题,可以改回旧版本号再 up -d,数据仍然在卷里。

4. 备份#

即便已经做了卷挂载,备份仍然是必要的

  • 一种简单方式是定期打包 ./memos-data 目录(压缩后丢到对象存储或另一台机器)。
  • 如果部署在云服务器,可以配合云盘快照进一步多一层保险。

九、简单回顾:Memos Docker 部署流程#

最后再把本文的核心步骤压缩成一小段 checklist,方便以后快速复习:

  1. 确保 Docker 环境正常。
  2. 拉镜像:docker pull neosmemo/memos:版本号
  3. docker run 跑起一个最小实例,确认页面能访问。
  4. 创建数据目录(如 ~/docker-data/memos),挂载到容器的数据目录(如 /var/opt/memos)实现持久化。
  5. 写一个 docker-compose.yml,把镜像、端口、卷、环境变量、重启策略都写进去,以后用 docker compose up -d 一键启动。
  6. (可选)用 Nginx / 其他反向代理接上域名和 HTTPS,让 Memos 变成一个对外可访问的小站。

有了这篇速记,以后再想给自己或者朋友搭一个 Memos,只需要改一改端口、目录和域名,就能很快复制出一套新的环境。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
用 Docker 部署一个自己的 Memos 碎片笔记小站
https://firefly.cuteleaf.cn/posts/docker-memos-deploy/
作者
Airio_
发布于
2026-02-26
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Airio_
Hello, I'm Airio_.
公告
欢迎来到OfoCa Space。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
6
分类
1
标签
16
总字数
18,733
运行时长
0
最后活动
0 天前

目录