Skip to content

csaeum/DockerStackOfelia

Repository files navigation

Docker Ofelia Stack

GitHub Release License

🇬🇧 English | 🇫🇷 Français

Ein produktionsbereiter Docker Stack für Ofelia - einen modernen Cron-Job-Scheduler für Docker-Container mit integrierter Logrotate-Funktionalität.

Was ist Ofelia?

Ofelia ist ein Docker-Job-Scheduler, der es ermöglicht, Cron-Jobs direkt in Docker-Containern auszuführen. Statt in jedem Container einen eigenen Cron-Daemon laufen zu lassen, verwaltet Ofelia zentral alle zeitgesteuerten Aufgaben über Docker-Labels.

Features

  • Zentrale Verwaltung aller Cron-Jobs für Docker-Container
  • Automatische Logrotation mit konfiguriertem Zeitplan
  • Sichere Konfiguration (Docker Socket read-only)
  • Timezone-Unterstützung (Europe/Berlin)
  • Job-Logging in separatem Verzeichnis
  • Produktionsbereit mit Restart-Policy

Voraussetzungen

  • Docker Engine 20.10+
  • Docker Compose 2.0+
  • Zugriff auf /var/run/docker.sock

Installation

  1. Repository klonen:
git clone https://github.com/csaeum/DockerStackOfelia.git
cd DockerStackOfelia
  1. Umgebungsvariablen anpassen (optional):
cp .env.example .env
nano .env
  1. Stack starten:
docker-compose up -d

Konfiguration

Umgebungsvariablen (.env)

COMPOSE_PROJECT_NAME=ofelia      # Präfix für Container-Namen
TIMEZONE=Europe/Berlin            # Timezone für Cron-Jobs

Cron-Jobs in anderen Containern definieren

Fügen Sie Labels zu Ihren Docker-Containern hinzu, um Cron-Jobs zu definieren:

services:
  myapp:
    image: myapp:latest
    labels:
      ofelia.enabled: "true"
      ofelia.job-exec.backup.schedule: "0 2 * * *"
      ofelia.job-exec.backup.command: "/app/backup.sh"

Job-Typen

  • job-exec: Befehl in laufendem Container ausführen
  • job-run: Befehl in neuem Container (wird danach gelöscht)
  • job-local: Befehl auf dem Host ausführen

Schedule-Format

  • Cron-Format: 0 2 * * * (täglich um 2 Uhr)
  • Go-Format: @every 5m (alle 5 Minuten)
  • Shortcuts: @hourly, @daily, @weekly, @monthly

Logrotate-Konfiguration

Die Logrotate-Konfiguration befindet sich in config/logrotate.conf:

/ofelia/logs/*.log {
    daily
    rotate 2
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

Anpassungen:

  • rotate 2: Anzahl der aufzubewahrenden Log-Dateien
  • daily: Rotationsintervall (daily, weekly, monthly)
  • compress: Logs nach Rotation komprimieren

Nutzung

Stack-Befehle

# Stack starten
docker-compose up -d

# Logs anzeigen
docker-compose logs -f ofelia

# Stack stoppen
docker-compose down

# Stack neu starten
docker-compose restart

Job-Status prüfen

# Ofelia-Logs anzeigen
docker logs ofelia

# Job-Logs im logs-Verzeichnis
tail -f logs/*.log

Manuelle Logrotation

docker exec ofelia-logrotate logrotate /etc/logrotate.conf

Verzeichnisstruktur

.
├── config/
│   └── logrotate.conf          # Logrotate-Konfiguration
├── logs/                        # Job-Logs (automatisch erstellt)
├── .env                         # Umgebungsvariablen
├── docker-compose.yaml          # Docker Compose Konfiguration
├── Dockerfile                   # Logrotate-Container Image
└── README.md                    # Diese Datei

Sicherheit

  • Docker Socket ist read-only gemountet (:ro)
  • Keine Root-Rechte erforderlich
  • Logs werden in separatem Volume gespeichert
  • Keine sensiblen Daten in den Container-Images

Troubleshooting

Jobs werden nicht ausgeführt

  1. Container läuft?
docker ps | grep ofelia
  1. Labels korrekt gesetzt?
docker inspect <container-name> | grep ofelia
  1. Ofelia-Logs prüfen:
docker logs ofelia

Logrotation funktioniert nicht

  1. Logrotate-Container läuft?
docker ps | grep logrotate
  1. Manuell testen:
docker exec ofelia-logrotate logrotate -d /etc/logrotate.conf

Beispiele

Tägliches Backup

services:
  database:
    image: postgres:15
    labels:
      ofelia.enabled: "true"
      ofelia.job-exec.db-backup.schedule: "0 3 * * *"
      ofelia.job-exec.db-backup.command: "pg_dump -U postgres mydb > /backup/dump.sql"

Log-Bereinigung alle 6 Stunden

services:
  webapp:
    image: nginx:alpine
    labels:
      ofelia.enabled: "true"
      ofelia.job-exec.cleanup.schedule: "@every 6h"
      ofelia.job-exec.cleanup.command: "find /var/log -name '*.log' -mtime +7 -delete"

Lizenz & Unterstützung

Dieses Projekt ist Open Source (GPL-3.0-or-later) und kostenlos. Wenn es dir geholfen hat, freue ich mich über deine Unterstützung:

Buy Me a Coffee GitHub Sponsors PayPal

Made with ❤️ by WSC - Web SEO Consulting

Credits

  • Ofelia by mcuadros
  • Alpine Linux für minimale Container-Images

Beitragen

Pull Requests sind willkommen! Für größere Änderungen öffne bitte zuerst ein Issue.

Links

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors