From cda9a2381cda6b1910568d4706437042da0486f6 Mon Sep 17 00:00:00 2001 From: Paul Nothaft Date: Sun, 4 Jan 2026 22:28:03 +0100 Subject: [PATCH] chore: Add production docker-compose for Traefik/Portainer deployment - Adds docker-compose.prod.yml with Traefik labels - Includes Redis for session management - Configurable via environment variables for Portainer - Homepage integration labels included --- docker-compose.prod.yml | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 docker-compose.prod.yml diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..b0adbe8 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,91 @@ +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`) || Host(`minio-webui.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: