126 lines
4.3 KiB
YAML
126 lines
4.3 KiB
YAML
# =============================================================================
|
|
# MinIO Object Storage - Docker Compose
|
|
# =============================================================================
|
|
#
|
|
# MinIO 是一个高性能的分布式对象存储系统,兼容 Amazon S3 API
|
|
#
|
|
# 用途:
|
|
# - 用户头像存储
|
|
# - 用户文档存储
|
|
# - 应用资源文件存储
|
|
# - 备份文件存储
|
|
#
|
|
# 使用方法:
|
|
# ./deploy.sh up # 启动 MinIO
|
|
# ./deploy.sh down # 停止 MinIO
|
|
# ./deploy.sh status # 查看状态
|
|
# ./deploy.sh logs # 查看日志
|
|
# ./deploy.sh create-bucket <name> # 创建存储桶
|
|
#
|
|
# 访问地址:
|
|
# API: http://localhost:9000
|
|
# Console: http://localhost:9001
|
|
#
|
|
# =============================================================================
|
|
|
|
services:
|
|
# ===========================================================================
|
|
# MinIO Object Storage
|
|
# ===========================================================================
|
|
minio:
|
|
image: docker.io/minio/minio:RELEASE.2024-11-07T00-52-20Z
|
|
container_name: rwa-minio
|
|
command: server /data --console-address ":9001"
|
|
environment:
|
|
TZ: Asia/Shanghai
|
|
# 管理员凭证
|
|
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-admin}
|
|
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minio_secret_password}
|
|
# 服务器配置
|
|
MINIO_BROWSER: "on"
|
|
MINIO_BROWSER_REDIRECT_URL: ${MINIO_CONSOLE_URL:-http://localhost:9001}
|
|
# 区域设置
|
|
MINIO_REGION: ${MINIO_REGION:-cn-east-1}
|
|
# 性能优化
|
|
MINIO_API_REQUESTS_DEADLINE: 10s
|
|
MINIO_API_REQUESTS_MAX: 10000
|
|
ports:
|
|
- "${MINIO_API_PORT:-9000}:9000" # S3 API
|
|
- "${MINIO_CONSOLE_PORT:-9001}:9001" # Web Console
|
|
volumes:
|
|
- minio_data:/data
|
|
healthcheck:
|
|
test: ["CMD", "mc", "ready", "local"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 30s
|
|
restart: unless-stopped
|
|
networks:
|
|
- rwa-minio
|
|
|
|
# ===========================================================================
|
|
# MinIO Client (mc) - 初始化配置
|
|
# ===========================================================================
|
|
# 用于创建默认存储桶和配置访问策略
|
|
# ===========================================================================
|
|
minio-init:
|
|
image: docker.io/minio/mc:RELEASE.2024-11-05T11-29-45Z
|
|
container_name: rwa-minio-init
|
|
depends_on:
|
|
minio:
|
|
condition: service_healthy
|
|
environment:
|
|
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-admin}
|
|
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minio_secret_password}
|
|
# 存储桶配置
|
|
BUCKET_AVATARS: ${BUCKET_AVATARS:-avatars}
|
|
BUCKET_DOCUMENTS: ${BUCKET_DOCUMENTS:-documents}
|
|
BUCKET_RESOURCES: ${BUCKET_RESOURCES:-resources}
|
|
BUCKET_BACKUPS: ${BUCKET_BACKUPS:-backups}
|
|
entrypoint: >
|
|
/bin/sh -c "
|
|
echo 'Waiting for MinIO to be ready...';
|
|
sleep 5;
|
|
|
|
echo 'Configuring MinIO client...';
|
|
mc alias set rwa http://minio:9000 $${MINIO_ROOT_USER} $${MINIO_ROOT_PASSWORD};
|
|
|
|
echo 'Creating buckets...';
|
|
mc mb --ignore-existing rwa/$${BUCKET_AVATARS};
|
|
mc mb --ignore-existing rwa/$${BUCKET_DOCUMENTS};
|
|
mc mb --ignore-existing rwa/$${BUCKET_RESOURCES};
|
|
mc mb --ignore-existing rwa/$${BUCKET_BACKUPS};
|
|
|
|
echo 'Setting bucket policies...';
|
|
mc anonymous set download rwa/$${BUCKET_AVATARS};
|
|
mc anonymous set download rwa/$${BUCKET_RESOURCES};
|
|
|
|
echo 'Setting lifecycle rules for avatars (keep versions for 30 days)...';
|
|
mc ilm rule add --noncurrent-expire-days 30 rwa/$${BUCKET_AVATARS} || true;
|
|
|
|
echo 'MinIO initialization complete!';
|
|
mc admin info rwa;
|
|
"
|
|
networks:
|
|
- rwa-minio
|
|
|
|
# =============================================================================
|
|
# Volumes - 持久化存储
|
|
# =============================================================================
|
|
volumes:
|
|
minio_data:
|
|
driver: local
|
|
driver_opts:
|
|
type: none
|
|
o: bind
|
|
device: ${MINIO_DATA_PATH:-/data/minio}
|
|
|
|
# =============================================================================
|
|
# Networks
|
|
# =============================================================================
|
|
networks:
|
|
rwa-minio:
|
|
driver: bridge
|
|
name: rwa-minio
|