systemd 进程托管
以受限服务账号运行 Bun 或 Node 产物,支持优雅退出与 journal 日志。
先完成发布构建、数据库准备及受保护环境文件。将 Bun >=1.3.14 或 Node.js 24+ 安装到所选单元的可执行文件路径。创建无交互登录权限的专用 ppanel-edge 系统用户和组。该账号能读取 /opt/ppanel-edge/apps/api 下的产物和 /etc/ppanel-edge/api.env,但不能修改这些文件。迁移环境文件仅管理员可读。
从 deploy/systemd/ppanel-edge-bun.service 与 deploy/systemd/ppanel-edge-node.service 中选择一个复制到 /etc/systemd/system/,按实际情况调整可执行文件和发布路径。两者的工作目录均为 /opt/ppanel-edge/apps/api,读取环境文件并强制生产模式,失败后重启,将结构化 stdout/stderr 写入 journal,启用文件系统、主目录、内核与权限限制,并提供独立临时目录。
Node 示例:
sudo systemd-analyze verify /etc/systemd/system/ppanel-edge-node.service
sudo systemctl daemon-reload
sudo systemctl enable --now ppanel-edge-node
sudo journalctl -u ppanel-edge-node -fBun 改用 ppanel-edge-bun,不要在同一监听端口同时启用两个服务。前方配置 TLS 代理,完成 /admin/install,再使用允许的公共主机名检查 /readyz。
停止信号为 SIGTERM,停止超时为 1020 秒,长于重任务预算。请求和任务结束后才关闭连接。除非已经调查进程卡住原因,否则不要使用 kill -9。故障排查检查 systemctl status、journal 日志、/healthz、/readyz 与任务积压。
更新前保留上一版产物并完成可恢复的备份,使用管理员迁移环境运行迁移,切换产物后重启所选服务。只有数据库仍兼容时才能回退应用。不要为简化更新而让服务账号写入源码目录或持有迁移凭据。