Files
ml 735563fc31 Add registry-ui, automated GC, and Gitea runner/rate-limit fixes
- Deploy joxit/docker-registry-ui at cr.ladkau.de/ (Traefik routes
  /v2/ to registry, everything else to UI; REGISTRY_SECURED=true)
- Add weekly cron job (Sunday 03:00) to delete stale uploads, run
  registry garbage-collect, and prune dangling host images
- Remove rate-limit@docker middleware from Gitea router (act_runner
  polling at 2s intervals exceeded the 60 req/min limit)
- Set Traefik websecure readTimeout: 0 to fix large layer upload 499s
- Remove registry rate-limit middleware (was blocking concurrent pushes)
2026-07-26 10:52:26 +02:00

34 lines
1.2 KiB
Django/Jinja

#!/usr/bin/env bash
# Managed by Ansible — do not edit manually
# Weekly registry maintenance: remove stale uploads, run GC, prune dangling host images.
set -euo pipefail
LOG_TAG="registry-gc"
REGISTRY_COMPOSE_DIR="{{ registry_data_dir }}"
REGISTRY_DATA_DIR="{{ registry_data_dir }}/data"
log() { logger -t "$LOG_TAG" -- "$*"; echo "$(date -Iseconds) $*"; }
log "=== Registry cleanup started ==="
# 1. Remove stale upload sessions (failed or abandoned pushes)
find "{{ registry_data_dir }}/docker/registry/v2/repositories" \
-type d -name '_uploads' -exec rm -rf {} + 2>/dev/null || true
log "Stale _uploads removed"
# 2. Garbage-collect unreferenced blobs (stop → collect → start)
cd "$REGISTRY_COMPOSE_DIR"
docker compose stop registry
docker run --rm \
-v "${REGISTRY_DATA_DIR}:/var/lib/registry" \
registry:2 garbage-collect /etc/docker/registry/config.yml
docker compose start registry
log "Registry GC complete, registry restarted"
# 3. Remove dangling Docker images from the host
PRUNED=$(docker image prune -f)
RECLAIMED=$(echo "$PRUNED" | awk '/Total reclaimed/{print $NF}')
log "Docker image prune complete: ${RECLAIMED:-0B} reclaimed"
log "=== Registry cleanup done ==="