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"
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
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)