yanchang
yanchang
发布于 2026-02-07 / 15 阅读
0
0

Memos 私有笔记避坑部署实录:Linux + Systemd 完美方案

碎碎念

最近在折腾碎片化笔记工具,Memos 是个非常完美的选择——轻量、支持 Markdown、像发微博一样记笔记。主要是现在的博客我希望更让其聚焦为整篇技术博客而不是碎片化的记录。

但在部署过程中,我经历了 v0.26.0 的前端地图组件报错v0.25.3 的中文长文截断 Bug,最终验证出 v0.25.2 才是目前最稳定、最适合生产环境的版本。

本文记录了在 Linux 服务器上,不依赖 Docker(Docker官方有完整教程),直接使用二进制文件 + Systemd 守护进程部署 Memos 的全过程。

环境准备

  • 服务器系统:Ubuntu / Debian / CentOS (Linux amd64)

  • 运行用户yanchang (建议使用普通用户运行,避免 Root 权限带来的安全风险)

  • 安装目录/opt/memos

  • 目标版本v0.25.2 (强烈推荐)


1. 下载与安装

为了方便管理和后续升级,我们将程序统一部署在 /opt/memos 目录下。

1.1 创建目录并下载

首先进入 /opt 目录,下载官方预编译好的二进制包。

Bash

# 进入 opt 目录
cd /opt

# 创建 memos 文件夹
sudo mkdir -p memos
cd memos

# 下载 v0.25.2 稳定版 (避坑关键:不要下 v0.25.3 或 v0.26.0)
sudo wget https://github.com/usememos/memos/releases/download/v0.25.2/memos_0.25.2_linux_amd64.tar.gz

# 解压到当前目录
sudo tar -xzvf memos_0.25.2_linux_amd64.tar.gz

# 赋予可执行权限
sudo chmod +x memos

1.2 创建数据目录 (重要)

Memos 需要一个目录来存放 SQLite 数据库文件。为了防止数据散落在默认路径(如 /var/lib),我们手动创建一个 data 目录。

Bash

sudo mkdir -p data

2. 权限配置

由于我是使用普通用户 yanchang 登录和管理的,必须将安装目录的所有权移交给该用户,否则后续程序无法写入数据库,会报 permission denied 或导致数据丢失。

Bash

# 将 /opt/memos 及其子目录的所有权移交给当前用户
# 请将 'yanchang' 替换为你自己的用户名
sudo chown -R yanchang:yanchang /opt/memos

# 检查权限是否生效
ls -ld /opt/memos
# 输出应类似:drwxr-xr-x ... yanchang yanchang ...

3. 配置 Systemd 守护进程

为了让 Memos 开机自启、崩溃自动重启,且能在后台稳定运行,我们需要创建一个 Systemd 服务文件。

创建服务文件:

Bash

sudo nano /etc/systemd/system/memos.service

写入以下内容:

Ini, TOML

[Unit]
Description=Memos Service
Documentation=https://github.com/usememos/memos
After=network.target

[Service]
# 指定运行用户 (与上一步授权的用户保持一致)
User=yanchang
Group=yanchang
Type=simple

# 工作目录
WorkingDirectory=/opt/memos

# 启动命令
# --mode prod: 生产模式
# --port 5230: 运行端口
# --data: 强制指定数据存储路径 (绝对路径)
ExecStart=/opt/memos/memos --mode prod --port 5230 --data /opt/memos/data

# 进程崩溃后自动重启
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

保存并退出(在 nano 中按 Ctrl+O -> Enter -> Ctrl+X)。


4. 启动服务

配置完成后,加载并启动服务。

Bash

# 1. 重载系统服务配置
sudo systemctl daemon-reload

# 2. 启动 Memos
sudo systemctl start memos

# 3. 设置开机自启
sudo systemctl enable memos

# 4. 查看运行状态
sudo systemctl status memos

如果看到绿色的 Active: active (running),说明部署成功!

打开防火墙

sudo ufw allow 5230

现在,打开浏览器访问 http://你的服务器IP:5230,注册管理员账号即可使用。


5. 配置nginx代理

最后一步,为了能用我的域名优雅地访问,我在 Nginx 里加了一段反代配置,通过 HTTPS 访问,安全性拉满。

sudo vim /etc/nginx/sites-available/memos.conf

内容为

server {
    # listen 5231 ssl http2;
    listen 5231 ssl;
    server_name www.yanchang.cc;

    ssl_certificate     /etc/nginx/ssl/www.yanchang.pem;
    ssl_certificate_key /etc/nginx/ssl/www.yanchang.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_buffer_size 4k;
    # 设置为 0 表示“不限制大小”,或者设置为具体数值如 10240m (10GB)
    client_max_body_size 0;
    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_buffering off;
        proxy_request_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        # 大文件超时设置
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
        proxy_read_timeout 300;
        send_timeout 300;
    }
}

启用配置

sudo ln -s /etc/nginx/sites-available/memos.conf /etc/nginx/sites-enabled/
sudo nginx -t   # 检查配置有没有写错
sudo systemctl reload nginx

放行端口


sudo ufw allow 5231

6. 避坑指南 (Troubleshooting)

在这次部署中,我测试了多个版本,踩了不少坑,总结如下:

❌ 坑一:v0.26.0 (Nightly/Dev)

  • 现象:这是目前的开发版,前端构建极不稳定。部署后浏览器控制台报错 NotFoundError: Failed to execute 'removeChild',导致页面白屏或地图组件崩溃。

  • 原因:前端 Leaflet 地图组件与 React 渲染逻辑冲突。

❌ 坑二:v0.25.3

  • 现象:这是之前的最新稳定版,但在发送较长的中文笔记(如一篇博客文章)时,后端会报错 grpc: error while marshaling: string field contains invalid UTF-8,导致笔记列表无法加载,甚至导致前端“笔记丢失”的假象。

  • 原因:后端 gRPC 在截取预览文本时,错误地按字节截断了中文字符,导致数据库存入了非法 UTF-8 字符。

✅ 推荐:v0.25.2

  • 结论:这是目前测试最完美、无上述问题的版本。如果你追求稳定,请死守 v0.25.2,直到官方发布 v0.27 或更高版本彻底修复上述问题。


6. 如何升级与维护

未来如果 Memos 发布了修复 Bug 的新版本(例如 v0.27.0),升级也非常简单,无需改动配置文件:

  1. 停止服务sudo systemctl stop memos

  2. 备份数据cp -r /opt/memos/data /opt/memos/data_backup

  3. 替换文件:下载新版二进制文件,覆盖 /opt/memos/memos

  4. 启动服务sudo systemctl start memos

这样部署,既保持了系统的整洁,又拥有了 Docker 般的灵活与稳定。


评论