部署运维
本文说明如何把服务部署到 Linux 服务器,涵盖一键脚本、手动 systemd 部署、卸载与技术细节。
1. 上传文件
scp -r src package.json scripts deploy .env.example user@server:/opt/dingtalk-notice/
2. 创建环境变量文件
cd /opt/dingtalk-notice
cp .env.example .env
vi .env # 填入 DINGTALK_WEBHOOK_URL、DINGTALK_SECRET、DINGTALK_API_TOKEN(可选)
3. 一键部署
sudo bash scripts/install.sh
脚本支持两种部署模式:
| 模式 | 用途 | 依赖 |
|---|---|---|
| 模式 1 — 安装推送服务 | 环境检查 → 安装 systemd 服务 → 启动,本机作为推送服务器 | Node.js |
| 模式 2 — 外接推送服务 | 交互式输入远程 IP / 端口 / Token / 主机名,只装监控脚本,连接已有推送服务器 | 仅 bash + curl |
4. 手动部署(可选)
如果不想用 install.sh,也可以分步操作:
sudo bash scripts/check.sh # 先检查环境
sudo cp deploy/dingtalk-notice.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now dingtalk-notice
服务由 systemd 托管,配置了 Restart=always,
进程崩溃后 5 秒自动重启(RestartSec=5),开机自启。
卸载
sudo bash /opt/dingtalk-notice/scripts/uninstall.sh
卸载脚本会停止并移除 systemd 服务,但保留项目目录和 Node.js。 cron 定时任务由用户手动设定,卸载后需自行清理:
rm -rf /opt/dingtalk-notice # 删除项目文件
crontab -e # 移除 monitor.sh 的 cron 行
技术细节
- 零外部依赖:仅使用 Node.js 标准库(
http、https、crypto),无框架、无数据库、无状态 - Webhook 加签:按
timestamp + "\n" + secret做 HMAC-SHA256 → Base64 → URL 编码,自动拼接timestamp与sign参数 - 请求超时:向钉钉 API 请求超时 10 秒,超时返回 502
- 结构化日志:记录时间戳、IP、方法、路径、状态码、耗时、UA、Body 大小,支持文件写入与 1MB 自动轮转
- 优雅关闭:收到 SIGTERM / SIGINT 后停止接收新请求,等待在途请求完成再退出,10 秒超时强制退出
- 安全加固:systemd 单元启用了
NoNewPrivileges、ProtectSystem=strict、ProtectHome等,进程以nobody运行