version: '3.9' services: # Redis for session management redis: image: redis:7-alpine command: redis-server --appendonly yes volumes: - /mnt/DockerMount/minio-webui/redis:/data restart: unless-stopped networks: - minio-webui-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 # Backend API backend: image: theluap/minio-webui-backend:latest environment: - NODE_ENV=production - PORT=3000 - JWT_SECRET=${JWT_SECRET} - ADMIN_PASSWORD_HASH=${ADMIN_PASSWORD_HASH} - SESSION_TIMEOUT=${SESSION_TIMEOUT:-3600} - LOG_LEVEL=${LOG_LEVEL:-info} - REDIS_HOST=redis - REDIS_PORT=6379 # Optional: Default MinIO connection (can also be added via UI) - DEFAULT_MINIO_ALIAS=${DEFAULT_MINIO_ALIAS:-} - MINIO_ENDPOINT=${MINIO_ENDPOINT:-} - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-} # Optional: IP restriction - ENABLE_IP_RESTRICTION=${ENABLE_IP_RESTRICTION:-false} - ALLOWED_IPS=${ALLOWED_IPS:-} # Optional: Email reports - SMTP_HOST=${SMTP_HOST:-} - SMTP_PORT=${SMTP_PORT:-587} - SMTP_SECURE=${SMTP_SECURE:-false} - SMTP_USER=${SMTP_USER:-} - SMTP_PASS=${SMTP_PASS:-} - REPORT_SENDER=${REPORT_SENDER:-} - REPORT_RECIPIENT=${REPORT_RECIPIENT:-} - REPORT_SCHEDULE=${REPORT_SCHEDULE:-0 0 * * 1} volumes: - /mnt/DockerMount/minio-webui/logs:/app/logs - /mnt/DockerMount/minio-webui/temp:/app/temp - /mnt/DockerMount/minio-webui/mc-config:/home/nodejs/.mc depends_on: - redis restart: unless-stopped 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 (nginx + React) frontend: image: theluap/minio-webui-frontend:latest depends_on: - backend restart: unless-stopped deploy: labels: - "traefik.enable=true" - "traefik.http.routers.minio-webui.rule=Host(`minio-webui.local.nothaft.cloud`)" - "traefik.http.routers.minio-webui.entrypoints=https" - "traefik.http.routers.minio-webui.tls.certresolver=dns" - "traefik.http.services.minio-webui.loadbalancer.server.port=80" - "traefik.docker.network=proxy" # Homepage integration - "homepage.group=Infrastructure" - "homepage.name=MinIO WebUI" - "homepage.icon=mdi-database" - "homepage.href=https://minio-webui.local.nothaft.cloud/" - "homepage.description=MinIO Storage Manager" networks: - minio-webui-network - proxy networks: proxy: external: true minio-webui-network: