version: '3.8' services: # 1. OneUptime App-Core: Zentraler Application-Server und Dashboard oneuptime: image: oneuptime/app:${ONEUPTIME_VERSION:-latest} container_name: oneuptime-master restart: ${RESTART_POLICY:-always} ports: - "${HOST_PORT_HTTP:-7080}:80" - "${HOST_PORT_HTTPS:-4433}:443" environment: - CONTAINER_NAME=oneuptime - PORT=${INTERNAL_PORT:-80} - ENCRYPTION_SECRET=${ENCRYPTION_SECRET:-ein_sehr_sicheres_zufaelliges_passwort_123!} - APP_NAME=${APP_NAME:-OneUptime} - TZ=${TIMEZONE:-Europe/Berlin} - DATABASE_HOST=oneuptime-postgres - REDIS_HOST=oneuptime-redis - CLICKHOUSE_HOST=oneuptime-clickhouse volumes: - ${ONEUPTIME_DATA_DIR:-/opt/docker/oneuptime/app}:/usr/src/app/data depends_on: - oneuptime-postgres - oneuptime-redis - oneuptime-clickhouse # 2. PostgreSQL: Primäre relationale Datenbank für Konfigurationen und Benutzerdaten oneuptime-postgres: image: postgres:${POSTGRES_VERSION:-15-alpine} container_name: oneuptime-postgres restart: ${RESTART_POLICY:-always} environment: - POSTGRES_USER=${POSTGRES_USER:-oneuptime} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres_secure_pass_99!} - POSTGRES_DB=${POSTGRES_DB:-oneuptimedb} - TZ=${TIMEZONE:-Europe/Berlin} volumes: - ${POSTGRES_DATA_DIR:-/opt/docker/oneuptime/postgres}:/var/lib/postgresql/data # 3. Redis: In-Memory-Datenbank für Caching, Echtzeit-Events und Job-Queues oneuptime-redis: image: redis:${REDIS_VERSION:-7-alpine} container_name: oneuptime-redis restart: ${RESTART_POLICY:-always} command: redis-server --appendonly yes environment: - TZ=${TIMEZONE:-Europe/Berlin} volumes: - ${REDIS_DATA_DIR:-/opt/docker/oneuptime/redis}:/data # 4. ClickHouse: Spaltenorientierte Datenbank für massenhafte Log-Daten und Metriken oneuptime-clickhouse: image: clickhouse/clickhouse-server:${CLICKHOUSE_VERSION:-latest} container_name: oneuptime-clickhouse restart: ${RESTART_POLICY:-always} environment: - TZ=${TIMEZONE:-Europe/Berlin} ulimits: nofile: soft: 262144 hard: 262144 volumes: - ${CLICKHOUSE_DATA_DIR:-/opt/docker/oneuptime/clickhouse}:/var/lib/clickhouse # 5. OneUptime Probe: Der integrierte Satellit, der die eigentlichen Überprüfungen (Pings/HTTP) ausführt oneuptime-probe: image: oneuptime/probe:${ONEUPTIME_VERSION:-latest} container_name: oneuptime-probe restart: ${RESTART_POLICY:-always} environment: - TZ=${TIMEZONE:-Europe/Berlin} # Kommuniziert intern im Docker-Netzwerk direkt mit dem App-Core - ONEUPTIME_URL=http://oneuptime:${INTERNAL_PORT:-80} depends_on: - oneuptime