micro服务器治理:内存分配优化和docker rootless改造

dns主域名迁移

ip解析的主域名从ghost改为micro的本机和远端梳理实施。

域名归属结论
micro.atibm.commicro 机(与远端自报 IP 一致)micro 侧不受影响
ghost.atibm.comARM 机博客用,micro 不再 serve
5 个在用子域名micro 机证书 SAN 全覆盖
  • 浏览器只认 SAN,cert-name 只是标签,不给 micro.atibm.com 加签。
  • 防误操作:SSH 与 rclone 只用全主机名;本地 VPS/ghost 目录实为 micro 镜像;nixos 仓库两处错误改名注已更正。

docker实例迁移

ghost博客从micro迁到arm,腾一点内存。

  • 远端 ghost 站点块已迁走改名,micro 只剩现行站点。
  • 本地镜像残留的活跃 ghost.conf 与远端迁移版 md5 相同,已改名对齐,防止下次同步复活死站点。
  • 博客域名已指 ARM,micro 不再 serve ghost 域名。

docker内存优化

每个docker实例调整内存上限。

实例常态均值峰值占比动作
trilium153M177M / 384M(46%)256M 提到 384M
edge3M无上限(整机额度)补 64M
git / mariadb90M / 16M27% / 8%留天花板给未来峰值,不动
mindwtr / nginx / webdav46M / 15M / 3M40% / 25% / 4%健康,不动
  • 方法:单快照不定常态,后台 6 轮乘 60 秒采样取均值与峰值及波动,再结合画像(频率与峰值与重要性)定配额;trilium 波动 51M 一路下行,证实加量必要。
  • swap 系独立分区 8G 只用 0.4G,不缩(缩分区是高危手术,收益只是几 G 磁盘);swappiness 90 保持。
  • 验证:up 后 trilium 曾 502,直连后端 302 正常,reload 清掉旧 keepalive 恢复;教训是后端重建后必 reload 一次。

docker权限优化

改造为 rootful和rootless分离命令入口,参照本机 docker.nix 双栈设计改写远端 .bashrc。

d / dc -- rootless 优先 --> [默认栈]
| 未装 rootless 时回落 rootful
rd / rootd / rdc ----------> [rootful /run/docker.sock]
reload --> docker exec nginx nginx -s reload(跟随默认栈)
  • d/dc 走默认栈(rootless 优先、未装时回落 rootful),rd 系列显式走 rootful;改前备份、改后 bash -n 校验。
  • 踩坑一:heredoc 定界符未加引号导致变量提前展开,.bashrc 与 hook 脚本各坏一次,重写修复。
  • 踩坑二:rootless 安装脚本把 CLI 当前 context 切到 rootless,DOCKER_HOST 回落后仍连不上 daemon;修复为 docker context use default,之后靠 DOCKER_HOST 环境变量切栈。
  • rootless 总闸:user 命名空间数为 0,写 sysctl 持久配置并即时生效;loginctl 开 linger 保活用户服务。

docker实例降权

实例 rootless改造,便于后续sync同步管理,本次以 nginx 先行验证。

公网 80/443
--> [edge: socat 转发](rootful,无状态)
--> [nginx-unprivileged:8080/8443](101 身份)
--> 同栈 backend:mindwtr / trilium / git / webdav
stream 直通:62222 --> git 2222,63306 --> mariadb 3306
  • 镜像换 nginx-unprivileged,原生 101 身份跑,监听改 8080/8443;git 与 mariadb 的 stream 转发是高端口,rootless 可直接发布,原样保留。
  • 证书链:certbot deploy-hook 把证书复制到 nginx 专递目录并归 101,nginx 只挂只读副本,与 letsencrypt 原目录解耦。
  • 宿主零改动(内核旧、rootless 绑不了特权端口)。
  • 同步适配:filter 排除派生件 certs 与 cache,101 落盘文件按 permission 位同步,600 沿用旧 SKIP 逻辑跳过记账。
  • 待续:用户态 systemd 未就绪,首次需手动起 rootless daemon,再按 backend 顺序迁,nginx 最后换栈。
rootless 改造流程:
[现状 rootful] --> [开 userns + linger] --> [装 rootless daemon]
--> [逐个迁 backend] --> [nginx 留守 + edge 转发]