services: mariadb: image: mariadb:11.4 container_name: seltd-mariadb restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-SE3112} MARIADB_ROOT_HOST: mariadb MARIADB_DATABASE: wago MARIADB_USER: wago MARIADB_PASSWORD: ${MARIADB_PASSWORD:-3112} ports: - "3306:3306" volumes: - mariadb_data:/var/lib/mysql - ./docker/mariadb/init:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 15s timeout: 10s retries: 10 redis: image: redis:7.4-alpine container_name: seltd-redis restart: unless-stopped command: ["redis-server", "/usr/local/etc/redis/redis.conf"] ports: - "6379:6379" volumes: - redis_data:/data - ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf:ro healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 10 api: build: context: ./api container_name: seltd-api restart: unless-stopped environment: PORT: 8080 DB_HOST: mariadb DB_PORT: 3306 DB_NAME: wago DB_USER: root DB_PASSWORD: ${MARIADB_ROOT_PASSWORD:-SE3112} DB_PASSWORD_FALLBACK: ${DB_PASSWORD_FALLBACK:-root} REDIS_URL: redis://redis:6379 JWT_SECRET: ${JWT_SECRET:-change-me} ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@example.com} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-ChangeMe123!} ADMIN_NAME: ${ADMIN_NAME:-System Admin} CORS_ORIGIN: ${CORS_ORIGIN:-*} ports: - "18080:8080" depends_on: mariadb: condition: service_healthy redis: condition: service_healthy web: build: context: ./web container_name: seltd-web restart: unless-stopped environment: VITE_API_PORT: ${VITE_API_PORT:-18080} ports: - "5173:5173" depends_on: - api collector: build: context: ./collector container_name: seltd-collector restart: unless-stopped environment: PORT: 18110 DB_HOST: mariadb DB_PORT: 3306 DB_NAME: wago DB_USER: root DB_PASSWORD: ${MARIADB_ROOT_PASSWORD:-SE3112} POLL_TICK_MS: ${POLL_TICK_MS:-1000} BACNET_COLLECTOR_URL: ${BACNET_COLLECTOR_URL:-http://172.17.0.1:18111} ports: - "18110:18110" extra_hosts: - "host.docker.internal:host-gateway" volumes: - collector_data:/app/data depends_on: mariadb: condition: service_healthy bacnet-collector: condition: service_started symcon-collector: build: context: ./symcon-collector container_name: seltd-symcon-collector restart: unless-stopped environment: DB_HOST: mariadb DB_PORT: 3306 DB_NAME: wago DB_USER: root DB_PASSWORD: ${MARIADB_ROOT_PASSWORD:-SE3112} SOURCES_FILE: /app/collector-data/sources.json SYMCON_POLL_TICK_MS: ${SYMCON_POLL_TICK_MS:-1000} SYMCON_MAX_CONCURRENCY: ${SYMCON_MAX_CONCURRENCY:-4} volumes: - collector_data:/app/collector-data:ro depends_on: mariadb: condition: service_healthy collector: condition: service_started bacnet-collector: build: context: ./bacnet-collector container_name: seltd-bacnet-collector restart: unless-stopped environment: PORT: 18111 BACNET_SCAN_TIMEOUT: ${BACNET_SCAN_TIMEOUT:-12000} BACNET_POINT_LIMIT: ${BACNET_POINT_LIMIT:-2000} BACNET_BROADCAST_FALLBACKS: ${BACNET_BROADCAST_FALLBACKS:-} BACNET_UNICAST_DELAY_MS: ${BACNET_UNICAST_DELAY_MS:-120} network_mode: "host" runner: build: context: ./runner container_name: seltd-runner restart: unless-stopped environment: REDIS_URL: redis://redis:6379 DB_HOST: mariadb DB_PORT: 3306 DB_NAME: wago DB_USER: root DB_PASSWORD: ${MARIADB_ROOT_PASSWORD:-SE3112} EXPORT_DIR: /exports RUNNER_TICK_MS: ${RUNNER_TICK_MS:-1000} RUNNER_TIMEZONE: ${RUNNER_TIMEZONE:-Europe/Berlin} volumes: - runner_exports:/exports depends_on: mariadb: condition: service_healthy redis: condition: service_healthy dockhand: image: fnsys/dockhand:latest container_name: seltd-dockhand restart: unless-stopped ports: - "3008:3000" volumes: - /var/run/docker.sock:/var/run/docker.sock - dockhand_data:/app/data cadvisor: image: ghcr.io/google/cadvisor:v0.60.2 container_name: seltd-cadvisor restart: unless-stopped privileged: true ports: - "9090:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro devices: - /dev/kmsg:/dev/kmsg volumes: mariadb_data: redis_data: collector_data: runner_exports: dockhand_data: