🧰 纳入 FileCodeBox 1Panel 定制资料
This commit is contained in:
+80
@@ -0,0 +1,80 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user