735563fc31
- 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)
34 lines
1.2 KiB
Django/Jinja
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 ==="
|