把 585.ink 从单机 Docker 挪到 systemd 托管
11 月 9 日这台 2 核 4G 的轻量云主机上,站点仍跑在 docker run 手动起的容器里,重启后要人工 docker start,日志靠 docker logs -f 挂着看。这次把 Hugo 生成的静态目录交给 Caddy,用 systemd 单元直管 caddy 进程,容器只保留 PostgreSQL。做法:写 /etc/systemd/system/caddy.service,ExecStart 指向 /usr/local/bin/caddy run --config /etc/caddy/Caddyfile,Restart=on-failure,RestartSec=5,加 ProtectSystem=strict 与 ReadWritePaths=/var/log/caddy;Caddyfile 里 root * /srv/585,file_server,encode gzip,日志走 /var/log/caddy/access.log。坑有两个:一是 caddy 用户没有 /srv/585 读权限,403 排查了二十分钟,chown -R caddy:caddy 解决;二是 systemd 下 PATH 不含 /usr/local/bin,ExecStart 必须写绝对路径。结论:重启后 12 秒站点恢复,内存占用从 380MB 降到 96MB,日志按天切分不再撑爆磁盘。
11 月 9 日这台 2 核 4G 的轻量云主机上,站点仍跑在 docker run 手动起的容器里,重启后要人工 docker start,日志靠 docker logs -f 挂着看。这次把 Hugo 生成的静态目录交给 Caddy,用 systemd 单元直管 caddy 进程,容器只保留 PostgreSQL。做法:写 /etc/systemd/system/caddy.service,ExecStart 指向 /usr/local/bin/caddy run --config /etc/caddy/Caddyfile,Restart=on-failure,RestartSec=5,加 ProtectSystem=strict 与 ReadWritePaths=/var/log/caddy;Caddyfile 里 root * /srv/585,file_server,encode gzip,日志走 /var/log/caddy/access.log。坑有两个:一是 caddy 用户没有 /srv/585 读权限,403 排查了二十分钟,chown -R caddy:caddy 解决;二是 systemd 下 PATH 不含 /usr/local/bin,ExecStart 必须写绝对路径。结论:重启后 12 秒站点恢复,内存占用从 380MB 降到 96MB,日志按天切分不再撑爆磁盘。