feat: 为 Sub2API 添加 app 镜像每日自动更新

- 生成 auto-update.sh,仅拉取并重启 app 服务(不动 db / redis)
- 注册每天 04:00 的定时任务,按脚本路径去重避免重复写入
- 兼容 docker compose 与 docker-compose,安装与更新均自动检测
- 更新后清理悬空镜像,并写入 auto-update.log 日志
- 安装结束时打印手动更新提示与自动更新说明
This commit is contained in:
eddy
2026-07-01 03:11:59 +08:00
parent d6ec01065a
commit 33c1068380
+49
View File
@@ -52,12 +52,58 @@ services:
EOF EOF
# 4、安装 # 4、安装
if docker compose version >/dev/null 2>&1; then
docker compose up -d
else
docker-compose up -d docker-compose up -d
fi
# 5、打开防火墙的端口 # 5、打开防火墙的端口
ufw allow $port80 ufw allow $port80
ufw status ufw status
# 6、配置每日自动更新
# install_dir 已在脚本开头(第 13 行)创建,这里仅定义路径
install_dir=/root/data/docker_data/Sub2API
update_script="$install_dir/auto-update.sh"
cat <<'EOF' > "$update_script"
#!/bin/bash
set -euo pipefail
install_dir=/root/data/docker_data/Sub2API
cd "$install_dir" # 进入 docker-compose 所在的文件夹
if docker compose version >/dev/null 2>&1; then
compose_cmd=(docker compose)
elif command -v docker-compose >/dev/null 2>&1; then
compose_cmd=(docker-compose)
else
echo "未检测到 docker compose 或 docker-compose,无法自动更新。" >&2
exit 1
fi
# 只更新 app 服务(Sub2API 镜像),不动 db / redis
"${compose_cmd[@]}" pull app
"${compose_cmd[@]}" up -d app
# 清理旧镜像,释放磁盘空间
docker image prune -f
EOF
chmod +x "$update_script"
# 写入每日 04:00 自动更新任务
cron_line="0 4 * * * $update_script >> /root/data/docker_data/Sub2API/auto-update.log 2>&1"
if command -v crontab >/dev/null 2>&1; then
# 使用脚本路径去重,避免重复写入 Sub2API 自动更新任务
( crontab -l 2>/dev/null | grep -v -F -- "$update_script" || true ; echo "$cron_line" ) | crontab -
echo "已配置定时自动更新任务:每天 04:00 自动更新 Sub2API app 镜像(不更新 db / redis)。"
else
echo "未检测到 crontab,跳过定时更新任务配置。可手动执行 $update_script 更新。"
fi
# 打印访问链接 # 打印访问链接
echo "------------------------" echo "------------------------"
echo "访问链接:" echo "访问链接:"
@@ -65,3 +111,6 @@ echo "https://sub2api.ghuang.top"
echo "User: admin@localhost" echo "User: admin@localhost"
echo "Password: admin" echo "Password: admin"
echo "------------------------" echo "------------------------"
echo "已开启定时自动更新:每天 04:00 仅拉取最新 app 镜像并重启(db / redis 不动)。"
echo "手动更新可执行:$update_script"
echo "------------------------"