Thanks to visit codestin.com
Credit goes to github.com

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

No packages published

Contributors 2

  •  
  •