从源码构建
安装仓库指定的 Rust 工具链、Node.js 24、pnpm 11.0.1、C/C++ 编译工具和 CMake。仓库构建脚本会安装锁定的前端依赖,并生成内嵌 SPA 的发行二进制文件。开发占位页不能作为可部署网页界面。
sh scripts/build.sh
./build/memos --version
unset MEMOS_UNIX_SOCK MEMOS_DEMO
./build/memos --addr 127.0.0.1 --port 5230 --data ./memos-data由服务管理器托管
通过服务管理器运行时,使用专用低权限账号和绝对数据路径。原生进程默认使用 8081 端口,不要套用容器默认值。在 Unix 上,可用 --unix-sock 选择套接字而不是 TCP;已有套接字路径不会被静默覆盖。应使用面向目标平台构建的文件,并在该平台验证。本文不承诺公开二进制下载,也不代表未测试架构已经认证。
Linux 服务管理器示例
使用 systemd 的 Linux 主机上,先构建并验证原生二进制,安装到 /opt/memos/memos,并预先准备专用 memos 用户和组。将示例保存为 /etc/systemd/system/memos.service。StateDirectory 会按服务身份创建 /var/lib/memos,作为持久数据目录。此例使用本地 SQLite,且仅监听回环地址。其他操作系统应使用各自服务管理器定义。修改模板前请核对所安装版本的 systemd 服务行为。 启动前检查 /etc/secrets:原生服务会读取本机该目录。unit 明确选择 SQLite 和空 DSN,避免继承的网络数据库配置改变连接目标。
[Unit]
Description=Memos Rust server
After=network.target
[Service]
Type=simple
User=memos
Group=memos
StateDirectory=memos
WorkingDirectory=/var/lib/memos
UnsetEnvironment=MEMOS_UNIX_SOCK MEMOS_DEMO MEMOS_DRIVER MEMOS_DSN
ExecStart=/opt/memos/memos --addr 127.0.0.1 --port 5230 --data /var/lib/memos --driver sqlite --dsn "" --demo=false
Restart=on-failure
RestartSec=5
TimeoutStopSec=60
UMask=0077
[Install]
WantedBy=multi-user.target启动、检查与有计划地停止
启用前先检查 unit。期望服务进入 active 状态,/healthz 返回成功状态。打开本地地址完成设置,保存测试笔记,重启服务后确认仍是同一条笔记。启动失败应从 journal 检查可执行文件、服务身份、数据目录写权限或数据库迁移错误。维护时使用 systemctl stop,让进程收到 SIGTERM;正常流程不要用强制 kill 代替优雅退出。
sudo systemd-analyze verify /etc/systemd/system/memos.service
sudo systemctl daemon-reload
sudo systemctl enable --now memos.service
systemctl status memos.service --no-pager
journalctl -u memos.service -n 100 --no-pager
curl --fail http://127.0.0.1:5230/healthz
# During an approved maintenance window:
# sudo systemctl stop memos.service