Setting up Minio
This is a Docker Compose configuration example on deploying MinIO object storage.
MinIO is a high performance object storage and is API compatible with Amazon S3 cloud storage service. It's been a while since last time I setup Minio and boy has it improved. One of the changes is that it now has two endpoints, one for the API and one for the console (WebUI). If the API receives a request from a browser it will redirect the request to the console URL. That is why we need to create two routes in Traefik.
Docker Compose¶
Below is as docker compose that deploys Minio with my usual Traefik setup.
- Create two random strings, with below command, for the
MINIO_ROOT_USERandMINIO_ROOT_PASSWORDenvironment variables. - Change the
minio.example.organdminio-console.example.orgdomain names. - Set the minio data folder.
version: "3.8"
networks:
default:
external:
name: traefik-proxy
services:
minio:
image: minio/minio
container_name: minio
restart: unless-stopped
command: server /data --console-address ":9001"
expose:
- 9000
- 9001
volumes:
- /home/docker-data/minio:/data
environment:
MINIO_ROOT_USER: <random-secret-here>
MINIO_ROOT_PASSWORD: <random-secret-here>
MINIO_BROWSER_REDIRECT_URL: https://minio-console.example.org
MINIO_SERVER_URL: https://minio.example.org
labels:
- traefik.enable=true
- traefik.http.services.minio.loadbalancer.server.port=9000
- traefik.http.routers.minio.rule=Host(`minio.example.org`)
- traefik.http.routers.minio.tls.certresolver=le
- traefik.http.routers.minio.entrypoints=websecure
- traefik.http.routers.minio.service=minio
- traefik.http.services.minio-console.loadbalancer.server.port=9001
- traefik.http.routers.minio-console.rule=Host(`minio-console.example.org`)
- traefik.http.routers.minio-console.tls.certresolver=le
- traefik.http.routers.minio-console.entrypoints=websecure
- traefik.http.routers.minio-console.service=minio-console
