Files
portainer-core/stacks/maintenance.yml
T

63 lines
1.9 KiB
YAML

version: '3.8'
# Maintenance Runner - Scheduled Tasks & Scripts
# Purpose: Centralized container for running maintenance tasks (backups, cleanup, health checks, etc.)
# Ports: None (background service)
# GPU: No
# Storage: Read access to Docker data, write to backup location
services:
maintenance:
image: alpine:latest
container_name: maintenance
restart: unless-stopped
volumes:
# Docker configs to backup (read-only)
- /home/jpmschweitzer/docker-data:/data/docker-data:ro
# Host-based service configs to backup (read-only)
- /home/jpmschweitzer/.config/code-server:/data/code-server-config:ro
# Backup destination (read-write)
- /mnt/media/backups:/backups
# Maintenance scripts
- /home/jpmschweitzer/docker-data/maintenance/scripts:/scripts:ro
# Crontab configuration
- /home/jpmschweitzer/docker-data/maintenance/crontab:/etc/crontabs/root:ro
# Logs
- /home/jpmschweitzer/docker-data/maintenance/logs:/var/log/maintenance
# Docker socket for container management (read-only)
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=Europe/Amsterdam
command: >
sh -c "
apk add --no-cache docker-cli &&
crond -f -l 2
"
# crond flags:
# -f: foreground (don't daemonize)
# -l 2: log level 2 (errors and info)
# Usage:
# 1. Create maintenance scripts in ~/docker-data/maintenance/scripts/
# 2. Define schedule in ~/docker-data/maintenance/crontab
# 3. Container will execute scripts per schedule
#
# Adding new maintenance tasks:
# 1. Create new script in scripts/ directory
# 2. Make it executable: chmod +x script-name.sh
# 3. Add to crontab with desired schedule
# 4. Restart container: docker restart maintenance
#
# View logs:
# - Cron logs: docker logs maintenance
# - Task logs: ~/docker-data/maintenance/logs/
#
# Manual task execution:
# docker exec maintenance /scripts/backup-configs.sh