DEV Community

Cover image for Minio + Traefik + TSL/SSL
Pedro Stéfano
Pedro Stéfano

Posted on

Minio + Traefik + TSL/SSL

Hoje vamos abordar um pouco sobre hospedagem de arquivos.
Atualmente no mercado temos a AWS s3 sendo um das principais ferramentas para armazenamento de arquivo em nuvem no merco, para não dizer a principal. Suas especificações de API meio que se tornou um padrão implícito para esse tipo de serviço na web. Contudo por motivos diversos podemos ter casos em que é necessário ter um serviço similar em nossa própria infra seja por motivos técnicos ou outros.
Para atender essa necessidade vamos utilizar o Minio ele funcionar como um serviço s3 sendo em suas especificações muito parecido com o mesmo e podendo ate mesmo usar a S3 ou serviços similares como um tier de armazenamento, além de serviço de cache, servidores com multi região e etc. Farei uma abordagem de instalação básica.

Para começarmos é necessário ter o Traefik já instalado.
O pulo do gato esta em extrair do acme.json. As chaves publicas e privadas necessárias para que possamos estabelecer conexão segura com o servidor do min.io . Para isso é necessário utilizar um serviço para extrair as mesmas. No docker-compose adonaremos o seguinte serviço.

 traefik-certs-dumper: container_name: "traefik-dumpcerts" restart: "always" image: ldez/traefik-certs-dumper:v2.8.1 entrypoint: sh -c ' apk add jq ; while ! [ -e /acme.json ] || ! [ `jq ".[] | .Certificates | length" /acme.json` != 0 ]; do sleep 1 ; done && traefik-certs-dumper file --version v2 --watch --source /acme.json --dest /data' volumes: - "/opt/traefik/acme.json:/acme.json" - "/opt/traefik/data:/data" 
Enter fullscreen mode Exit fullscreen mode

Com isso, ele vai extrair as chaves .crt e .key dos domínios contidos em acme.json
Feito isso vamos subir o serviço do min.io, para maiores informações consulte a documentação oficial. Nesse exemplo vamos subir um onico contêiner com dois discos para armazenamento dos dados sendo considerado data1-1 e data1-2 montado na raiz do mesmo. link do arquivo para consulta.

version: '3.7' networks: traefik: name: traefik external: true volumes: data1-1: name: data1-1 driver: local data1-2: name: data1-2 driver: local services: minio1: restart: always image: quay.io/minio/minio container_name: minio command: server --console-address ":80" http://minio/data{1...2} volumes: - data1-1:/data1 - data1-2:/data2 - "/opt/traefik/data/private:/.minio/certs:ro" environment: MINIO_DOMAIN: DOMINIO.COM.BR MINIO_SERVER_URL: https://s3.DOMINIO.COM.BR MINIO_BROWSER_REDIRECT_URL: http://console.s3.DOMINIO.COM.BR CONSOLE_SECURE_TLS_REDIRECT: off MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin labels: # console - "traefik.http.routers.minio.rule=Host(`console.s3.DOMINIO.COM.BR`)" - "traefik.http.routers.minio.entrypoints=websecure" - "traefik.http.routers.minio.tls=true" - "traefik.http.routers.minio.tls.certresolver=letsencrypt" - "traefik.http.services.minio.loadbalancer.server.port=80" - "traefik.http.routers.minio.service=minio" # Api - "traefik.http.routers.minio-api.rule=Host(`s3.DOMINIO.COM.BR`)" - "traefik.http.routers.minio-api.entrypoints=websecure" - "traefik.http.routers.minio-api.tls=true" - "traefik.http.routers.minio-api.tls.certresolver=letsencrypt" - "traefik.http.services.minio-api.loadbalancer.server.port=9000" - "traefik.http.routers.minio-api.service=minio-api" - "traefik.frontend.passHostHeader=true" - "traefik.enable=true" networks: - traefik 
Enter fullscreen mode Exit fullscreen mode

Algumas observações.

Verifique as variáveis de usuário inicial. Apos o primeiro login, recomendo a criação de um novo usuário e a rotação do nome e senha do usuário.


MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin

O serviço possui dois domínios, um para fornecimento dos arquivos e outro para acesso ao console de administração.
Caso não esteja conseguindo acessar o console (usuário e senha invalido) desative o redirecionamento do TLS.

`
MINIO_DOMAIN: DOMINIO.COM.BR
MINIO_SERVER_URL: https://s3.DOMINIO.COM.BR
MINIO_BROWSER_REDIRECT_URL: http://console.s3.DOMINIO.COM.BR
CONSOLE_SECURE_TLS_REDIRECT: off

`

Top comments (0)