services: mariadb: image: mariadb:11.4 container_name: seltd-mariadb restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: root 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: 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: http://localhost:5173 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_URL: ${VITE_API_URL:-http://localhost:18080/api} ports: - "5173:5173" depends_on: - api volumes: mariadb_data: redis_data: