ymmooot

minio の public アクセスを有効化する

サービスでは S3 に画像を置き、CDN 経由で配信している。画像へのアクセスは CDN からのものにのみ許可をしている。
ローカルの開発では S3 の代わりに minio のコンテナを立てて代用しているが、ローカルに CDN の代替を用意していないので、minio から直接ブラウザで画像を見れるようにする。

docker-compose.ymlversion: '3'
services:
  minio:
    image: minio/minio:latest
    environment:
      - MINIO_ACCESS_KEY=MINIO_ACCESS_KEY
      - MINIO_SECRET_KEY=MINIO_SECRET_KEY
      - MINIO_BUCKET_NAME=mybucket
    ports:
      - 9000:9000
    entrypoint: sh
    command: -c 'mkdir -p /data/$$MINIO_BUCKET_NAME && /usr/bin/minio server /data'
  mc:
    image: minio/mc:latest
    depends_on:
      - minio
    entrypoint: sh
    command: -c 'mc config host add myminio http://minio:9000 MINIO_ACCESS_KEY MINIO_SECRET_KEY && mc policy set public myminio/mybucket'

これで docker-compose up すれば、minio が起動した後にバケットごと public にできる。

2023/02/01 追記

この記事にアクセスしてくれる人が結構いるようなので、現状のバージョンに対応したバージョンを載せておきます。

docker-compose.ymlservices:
  minio:
    image: minio/minio:latest
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    ports:
      - 9000:9000
      - 9001:9001
    volumes:
      - ./.minio-storage/:/storage
    command: ['server', '/storage', '--console-address', ':9001']
  mc:
    image: minio/mc:latest
    depends_on:
      - minio
    environment:
      MINIO_ROOT_USER: "minioadmin"
      MINIO_ROOT_PASSWORD: "minioadmin"
    entrypoint: >
      /bin/sh -c "
      mc alias set myminio http://minio:9000 minioadmin minioadmin;
      mc mb myminio/local-minio;
      mc anonymous set public myminio/local-minio;
      "