把笔记搬回自己服务器——Memos 部署手记
一、Memos 是什么
Memos 是一个开源、自托管的轻量笔记服务。可以理解成私人版 Twitter——没有算法、没有广告、数据都在你自己的服务器上。支持 Markdown、标签、图片上传、RSS、OpenAPI、PWA。最新稳定版 v0.30.0(2026 年 7 月发布)。$TRAE_REF
你需要准备:
- 一台 Linux 服务器(本文以 Ubuntu 22.04/24.04 为例)
- 一个域名(可选但强烈建议,否则只能 IP:端口访问)
- Docker 环境(方法一、二需要;方法三不需要)
二、三种部署方式速览
| 方式 | 场景 | 难度 | 一句话 |
|---|---|---|---|
| Docker | 快速上手 | 低 | 一条命令跑起来 |
| Docker Compose | 生产环境 | 中 | 配置文件管理,升级方便 |
| 二进制 | 不想装 Docker | 中 | 直接跑宿主机上 |
选一个往下看就行,不用全读。
三、方法一:Docker 一条命令
这是最快的方式。$TRAE_REF

# 1. 创建数据目录
mkdir -p ~/.memos
# 2. 启动容器
docker run -d \
--name memos \
--restart unless-stopped \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
neosmemo/memos:stable
# 3. 浏览器访问 http://你的服务器IP:5230
参数简释:-d 后台运行,--restart unless-stopped 开机自启+异常重启,-p 5230:5230 端口映射,-v ~/.memos:/var/opt/memos 数据持久化到宿主机。
常用管理:
docker logs -f memos # 看日志
docker stop memos # 停止
docker start memos # 启动
docker restart memos # 重启
升级:
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
如果之前设置了
MEMOS_INSTANCE_URL等环境变量,记得一并带上,否则升级后会丢失配置。
四、方法二:Docker Compose
比裸 docker run 更适合长期使用:配置可 Git 管理、升级方便、扩展容易。$TRAE_REF
mkdir -p ~/memos && cd ~/memos
创建 docker-compose.yml:
services:
memos:
image: neosmemo/memos:stable
container_name: memos
restart: unless-stopped
ports:
- "5230:5230"
volumes:
- ./data:/var/opt/memos
environment:
MEMOS_PORT: 5230
MEMOS_DRIVER: sqlite
# 有域名时取消注释,启用公开模式(RSS、匿名访问)
# MEMOS_INSTANCE_URL: https://memos.yourdomain.com
MEMOS_INSTANCE_URL不设 = 私有模式(需登录才能访问)。设为公网域名后启用公开模式。$TRAE_REF
docker compose up -d # 启动
升级三步:
docker compose pull
docker compose down
docker compose up -d
数据在 ./data 目录,不删它就没事。
五、方法三:二进制文件
不装 Docker 也能跑。$TRAE_REF
下载
去 GitHub Releases,以 Linux amd64 为例:
cd /tmp
wget https://github.com/usememos/memos/releases/download/v0.30.0/memos_v0.30.0_linux_amd64.tar.gz
tar -xzf memos_v0.30.0_linux_amd64.tar.gz
部署
sudo mv memos /usr/local/bin/
sudo mkdir -p /var/lib/memos
/usr/local/bin/memos --port 5230 --data /var/lib/memos # 前台测试
配置 systemd(开机自启)
创建 /etc/systemd/system/memos.service:
[Unit]
Description=Memos
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/memos --port 5230 --data /var/lib/memos
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable memos --now
sudo systemctl status memos
二进制方式需自己管理反向代理、HTTPS、升级和备份。
六、Nginx 反向代理 + HTTPS
不管你用哪种方式部署,生产环境建议加一层 Nginx 并配 SSL。

6.1 安装+基础配置
sudo apt update && sudo apt install nginx -y
创建 /etc/nginx/sites-available/memos:
server {
listen 80;
server_name memos.yourdomain.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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
sudo ln -s /etc/nginx/sites-available/memos /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
6.2 SSL 证书(Let's Encrypt)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d memos.yourdomain.com
Certbot 会自动修改 Nginx 配置启用 HTTPS,证书到期前自动续期。确认一下:
sudo systemctl status certbot.timer
此时你的 Nginx 配置已变成带 80→443 跳转的完整版本,无需手动改。
6.3 回填 MEMOS_INSTANCE_URL
配好域名和 HTTPS 后,根据你的部署方式设置:
Docker: 删除旧容器,重新 run 时加上环境变量:
docker stop memos && docker rm memos
docker run -d \
--name memos \
--restart unless-stopped \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
-e MEMOS_INSTANCE_URL=https://memos.yourdomain.com \
neosmemo/memos:stable
Docker Compose: 取消 docker-compose.yml 中的注释:
environment:
MEMOS_INSTANCE_URL: https://memos.yourdomain.com
然后 docker compose down && docker compose up -d。
二进制: 在 systemd 配置的 ExecStart 中追加参数:
ExecStart=/usr/local/bin/memos --port 5230 --data /var/lib/memos --instance-url https://memos.yourdomain.com
然后 sudo systemctl daemon-reload && sudo systemctl restart memos。
七、初始化
首次访问会看到注册页。第一个注册的用户自动成为管理员。
登录后进 Settings 建议调整:
- 时区设为
Asia/Shanghai - 有域名的话,在系统设置中填好站点名称和公开模式
备份
SQLite 数据库就在数据目录里,备份就是复制:
# 先创建备份目录(首次)
mkdir -p ~/backups
# Docker 方式
cp -r ~/.memos ~/backups/memos-$(date +%Y%m%d)
# Docker Compose 方式
cp -r ~/memos/data ~/backups/memos-$(date +%Y%m%d)
# 二进制方式
cp -r /var/lib/memos ~/backups/memos-$(date +%Y%m%d)
配合 cron 定时跑就行。
八、常见问题
端口被占用? 改 -p 参数,比如 -p 8080:5230,Nginx 的 proxy_pass 也跟着改。
目录权限报错? 镜像内以非 root 运行(UID 10001)。$TRAE_REF 加环境变量覆盖:-e MEMOS_UID=1000 -e MEMOS_GID=1000。
想用 MySQL / PostgreSQL? SQLite 单机够用。真要换,加环境变量:$TRAE_REF
environment:
MEMOS_DRIVER: postgres
MEMOS_DSN: "postgres://user:password@host:5432/memos?sslmode=disable"
MySQL 的 DSN 格式:user:password@tcp(host:3306)/memos。
手机上能用吗? Memos 是 PWA,浏览器打开后"添加到主屏幕"即可像 App 一样使用。
支持 Markdown? 完整支持,含任务列表和 LaTeX 公式。
参考来源:Memos 官方文档 · GitHub Releases · Docker Hub