mirror of
https://github.com/This-weiyuqing/mi-fitness-health.git
synced 2026-10-18 03:03:49 +08:00
45 lines
2.0 KiB
Bash
45 lines
2.0 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
umask 077
|
|
[ "$(id -u)" = 0 ] || { echo '请通过 sudo 执行。'; exit 1; }
|
|
package=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
|
target=/vol2/1000/Soft/mi-fitness-health
|
|
cd "$package"
|
|
sha256sum -c health-ui7.tar.sha256
|
|
python3 - "$target/compose.override.yml" "$package/expected-current.sha256" <<'PY'
|
|
import hashlib,sys
|
|
from pathlib import Path
|
|
assert hashlib.sha256(Path(sys.argv[1]).read_bytes()).hexdigest()==Path(sys.argv[2]).read_text().strip(), '现有配置已变化,停止避免覆盖'
|
|
PY
|
|
before=$(docker inspect --format '{{.Id}}' mi-fitness-health-backend-1 mi-fitness-health-worker-1)
|
|
[ ! -L "$target/calendar" ] || { echo "日历目录不能是符号链接"; exit 1; }
|
|
mkdir -p "$target/calendar"
|
|
chown 1000:1001 "$target/calendar"
|
|
chmod 700 "$target/calendar"
|
|
docker load -i "$package/health-ui7.tar"
|
|
cd "$target"
|
|
docker compose --project-name mi-fitness-health --env-file .env -f compose.yml -f "$package/compose.override.yml" config --quiet
|
|
old="$target/compose.override.pre-ui7-$(date +%Y%m%d-%H%M%S).yml"
|
|
cp compose.override.yml "$old"
|
|
complete=0
|
|
recover() {
|
|
if [ "$complete" = 0 ]; then
|
|
cp "$old" "$target/compose.override.yml"
|
|
chown 1000:1001 "$target/compose.override.yml"
|
|
chmod 600 "$target/compose.override.yml"
|
|
docker compose --project-name mi-fitness-health up -d --no-deps --no-build --pull never web || true
|
|
echo '新版未通过验证,已恢复原网页配置并尝试回退。'
|
|
fi
|
|
}
|
|
trap recover EXIT
|
|
cp "$package/compose.override.yml" compose.override.yml
|
|
chown 1000:1001 compose.override.yml
|
|
chmod 600 compose.override.yml
|
|
docker compose --project-name mi-fitness-health up -d --no-deps --no-build --pull never --wait --wait-timeout 60 web
|
|
python3 "$package/check-web.py"
|
|
after=$(docker inspect --format '{{.Id}}' mi-fitness-health-backend-1 mi-fitness-health-worker-1)
|
|
[ "$before" = "$after" ] || { echo '后端或同步容器标识发生变化,停止验收。'; exit 1; }
|
|
complete=1
|
|
trap - EXIT
|
|
printf '\n网页更新完成。后端和 worker 未重建,登录密码及数据目录未修改。\n'
|