How to run multiple MinIO servers with Træfɪk
Træfɪk를 사용하여 여러 MinIO 서버를 실행하는 방법
Træfɪk is a modern reverse proxy also written in Go.
Træfɪk는 Go로 작성된 최신 역방향 프록시입니다.
It supports multiple ways to get configured, this cookbook will explain how you can setup multiple MinIO instances via Docker which you can access on different sub-domains through Træfɪk.
다양한 구성 방법을 지원합니다. 이 요리책에서는 Træfək를 통해 다양한 하위 도메인에 액세스할 수 있는 Docker를 통해 여러 MinIO 인스턴스를 설정하는 방법을 설명합니다.
1. Prerequisites
1. 전제조건
You have Docker installed and running, if not follow install instructions.
설치 지침을 따르지 않는 경우 Docker가 설치되어 실행 중입니다.
2. Steps
2. 단계
Fetch, configure and launch Træfɪk
Træfɪk 가져오기, 구성 및 실행
First of all you should create a configuration file for Træfɪk to enable Let's Encrypt and to configure the Docker backend.
먼저 Let's Encrypt를 활성화하고 Docker 백엔드를 구성하려면 Træfɪk에 대한 구성 파일을 생성해야 합니다.
Incoming traffic via HTTP gets automatically redirected to HTTPS and the certificates are getting created on demand by the integrated Let's Encrypt support.
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
Beside the configuration we should also touch the acme.json file, this file is the storage for the generated certificates.
구성 외에도 acme.json 파일도 터치해야 합니다. 이 파일은 생성된 인증서를 위한 저장소입니다.
This file will also store the private keys, so you should set proper permissions to make sure not everybody can read the configuration.
이 파일은 개인 키도 저장하므로 모든 사람이 구성을 읽을 수 없도록 적절한 권한을 설정해야 합니다.
touch acme.json
chmod 640 acme.json
With those steps we are prepared to launch a Træfɪk container which proxies the incoming traffic.
이러한 단계를 통해 우리는 들어오는 트래픽을 프록시하는 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/acme.json \
--volume /var/run/docker.sock:/var/run/docker.sock \
traefik
Fetch, configure and launch MinIO
MinIO 가져오기, 구성 및 실행
Now it's time to prepare multiple instances of MinIO to demonstrate a multi-tenant solution.
이제 다중 테넌트 솔루션을 시연하기 위해 MinIO의 여러 인스턴스를 준비할 차례입니다.
That way you are able to launch multiple MinIO instances with different credentials that get routed automatically by Træfɪk.
이렇게 하면 Træfɪk에 의해 자동으로 라우팅되는 다양한 자격 증명을 사용하여 여러 MinIO 인스턴스를 시작할 수 있습니다.
We will launch the MinIO instances with volume mounts from the host system.
호스트 시스템에서 볼륨 마운트를 사용하여 MinIO 인스턴스를 시작합니다.
If you prefer data containers please take a look at the MinIO Docker quickstart guide.
데이터 컨테이너를 선호한다면 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
Test launched instances
시작된 인스턴스를 테스트
To test the launched instances you can take curl, that way you can verify that the instances are really launched correctly.
시작된 인스턴스를 테스트하려면 컬을 사용하여 다음을 확인할 수 있습니다.
curl -H Host:minio-1.example.com http://127.0.0.1
This call will result in the following output because the request had been unauthenticated, but you can see that it finally have been correctly launched.
요청이 인증되지 않았기 때문에 이 호출을 수행하면 다음과 같은 출력이 발생하지만 마침내 올바르게 실행되었음을 확인할 수 있습니다.
AccessDenied
Access Denied. / 3L137 3L137
Now you can reach all the launched MinIO instances via https://minio-{1,2,3,4,5}.example.com
이제 https://minio-{1,2,3,4,5}.example.com을 통해 시작된 모든 MinIO 인스턴스에 접근할 수 있습니다.
As a final note I would like to mention that you should start the Docker containers with the init system of your operating system.
마지막으로 운영 체제의 init 시스템으로 Docker 컨테이너를 시작해야 한다는 점을 말씀드리고 싶습니다.
As an example you can see an example for a systemd service file how I'm launching new MinIO instances.
예를 들어 새로운 MinIO 인스턴스를 시작하는 방법에 대한 시스템 서비스 파일의 예를 볼 수 있습니다.
Just store this file as /etc/systemd/system/minio@.service and start new instances with systemctl start minio@server1, systemctl start minio@server2, systemctl start minio@server3 and the instances will be available at server1.example.com and so on.
이 파일을 /etc/systemd/system/minio@.service로 저장하고 systemctl start minio@ server1, systemctl start minio@ server2, systemctl start minio@ server3을 사용하여 새 인스턴스를 시작하면 해당 인스턴스는 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