前言
因minio社区版v2.0.0更新摈弃掉了ui的一大堆功能,github中changelog描述为”Community version is going back to be an object browser only“。其次minio管理面板的license中将Intended Use描述为Test and Dev Use,且官方推荐做法是用户管理等操作使用mc命令,此处引用terrytw@reddit的一句话:”This feels like a redis moment for them. How much value do they think they can extract from the whole 5 additional users who switched to their paid version because of this?“
同时,官方的一些所作所为让我感觉minio对个人用户可能并不关心,具体如下:
此时,发现了开源的Garage,在此记录一下相关配置过程
配置过程
编辑docker-compose.yaml文件
networks:
storage_net_internal:
internal: true
services:
garage:
image: dxflrs/garage:v1.1.0
container_name: garage
hostname: "garage"
environment:
TZ: Asia/Shanghai
volumes:
- ./garage/config/garage.toml:/etc/garage.toml
- ./data:/var/lib/garage/data
- ./garage/meta:/var/lib/garage/meta
networks:
- storage_net_internal
restart: always
garage-webui:
image: khairul169/garage-webui:latest
container_name: garage-webui
restart: unless-stopped
volumes:
- ./garage/config/garage.toml:/etc/garage.toml:ro
environment:
API_BASE_URL: "http://garage:3903"
S3_ENDPOINT_URL: "http://garage:3900"
networks:
- storage_net_internal
nginx:
image: nginx:latest
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/log:/var/log/nginx
- ./nginx/ssl:/etc/nginx/ssl
depends_on:
- garage
networks:
- storage_net_internal
- default
restart: always
创建garage.toml配置文件
注意:配置文件中的demo.com请按需修改
cat > ./garage/config/garage.toml <<EOF
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "lmdb"
replication_mode = "none"
compression_level = 1
rpc_bind_addr = "0.0.0.0:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "$(openssl rand -hex 32)"
[s3_api]
s3_region = "garage"
api_bind_addr = "0.0.0.0:3900"
root_domain = "s3.demo.com"
[s3_web]
bind_addr = "0.0.0.0:3902"
root_domain = "s3.demo.com"
index = "index.html"
[admin]
api_bind_addr = "0.0.0.0:3903"
metrics_token = "$(openssl rand -hex 32)"
admin_token = "$(openssl rand -hex 32)"
EOF
编辑nginx配置文件
注意:配置文件中的demo.com请按需修改,并保存到./nginx/conf.d/<CONF FILE NAME>.conf
server {
listen 80;
server_name s3.demo.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name s3.demo.com;
ssl_certificate /etc/nginx/ssl/demo.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/demo.com/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
location / {
proxy_pass http://garage:3900;
}
}
# webui不需要鉴权,建议不对外
server {
listen 443 ssl;
server_name s3-manage.demo.com;
ssl_certificate /etc/nginx/ssl/demo.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/demo.com/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
location / {
proxy_pass http://garage-webui:3909;
}
}
启动Garage服务
docker compose up -d
创建集群布局
注:详见官方文档,单节点也需要创建
查看Garage节点id
docker compose exec -it garage /garage status
创建集群布局
docker compose exec -it garage /garage layout assign -z dc1 -c 600G <node_id>
应用集群布局
docker compose exec -it garage /garage layout apply --version 1
后记
至此,你的garage已经可以通过webui进行配置存储桶、密钥等,开始使用吧!