systemd 系统服务
发行包自带的 start-daemon.sh / start-web.sh 是前台进程脚本:终端一关,进程就结束。要把 ElementsPanel 常驻运行,用 systemd 托管这两个进程。
本页以 Linux + systemd 为例,发行目录假设为 /opt/elementspanel(内含 web/ 与 daemon/)。其他系统(OpenRC、FreeBSD 等)思路相同,只是服务定义文件格式不同。
准备
# 发行包解压到 /opt/elementspanel,并安装运行依赖
cd /opt/elementspanel
./install.sh
install.sh 分别在 web/ 与 daemon/ 下执行 npm install --production。之后就可以用 systemd 启动 app.js。
节点服务
创建 /etc/systemd/system/elementspanel-daemon.service:
[Unit]
Description=ElementsPanel Daemon
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/elementspanel/daemon
ExecStart=/usr/bin/node --max-old-space-size=8192 --enable-source-maps app.js
Restart=on-failure
RestartSec=5
# 建议使用一个专用用户,而不是 root
User=elementspanel
Group=elementspanel
[Install]
WantedBy=multi-user.target
面板服务
创建 /etc/systemd/system/elementspanel-web.service:
[Unit]
Description=ElementsPanel Web
After=network.target
# 面板通常先于节点启动也无妨,这里只是表达依赖关系
Wants=elementspanel-daemon.service
[Service]
Type=simple
WorkingDirectory=/opt/elementspanel/web
ExecStart=/usr/bin/node --max-old-space-size=8192 --enable-source-maps app.js
Restart=on-failure
RestartSec=5
User=elementspanel
Group=elementspanel
[Install]
WantedBy=multi-user.target
|
Tip
|
--max-old-space-size=8192 是发行脚本自带的堆上限,可按机器内存调整。--enable-source-maps 让日志里的堆栈指向原始 TypeScript 行号。
|
启用与启动
sudo systemctl daemon-reload
# 先节点、后面板
sudo systemctl enable --now elementspanel-daemon.service
sudo systemctl enable --now elementspanel-web.service
# 查看状态与日志
systemctl status elementspanel-web.service
journalctl -u elementspanel-web.service -f
journalctl -u elementspanel-daemon.service -f
重启、停止、禁用:
sudo systemctl restart elementspanel-web.service
sudo systemctl stop elementspanel-web.service
sudo systemctl disable elementspanel-web.service
单独重启某一个进程可以热修复对应部分的问题:面板负责用户与网页,节点负责进程与容器,两者互不依赖对方的运行时状态。
更新流程
sudo systemctl stop elementspanel-web.service elementspanel-daemon.service
# 替换程序文件,保留 data/ 与 logs/
sudo systemctl start elementspanel-daemon.service elementspanel-web.service
权限与文件
以非 root 用户运行时,注意该用户要能:
-
读写
/opt/elementspanel下的data/、logs/; -
若要运行 Docker 实例,能访问 Docker(加入
docker组或配置 rootless Docker); -
有权限在实例目录中读写与执行服务端程序。
若实例以 Docker 运行,节点通常是唯一需要 Docker 权限的进程;面板不需要。