Files
filecodebox/deploy/1panel/current-app/update-50mb-image.sh
T
2026-06-05 08:39:16 +08:00

81 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
APP_DIR="/opt/1panel/apps/filecodebox/filecodebox"
CUSTOM_DIR="$APP_DIR/custom"
COMPOSE_FILE="$APP_DIR/docker-compose.yml"
UPSTREAM_IMAGE="lanol/filecodebox:beta"
LOCAL_IMAGE="local/filecodebox:50mb-chunk"
CONTAINER_NAME="${CONTAINER_NAME:-filecodebox}"
LOG_DIR="$APP_DIR/update-logs"
LOG_FILE="$LOG_DIR/update-$(date +%Y%m%d-%H%M%S).log"
mkdir -p "$CUSTOM_DIR" "$LOG_DIR"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "===== FileCodeBox custom image update start: $(date '+%F %T') ====="
echo "APP_DIR=$APP_DIR"
echo "UPSTREAM_IMAGE=$UPSTREAM_IMAGE"
echo "LOCAL_IMAGE=$LOCAL_IMAGE"
cd "$APP_DIR"
if [ -f "$APP_DIR/data/filecodebox.db" ]; then
cp -a "$APP_DIR/data/filecodebox.db" "$APP_DIR/data/filecodebox.db.bak.$(date +%Y%m%d%H%M%S)"
echo "database backup created"
fi
echo "[1/6] Pull upstream image"
docker pull "$UPSTREAM_IMAGE"
echo "[2/6] Ensure deterministic Dockerfile patch"
cat > "$CUSTOM_DIR/Dockerfile" <<'DOCKERFILE_EOF'
FROM lanol/filecodebox:beta
COPY fcb_extra_patch.py /tmp/fcb_extra_patch.py
RUN python /tmp/fcb_extra_patch.py && rm -f /tmp/fcb_extra_patch.py
DOCKERFILE_EOF
test -f "$CUSTOM_DIR/fcb_extra_patch.py"
echo "[3/6] Build local image"
docker build --pull -t "$LOCAL_IMAGE" "$CUSTOM_DIR"
echo "[4/6] Ensure docker-compose uses local image"
cp -a "$COMPOSE_FILE" "$COMPOSE_FILE.bak.$(date +%Y%m%d%H%M%S)"
python3 - <<'PY'
from pathlib import Path
p = Path('/opt/1panel/apps/filecodebox/filecodebox/docker-compose.yml')
s = p.read_text(encoding='utf-8')
lines = []
for line in s.splitlines():
if line.strip().startswith('image:'):
indent = line[:len(line)-len(line.lstrip())]
lines.append(indent + 'image: local/filecodebox:50mb-chunk')
else:
lines.append(line)
p.write_text('\n'.join(lines) + ('\n' if s.endswith('\n') else ''), encoding='utf-8')
PY
echo "[5/6] Validate and recreate container"
docker compose -f "$COMPOSE_FILE" config >/dev/null
docker compose -f "$COMPOSE_FILE" up -d --no-build
echo "[6/6] Verify running patch"
docker inspect "$CONTAINER_NAME" --format 'Image={{.Config.Image}} Mounts={{json .Mounts}}'
docker exec "$CONTAINER_NAME" sh -lc 'test -f /app/themes/2024/assets/fcb-analytics.js && grep -q "class TransferStats" /app/apps/base/models.py && grep -q "/analytics" /app/apps/admin/views.py && grep -q "downloadTraffic" /app/themes/2024/assets/fcb-analytics.js && echo "analytics files ok"'
for i in $(seq 1 12); do
if curl -fsS --max-time 10 "http://127.0.0.1:40157/" >/dev/null; then
echo "http ok"
break
fi
if [ "$i" = 12 ]; then
echo "http health check failed after retries" >&2
exit 1
fi
sleep 5
done
echo "===== FileCodeBox custom image update done: $(date '+%F %T') ====="
echo "Log: $LOG_FILE"