services: mariadb: image: mariadb:11.4 container_name: seltd-mariadb restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-SE3112} MARIADB_DATABASE: wago MARIADB_USER: app MARIADB_PASSWORD: app 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 ports: - "18110:18110" volumes: - collector_data:/app/data dockhand: image: fnsys/dockhand:latest container_name: dockhand restart: unless-stopped ports: - "3000:3000" volumes: - /var/run/docker.sock:/var/run/docker.sock - dockhand_data:/app/data volumes: mariadb_data: redis_data: collector_data: dockhand_data: