MinIO — S3-совместимое объектное хранилище: бэкапы, артефакты CI, вложения приложений, статика. Ниже — один узел за Traefik: API на s3.(yourdomain), консоль на minio.(yourdomain).
Нужны рабочий Traefik и сеть traefik_network.
.envmkdir -p minio/data
cd minio
cat > .env <<'EOF'
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=(youpassword)
MINIO_BUCKET=data
EOF
Пароль — длинный (MinIO требует не меньше 8 символов; лучше 16+).
docker-compose.ymlservices:
minio:
image: minio/minio:latest
container_name: minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- ./data:/data
labels:
- traefik.enable=true
# S3 API :9000
- traefik.http.middlewares.minio_api_https.redirectscheme.scheme=https
- traefik.http.routers.minio_api.entrypoints=web
- traefik.http.routers.minio_api.middlewares=minio_api_https@docker
- traefik.http.routers.minio_api.rule=Host(`s3.(yourdomain)`)
- traefik.http.routers.minio_api_https.entrypoints=websecure
- traefik.http.routers.minio_api_https.rule=Host(`s3.(yourdomain)`)
- traefik.http.routers.minio_api_https.tls=true
- traefik.http.routers.minio_api_https.tls.certresolver=le
- traefik.http.routers.minio_api_https.service=minio_api
- traefik.http.services.minio_api.loadbalancer.server.port=9000
# Console :9001
- traefik.http.middlewares.minio_console_https.redirectscheme.scheme=https
- traefik.http.routers.minio_console.entrypoints=web
- traefik.http.routers.minio_console.middlewares=minio_console_https@docker
- traefik.http.routers.minio_console.rule=Host(`minio.(yourdomain)`)
- traefik.http.routers.minio_console_https.entrypoints=websecure
- traefik.http.routers.minio_console_https.rule=Host(`minio.(yourdomain)`)
- traefik.http.routers.minio_console_https.tls=true
- traefik.http.routers.minio_console_https.tls.certresolver=le
- traefik.http.routers.minio_console_https.service=minio_console
- traefik.http.services.minio_console.loadbalancer.server.port=9001
networks:
- traefik_network
minio-init:
image: minio/mc:latest
container_name: minio-init
depends_on:
- minio
entrypoint: ["/bin/sh", "-c"]
command:
- |
for i in $$(seq 1 30); do
mc alias set local http://minio:9000 $${MINIO_ROOT_USER} $${MINIO_ROOT_PASSWORD} && break
sleep 1
done
mc mb -p local/$${MINIO_BUCKET} || true
exit 0
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
MINIO_BUCKET: ${MINIO_BUCKET}
networks:
- traefik_network
restart: "no"
networks:
traefik_network:
external: true
⚠️ Замените
(yourdomain)и пароль. Два Host-правила — отдельные сервисы Traefik на порты9000и9001.
docker compose up -d
Консоль: https://minio.(yourdomain) (root user/password из .env).
S3 endpoint для приложений: https://s3.(yourdomain).
Пример для клиента / .env приложения:
S3_ENDPOINT=https://s3.(yourdomain)
S3_ACCESS_KEY=minio
S3_SECRET_KEY=(youpassword)
S3_BUCKET=data
S3_USE_SSL=true
./data (или том) — это объекты и метаданные.s3.(yourdomain) обычно хватает path-style (https://s3…/bucket/key).Итог: S3 API + веб-консоль за HTTPS на том же Docker + Traefik стеке.