梨窝维护指南
梨窝部署在玩客云(OneCloud, ARMv7)上。没有 CI/CD、没有 Docker、没有 K8s——就是本地编译 → scp → 停服替换 → 重启。
准备工作
建立连接
玩客云不在同一个局域网时,通过 WireGuard 隧道连过去:
sudo wg-quick up lily-oc
ssh suly@target_ip
维护完关隧道:
sudo wg-quick down lily-oc
编译策略
- 工作站 (7840HS) / X270 (i5-7200U):这两个是 x86_64 架构,要编 ARMv7 的二进制必须交叉编译,目标 triple 是
arm-unknown-linux-gnueabihf - 玩客云自己:上面装了原生的
rustc,可以直接cargo build,不需要交叉编译
实际还是用 X270 交叉编译,因为梨梨随手开发完就编译,效率高,玩客云那点 CPU 编 Rust 太慢了,而且内存也容易炸。
完整部署流程
1. 编译
CARGO_PROFILE_RELEASE_LTO=true \
CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 \
CARGO_PROFILE_RELEASE_PANIC=abort \
CARGO_PROFILE_RELEASE_STRIP=true \
cargo build --release --target arm-unknown-linux-gnueabihf
几个参数的作用:
LTO=true:链接时优化,减体积,可能还能提一点性能CODENEGEN_UNITS=1:整个 crate 作为一个编译单元,最大化跨模块内联PANIC=abort:panic 直接 abort,省掉 unwinding 表STRIP=true:编译完直接砍符号表
这四个全开,二进制 6.9MB。缺一个都更大。
2. 打包 & 传输
tar -cJf ../lily-nest-armv7-unknown-linux-gnueabihf.tar.xz \
-C target/arm-unknown-linux-gnueabihf/release lily-nest
scp ../lily-nest-armv7-unknown-linux-gnueabihf.tar.xz \
suly@target_ip:/data/lily-nest/
XZ 压缩完 2.4MB,局域网 scp 秒传。
3. 登服务器替换
ssh suly@target_ip
cd /data/lily-nest
# 先看看当前状态
sudo systemctl --no-pager status lily-nest &> ./cur.log
cat cur.log
# 停服 → 替换 → 起服 → 确认
sudo systemctl stop lily-nest
tar -Jxf lily-nest-armv7-unknown-linux-gnueabihf.tar.xz
sudo systemctl start lily-nest
sudo systemctl status lily-nest
4. 收尾
exit
sudo wg-quick down lily-oc
怎么看状态
systemctl status 一屏出所有要点:
● lily-nest.service - Lily Nest Rust Web Service
Active: active (running) since Sat 2026-06-20 22:46:54 CST
Memory: 1.9M (peak: 2.9M)
Tasks: 5
CPU: 1.910s
关键看三行:Active 确认在跑、Memory 看有没有泄漏、CPU 看看是不是异常高。
把输出倒到 cur.log 里,下次 ssh 进来可以先 cat cur.log 看一眼——上次维护之后有没有异常登录、有没有重启过,一目了然。
注意事项
目录权限
梨窝服务跑在 lily-nest 用户下。scp 传文件是用 suly 用户,所以:
suly和lily-nest要同组notes/、static/、templates/这些目录要设g+w
不然 service 写不了笔记文件。
为什么不搞 CI/CD
玩客云 ARMv7 本地编译太慢(容易搞崩玩客云嘛,老东西就不折腾它了),在X270/7840HS移动工作站上交叉编译更快。GitHub Actions 当然能搭,但:
梨梨不想搞那么复杂,本地也就几行命令的事情,为啥还要去弄那种。