サービスでは 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;
"