Skip to content

Deploying MinIO with Docker Compose with Traefik

This guide explains how to deploy MinIO with Docker Compose and Traefik as a reverse proxy.

Prerequisites

Before proceeding, ensure the following prerequisites are met:

  • Docker installed on your system.
  • Docker Compose installed.
  • A domain name pointed to your server (e.g., minio.yourdomain.com).

Step 1: Project Setup

  1. Create a directory for your MinIO and Traefik setup:
   mkdir minio-traefik
   cd minio-traefik
  1. Create docker-compose.yaml file in the minio-traefik directory
version: "3.3"

services:
  minio:
    image: minio/minio:RELEASE.2024-07-26T20-48-21Z
    ports:
      - '9000:9000'
      - '9001:9001'
    networks:
      - traefik-proxy2
    volumes:
      - minio-data:/data
    command:
      - server
      - /data
      - --console-address
      - ":9001"
    environment:
      - MINIO_ROOT_USER=MyUser
      - MINIO_ROOT_PASSWORD=MyPass
      - MINIO_BROWSER_REDIRECT_URL=https://console.minio.site2.arico-it.com
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.minio.rule=Host(`minio.site2.arico-it.com`)"
      - "traefik.http.routers.minio.entrypoints=web"
      - "traefik.http.routers.minio.service=minio"
      - "traefik.http.services.minio.loadbalancer.server.port=9000"
      - "traefik.http.routers.minio-secure.rule=Host(`minio.site2.arico-it.com`)"
      - "traefik.http.routers.minio-secure.entrypoints=websecure"
      - "traefik.http.routers.minio-secure.service=minio-secure"
      - "traefik.http.services.minio-secure.loadbalancer.server.port=9000"
      - "traefik.http.routers.minio-secure.tls.certresolver=myresolver"

      - "traefik.http.routers.minioconsole.rule=Host(`console.minio.site2.arico-it.com`)"
      - "traefik.http.routers.minioconsole.entrypoints=web"
      - "traefik.http.routers.minioconsole.service=minioconsole"
      - "traefik.http.services.minioconsole.loadbalancer.server.port=9001"
      - "traefik.http.routers.minioconsole-secure.rule=Host(`console.minio.site2.arico-it.com`)"
      - "traefik.http.routers.minioconsole-secure.entrypoints=websecure"
      - "traefik.http.routers.minioconsole-secure.service=minioconsole-secure"
      - "traefik.http.services.minioconsole-secure.loadbalancer.server.port=9001"
      - "traefik.http.routers.minioconsole-secure.tls.certresolver=myresolver"

  # Traefik
  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: unless-stopped
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--log.level=DEBUG"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.email=amdukf@gmail.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - "./letsencrypt:/letsencrypt"
    networks:
      - traefik-proxy2
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.minio.site2.arico-it.com`)"
      - "traefik.http.routers.traefik.entrypoints=web"
      - "traefik.http.routers.traefik.service=traefik"
      - "traefik.http.services.traefik.loadbalancer.server.port=8080"
      - "traefik.http.routers.traefik-secure.rule=Host(`traefik.minio.site2.arico-it.com`)"
      - "traefik.http.routers.traefik-secure.entrypoints=websecure"
      - "traefik.http.routers.traefik-secure.tls.certresolver=myresolver"

volumes:
  minio-data:

networks:
  traefik-proxy2:
    driver: bridge

  1. Deploy the minio with docker-compose.yaml file:
docker compose up -d