86 lines
3.6 KiB
Bash
86 lines
3.6 KiB
Bash
#!/bin/bash
|
||
# 为 Uptime Kuma 的 Bark 通知启用:自定义图标 / 消息分组 / 重要警告 / 图片推送 / 角标
|
||
# 2026-09-13
|
||
# 前置:以下文件需先 scp 到 /tmp(单个文件逐个传,多文件 scp 会静默丢文件)
|
||
# /tmp/bark-icon.png /tmp/bark-down.png /tmp/bark-up.png
|
||
# /tmp/bark.js /tmp/status.xpcool.com.conf
|
||
# 幂等:可重复执行
|
||
|
||
ASSET_DIR=/data/www/bark-assets
|
||
PATCH_DIR=/data/uptime-kuma-patch
|
||
IMAGE=louislam/uptime-kuma:2.5.3
|
||
TS=$(date +%Y%m%d%H%M%S)
|
||
|
||
echo "=== 0. 备份当前容器配置与 nginx 配置(便于回滚) ==="
|
||
sudo docker inspect uptime-kuma > "/tmp/kuma-inspect.$TS.json"
|
||
echo "inspect 已存 /tmp/kuma-inspect.$TS.json"
|
||
sudo docker inspect uptime-kuma --format 'restart={{json .HostConfig.RestartPolicy}} mem={{.HostConfig.Memory}}B port={{json .HostConfig.PortBindings}} env={{json .Config.Env}}'
|
||
sudo cp -a /data/nginx/conf.d/status.xpcool.com.conf "/data/nginx/conf.d/status.xpcool.com.conf.bak.$TS"
|
||
|
||
echo ""
|
||
echo "=== 1. 部署 Bark 素材 ==="
|
||
sudo mkdir -p "$ASSET_DIR" "$PATCH_DIR"
|
||
for f in icon down up; do
|
||
if [ -f "/tmp/bark-$f.png" ]; then
|
||
sudo mv -f "/tmp/bark-$f.png" "$ASSET_DIR/$f.png"
|
||
fi
|
||
done
|
||
sudo chmod 644 "$ASSET_DIR"/*.png
|
||
sudo chmod 755 "$ASSET_DIR"
|
||
ls -l "$ASSET_DIR"
|
||
|
||
echo ""
|
||
echo "=== 2. 安装 provider 补丁 ==="
|
||
if [ -f /tmp/bark.js ]; then
|
||
sudo mv -f /tmp/bark.js "$PATCH_DIR/bark.js"
|
||
fi
|
||
sudo chmod 644 "$PATCH_DIR/bark.js"
|
||
sudo cp -f "$PATCH_DIR/bark.js" /tmp/_bark_check.js
|
||
sudo docker cp /tmp/_bark_check.js uptime-kuma:/tmp/_bark_check.js > /dev/null
|
||
sudo docker exec uptime-kuma node --check /tmp/_bark_check.js && echo "补丁语法检查 OK"
|
||
sudo docker exec uptime-kuma rm -f /tmp/_bark_check.js
|
||
rm -f /tmp/_bark_check.js
|
||
echo "补丁 md5:$(md5sum "$PATCH_DIR/bark.js" | cut -d' ' -f1)"
|
||
|
||
echo ""
|
||
echo "=== 3. 部署 nginx 配置(新增 /bark-assets/ 静态位置) ==="
|
||
if [ -f /tmp/status.xpcool.com.conf ]; then
|
||
sudo mv -f /tmp/status.xpcool.com.conf /data/nginx/conf.d/status.xpcool.com.conf
|
||
fi
|
||
sudo nginx -t
|
||
sudo systemctl reload nginx
|
||
echo "nginx reload OK"
|
||
|
||
echo ""
|
||
echo "=== 4. 公网取图验证(手机端要能直接拉到) ==="
|
||
for f in icon down up; do
|
||
curl -s -o /dev/null -m 15 -w "$f.png code=%{http_code} type=%{content_type} size=%{size_download}\n" \
|
||
"https://status.xpcool.com/bark-assets/$f.png"
|
||
done
|
||
|
||
echo ""
|
||
echo "=== 5. 重建容器以挂载补丁(数据卷 /data/uptime-kuma 不变) ==="
|
||
sudo docker rm -f uptime-kuma > /dev/null 2>&1
|
||
sudo docker run -d --name uptime-kuma --restart unless-stopped \
|
||
-p 127.0.0.1:3001:3001 \
|
||
-e TZ=Asia/Shanghai \
|
||
-v /data/uptime-kuma:/app/data \
|
||
-v /data/uptime-kuma-patch/bark.js:/app/server/notification-providers/bark.js:ro \
|
||
--memory 512m \
|
||
"$IMAGE" > /dev/null
|
||
sleep 20
|
||
sudo docker ps --filter name=uptime-kuma --format '{{.Names}} | {{.Status}} | {{.Ports}}'
|
||
|
||
echo ""
|
||
echo "=== 6. 确认补丁确实生效 ==="
|
||
echo -n "宿主机补丁 md5 : "; md5sum "$PATCH_DIR/bark.js" | cut -d' ' -f1
|
||
echo -n "容器内文件 md5 : "; sudo docker exec uptime-kuma md5sum /app/server/notification-providers/bark.js 2>&1 | cut -d' ' -f1
|
||
echo -n "定制标记行数 : "; sudo docker exec uptime-kuma grep -c "xpcool 定制" /app/server/notification-providers/bark.js 2>&1
|
||
echo -n "图标常量 : "; sudo docker exec uptime-kuma grep -m1 "barkNotificationAvatar =" /app/server/notification-providers/bark.js 2>&1
|
||
|
||
echo ""
|
||
echo "=== 7. 面板可用性 ==="
|
||
curl -s -o /dev/null -m 10 -w "panel=%{http_code}\n" http://127.0.0.1:3001/
|
||
sudo docker exec uptime-kuma sqlite3 /app/data/kuma.db "SELECT id,name,active,json_extract(config,'\$.type') FROM notification;"
|
||
echo "DONE"
|