- MinIO Quickstart Guide
- MinIO Docker 快速入门
- Minio纠删码快速入门
- 分布式MinIO快速入门
- 使用MinIO分解的HDP Spark和Hive
- 使用TLS安全的访问Minio服务
- MinIO存储桶通知指南
- MinIO Server config.json (v18) 指南
- MinIO多租户(Multi-tenant)部署指南
- MinIO Azure 网关
- MinIO GCS 网关
- MinIO NAS网关
- MinIO S3网关
- MinIO HDFS网关
- 磁盘缓存快速入门
- 如何使用Prometheus监控MinIO服务器
- Federation 快速入门指南
- KMS指南
- 选择API快速入门指南
- 压缩指南
- MinIO多用户快速入门指南
- MinIO STS快速入门指南
- MinIO部署快速入门
- 使用Docker Swarm部署MinIO
- 使用Kubernetes部署MinIO
- 使用Docker Compose部署MinIO
- MinIO客户端快速入门指南
- MinIO Client完全指南
- MinIO管理员完整指南
- 适用于Amazon S3兼容云存储的Minio JavaScript Library
- JavaScript Client API参考文档
- 适用于与Amazon S3兼容的云存储的MinIO Java SDK
- Java Client API参考文档
- 适用于与Amazon S3兼容的云存储的MinIO Python Library
- Python Client API文档
- 适用于与Amazon S3兼容云存储的MinIO Go SDK
- MinIO Go Client API文档
- 适用于与Amazon S3兼容的云存储的MinIO .NET SDK
- .NET Client API参考文档
- 用于Haskell的MinIO Client SDK
- MinIO Haskell SDK API参考
- 使用S3cmd操作MinIO Server
- 使用AWS CLI结合MinIO Server
- restic结合MinIO Server
- 将MySQL备份存储到MinIO Server
- 将MongoDB备份存储到MinIO Server
- 将PostgreSQL备份存储到MinIO Server
- 为MinIO Server设置Caddy proxy
- 为MinIO Server设置Nginx代理
- 使用fluentd插件聚合Apache日志
- Rclone结合MinIO Server
- 结合MinIO运行Deis Workflow
- 为MinIO Server设置Apache HTTP proxy
- 使用pre-signed URLs通过浏览器上传
- 如何在FreeNAS中运行MinIO
- 如何使用Cyberduck结合MinIO
- 如何使用AWS SDK for PHP操作MinIO Server
- 如何使用AWS SDK for Ruby操作MinIO Server
- 如何使用AWS SDK for Python操作MinIO Server
- 如何使用Mountain Duck结合MinIO
- 如何使用AWS SDK for Javascript操作MinIO Server
- 如何使用Træfɪk代理多个MinIO服务
- 如何使用AWS SDK for Go操作MinIO Server
- 如何使用AWS SDK for Java操作MinIO Server
- 如何使用Paperclip操作MinIO Server
- 如何使用AWS SDK for .NET操作MinIO Server
- 如何使用aws-cli调用MinIO服务端加密
如何使用Træfɪk代理多个MinIO服务
Træfɪk是一个用Go语言写的先进(和流行技术结合的比较好)的反向代理。它支持多种配置方式,本文将介绍如何通过Docker设置多个MinIO实例,并用Træfɪk可实现通过不同的子域名进行访问。
1. 前提条件
已经安装Docker并运行, 如果没有参考安装说明.
2. 步骤
获取,配置和启动Træfɪk
首先你应该为Træfɪk创建一个配置文件来启用Let's Encrypt并配置Docker后端。通过HTTP获取请求自动重定向到HTTPS,证书通过集成的Let's Encrypt进行创建。
cat << EOF > traefik.toml
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[acme]
email = "your@email.com"
storageFile = "/etc/traefik/acme.json"
entryPoint = "https"
onDemand = true
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "example.com"
watch = true
EOF
除了上面的配置之外,我们还需要touch一下acme.json
,这个文件存了生成的证书,同时也存着私钥,所以你需要设置好权限,别让所有人都能访问这个文件。
touch acme.json
chmod 640 acme.json
经过上述步骤,我们已经准备好了一个可以代理请求的Træfɪk容器。
docker run -d \
--restart always \
--name traefik \
--publish 80:80 \
--publish 443:443 \
--volume $(pwd)/traefik.toml:/etc/traefik/traefik.toml \
--volume $(pwd)/acme.json:/etc/traefik/adme.json \
--volume /var/run/docker.sock:/var/run/docker.sock \
traefik
获取,配置和启动MinIO
现在咱们可以准备多个MinIO的实例,来演示一个多租户场景的解决方案。你可以启动多个MinIO实例,让Træfɪk基于不同的凭据信息来进行路由。
我们将从宿主机上启动多个带有挂载卷的MinIO实例。如果你更喜欢data containers,请参考MinIO Docker 快速入门.
for i in $(seq 1 5); do
mkdir -p $(pwd)/minio${i}/{export,config}
docker run -d \
--restart always \
--name minio-${i} \
--volume $(pwd)/minio${i}/config:/root/.minio \
--volume $(pwd)/minio${i}/export:/export \
minio/minio
done
测试启动的实例
你可以用curl来测试启动的实例,这样你就可以确认实例是否启动正确。
curl -H Host:minio-1.example.com http://127.0.0.1
这个请求会获得下面的输出信息,因为没有认证,不过你可以看到确实是正确启动了。
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied.</Message><Key></Key><BucketName></BucketName><Resource>/</Resource><RequestId>3L137</RequestId><HostId>3L137</HostId></Error>
现在你可以通过https://minio-{1,2,3,4,5}.example.com
来访问所有的MinIO实例。
最后我想多说一句,你应该用你操作系统的init system来启支MinIO的Docker容器。做为示例,你可以看到我是如何使用systemd service来启动新的MinIO实例。就是把这个文件存成/etc/systemd/system/minio@.service
,并且用systemctl start minio@server1
来启动新的实例,然后这个实例就可以通过server1.example.com
来访问了,诸如此类。
[Unit]
Description=MinIO: %i
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStop=/bin/sh -c '/usr/bin/docker ps | /usr/bin/grep %p-%i 1> /dev/null && /usr/bin/docker stop %p-%i || true'
ExecStartPre=/bin/sh -c '/usr/bin/docker ps | /usr/bin/grep %p-%i 1> /dev/null && /usr/bin/docker kill %p-%i || true'
ExecStartPre=/bin/sh -c '/usr/bin/docker ps -a | /usr/bin/grep %p-%i 1> /dev/null && /usr/bin/docker rm %p-%i || true'
ExecStartPre=/usr/bin/docker pull minio/minio:latest
ExecStart=/usr/bin/docker run --rm \
--name %p-%i \
--volume /storage/%p/%i/files:/export \
--volume /storage/%p/%i/config:/root/.minio \
--label traefik.frontend.rule=Host:%i.example.com \
--label traefik.frontend.passHostHeader=true \
minio/minio:latest
[Install]
WantedBy=multi-user.target
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论