feat: enable Watchtower HTTP API and use internal registry

- Add HTTP API to Watchtower for CI/CD triggered updates
- Update custom container images to use git.schweitz.internal
- Add GITEA_TOKEN env var to scheduler for release cleanup task

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-14 13:26:51 +01:00
co-authored by Claude Opus 4.5
parent 9b2b32323c
commit bde4386b90
5 changed files with 23 additions and 8 deletions
+2 -2
View File
@@ -5,11 +5,11 @@ version: '3.8'
# Port: 8083 (HTTP API)
# Network: docker-dataplane (shared infrastructure network)
#
# Container image built from: tower-of-joy:3002/jpmschweitzer/core-api (internal registry)
# Container image built from: git.schweitz.internal/jpmschweitzer/core-api (internal registry)
services:
core-api:
image: tower-of-joy:3002/jpmschweitzer/core-api:latest
image: git.schweitz.internal/jpmschweitzer/core-api:latest
container_name: core-api
restart: unless-stopped
+2 -2
View File
@@ -4,11 +4,11 @@ version: '3.8'
# Application Layer
# Port: 8089 (HTTP)
# GPU: No
# Source: tower-of-joy:3002/jpmschweitzer/library-desk (internal registry)
# Source: git.schweitz.internal/jpmschweitzer/library-desk (internal registry)
services:
library-desk:
image: tower-of-joy:3002/jpmschweitzer/library-desk:latest
image: git.schweitz.internal/jpmschweitzer/library-desk:latest
container_name: library-desk
restart: unless-stopped
ports:
+3 -2
View File
@@ -4,11 +4,11 @@ version: '3.8'
# Purpose: System-wide maintenance orchestration - backups, doc mirroring, cleanup, task automation
# Port: 8090 (API + UI)
# Network: docker-dataplane
# Image: tower-of-joy:3002/jpmschweitzer/scheduler (internal registry)
# Image: git.schweitz.internal/jpmschweitzer/scheduler (internal registry)
services:
scheduler:
image: tower-of-joy:3002/jpmschweitzer/scheduler:latest
image: git.schweitz.internal/jpmschweitzer/scheduler:latest
container_name: scheduler
restart: unless-stopped
@@ -35,6 +35,7 @@ services:
- GITEA_PASSWORD=${GITEA_LIBRARY_PASSWORD}
- GITEA_SSH_HOST=gitea
- GITEA_SSH_PORT=22
- GITEA_TOKEN=${GITEA_TOKEN}
- BACKUP_RETENTION_DAILY=7
- BACKUP_RETENTION_WEEKLY=4
- BACKUP_RETENTION_MONTHLY=12
+2 -2
View File
@@ -4,11 +4,11 @@ version: '3.8'
# Purpose: OpenAI-compatible API server with LLM agent orchestration
# Port: 8000 (API)
# Network: docker-dataplane
# Image: tower-of-joy:3002/jpmschweitzer/tatlock (internal registry)
# Image: git.schweitz.internal/jpmschweitzer/tatlock (internal registry)
services:
tatlock:
image: tower-of-joy:3002/jpmschweitzer/tatlock:latest
image: git.schweitz.internal/jpmschweitzer/tatlock:latest
container_name: tatlock
restart: unless-stopped
+14
View File
@@ -11,12 +11,20 @@ services:
image: containrrr/watchtower:latest
container_name: watchtower
restart: unless-stopped
ports:
- "8070:8080" # HTTP API for triggering updates
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true # Remove old images after update
- WATCHTOWER_SCHEDULE=0 0 4 * * * # Run at 4 AM daily (cron format)
- TZ=Europe/Amsterdam
# HTTP API for CI/CD triggered updates
- WATCHTOWER_HTTP_API_UPDATE=true
- WATCHTOWER_HTTP_API_TOKEN=${WATCHTOWER_API_TOKEN}
- WATCHTOWER_HTTP_API_PERIODIC_POLLS=true # Allow triggering periodic poll via API
# Optional: Enable notifications
# - WATCHTOWER_NOTIFICATIONS=shoutrrr
# - WATCHTOWER_NOTIFICATION_URL= # Add notification URL (Discord, Slack, etc.)
@@ -45,6 +53,9 @@ networks:
# Manual Trigger:
# docker exec watchtower watchtower --run-once
#
# HTTP API Trigger (for CI/CD):
# curl -H "Authorization: Bearer $WATCHTOWER_API_TOKEN" http://localhost:8070/v1/update
#
# Exclude Specific Containers:
# Add label to container: com.centurylinklabs.watchtower.enable=false
#
@@ -54,3 +65,6 @@ networks:
# Security Note:
# Watchtower has full Docker socket access. Review updates in logs.
# Consider excluding critical services and updating them manually.
#
# Environment Variables (set in Portainer):
# - WATCHTOWER_API_TOKEN: Secret token for HTTP API authentication