diff --git a/README.md b/README.md index 41fc0ab..45f3f1b 100644 --- a/README.md +++ b/README.md @@ -103,4 +103,27 @@ python3 /tmp/bolt_http_test.py # HTTP 端到端 ## 平台 - Linux / macOS(完整功能:进程组杀、信号处理) -- Windows(基础功能:`cmd /C`、`taskkill /T` 杀进程树;无信号优雅退出) \ No newline at end of file +- Windows(基础功能:`cmd /C`、`taskkill /T` 杀进程树;无信号优雅退出) +## systemd 服务部署(开机自启) + +仓库内 `deploy/` 提供现成的部署文件: + +```bash +sudo install -m 0755 target/release/bolt /usr/local/bin/bolt +sudo cp deploy/bolt.service /etc/systemd/system/ +sudo cp deploy/bolt.env.example /etc/bolt.env # 按需修改(监听地址在 service 文件 ExecStart) +sudo systemctl daemon-reload +sudo systemctl enable --now bolt # 开机自启 + 立即启动 +``` + +常用管理命令: + +```bash +systemctl status bolt # 查看状态 +systemctl restart bolt # 重启(改完配置后) +systemctl stop bolt # 停止 +systemctl disable bolt # 取消开机自启 +journalctl -u bolt -f # 实时查看日志 +``` + +特性:崩溃自动重启(`Restart=on-failure`,2 秒间隔)、优雅停机(SIGTERM 时杀掉所有子进程树)、日志进 journald、`LimitNOFILE=65536`。默认监听 `127.0.0.1:8080`,对外暴露前务必在 `/etc/bolt.env` 设置 `BOLT_TOKEN`。 diff --git a/deploy/bolt.env.example b/deploy/bolt.env.example new file mode 100644 index 0000000..1336e13 --- /dev/null +++ b/deploy/bolt.env.example @@ -0,0 +1,26 @@ +# bolt 服务配置文件(EnvironmentFile) +# 修改后: systemctl restart bolt +# +# 注意:这是远程命令执行入口,监听公网时务必设置 BOLT_TOKEN! +# 启动参数(监听地址)在 /etc/systemd/system/bolt.service 的 ExecStart 中修改。 + +# 认证令牌(必填,若监听 0.0.0.0 对外暴露) +#BOLT_TOKEN=请改成强随机串 + +# 命令白名单(非空时仅允许列出的命令,用逗号分隔) +#BOLT_ALLOW=git,docker,curl + +# 命令黑名单(前缀匹配) +#BOLT_DENY=rm,mkfs + +# 默认命令超时毫秒(0 = 无限) +#BOLT_TIMEOUT_MS=30000 + +# 默认工作目录 +#BOLT_CWD=/root + +# 单流输出捕获上限(支持 K/M/G) +#BOLT_MAX_OUTPUT=1M + +# 额外允许的 HTTP Origin(默认仅 localhost/127.0.0.1) +#BOLT_ALLOW_ORIGIN=https://example.com \ No newline at end of file diff --git a/deploy/bolt.service b/deploy/bolt.service new file mode 100644 index 0000000..5cddfb1 --- /dev/null +++ b/deploy/bolt.service @@ -0,0 +1,28 @@ +[Unit] +Description=bolt - 极速单文件 MCP 命令执行服务器 +Documentation=https://git.jocay.qzz.io/jocay/bolt +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +ExecStart=/usr/local/bin/bolt --http 127.0.0.1:8080 +# 修改监听地址示例(对外暴露请务必在 /etc/bolt.env 设置 BOLT_TOKEN): +# ExecStart=/usr/local/bin/bolt --http 0.0.0.0:8080 +EnvironmentFile=-/etc/bolt.env +Restart=on-failure +RestartSec=2 +# 优雅停机:收到 SIGTERM 后 bolt 会杀掉全部子进程再退出 +TimeoutStopSec=10 +# 日志进 journald +StandardOutput=journal +StandardError=journal +SyslogIdentifier=bolt + +# 安全加固(保持宽松:命令执行需要完整权限) +# ProtectSystem / ProtectHome 不开启,否则子命令无法写文件 +NoNewPrivileges=false +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target \ No newline at end of file