version: '3.8' services: backend: build: context: ./backend dockerfile: ../docker/Dockerfile.backend container_name: minio-webui-backend restart: unless-stopped environment: NODE_ENV: production env_file: - .env ports: - "${PORT:-7510}:${PORT:-7510}" volumes: - ./logs:/app/logs - ~/.mc:/home/nodejs/.mc:ro depends_on: - redis networks: - minio-webui-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s frontend: build: context: ./frontend dockerfile: ../docker/Dockerfile.frontend container_name: minio-webui-frontend restart: unless-stopped ports: - "${FRONTEND_PORT:-7511}:80" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro - ./ssl:/etc/nginx/ssl:ro depends_on: - backend networks: - minio-webui-network redis: image: redis:7-alpine container_name: minio-webui-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - redis-data:/data networks: - minio-webui-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 # Optional: Add nginx as reverse proxy with SSL termination nginx-proxy: image: nginx:alpine container_name: minio-webui-proxy restart: unless-stopped ports: - "443:443" - "80:80" volumes: - ./nginx/proxy.conf:/etc/nginx/conf.d/default.conf:ro - ./ssl:/etc/nginx/ssl:ro depends_on: - frontend networks: - minio-webui-network profiles: - proxy volumes: redis-data: driver: local networks: minio-webui-network: driver: bridge