Seja bem-vindo a um guia detalhado sobre como configurar serviços Docker local com TLS/SSL, aproveitando um proxy reverso HTTPS por meio do Traefik. A falta de tutoriais abrangentes nessa área é um desafio comum, e é por isso que este tutorial foi criado após horas de pesquisa e aplicado com sucesso em um projeto real. Vamos começar!
Existem duas abordagens para seguir este guia. Você pode optar por clonar meu repositório GitHub que contém configurações pré-definidas para os contêineres Traefik, GLPI e Portainer. A segunda opção é realizar a configuração manualmente. Esta última opção oferece uma compreensão mais profunda de todo o processo, permitindo que você crie seu próprio projeto no futuro.
Neste tutorial, você aprenderá como configurar um ambiente local Docker com as seguintes ferramentas:
- GLPI: Um sistema de gerenciamento de ativos de código aberto.
- Portainer: Uma interface de gerenciamento de contêineres Docker.
- Traefik: Um proxy reverso com suporte a SSL para roteamento de tráfego.
A configuração incluirá a utilização de certificados SSL autoassinados para proteger as conexões HTTPS.
Requisitos
- Um servidor Ubuntu 22.
- Acesso ao servidor como superusuário ou com privilégios sudo.
Passo 1: Instalando o Docker
Atualizando a lista de pacotes e Instalando dependências
sudo su - cd /
sudo apt update sudo apt upgrade -y sudo add-apt-repository http://us.archive.ubuntu.com/ubuntu jammy-updates multiverse sudo add-apt-repository http://us.archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse sudo apt install -y lsb-release apt-transport-https ca-certificates curl gnupg software-properties-common -y sudo install -m 0755 -d /etc/apt/keyrings
Adicionando a chave GPG oficial do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Adicionando o repositório Docker
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Instalando o Docker e habilitando para ser iniciado no boot
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker
Passo 2: Instalando o Docker Compose
Vamos agora instalar o Docker Compose para facilitar a criação e gerenciamento de múltiplos contêineres.
Download e Permissões de Execução do Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Verificando a versão do Docker Compose
sudo docker-compose --version
Passo 3: Criar uma Rede para os Contêineres
Crie uma rede para permitir a comunicação entre os contêineres. Isso facilitará a comunicação entre o Traefik, o GLPI e o portainer:
Crie uma rede docker chamada proxy(o nome da rede pode ser qualquer, basta mantê-lo para todos os serviços). Esta rede será comum (externa) para todos os serviços e aplicações que são proxy do Traefik:
sudo docker network create proxy
Passo 4: Gerar Certificados SSL Autoassinados
Agora, crie certificados SSL autoassinados para cada domínio que você deseja configurar (glpi.localhost.local, port.localhost.local, traefik.localhost.local):
bash
Crie um diretório para os certificados SSL
sudo mkdir -p ~/Traefik/ssl_certificates cd ~/Traefik/ssl_certificates
Gere os certificados autoassinados para cada domínio
Agora, crie certificados SSL autoassinados para cada sub-domínio que você deseja configurar (glpi.localhost.local, portainer.localhost.local, traefik.localhost.local):
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -keyout glpi.localhost.local.key -out glpi.localhost.local.crt openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -keyout portainer.localhost.local.key -out portainer.localhost.local.crt openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -keyout traefik.localhost.local.key -out traefik.localhost.local.crt # Siga as instruções interativas e configure os certificados para cada domínio.
Siga as instruções interativas e configure os certificados para cada domínio. No ultimo campo coloque o nome do seu sub-dominio EX: glpi.localhost.local
Adicione certificados gerados e caminhos de chave ao arquivo de configuração
mkdir -p ~/Traefik/conf cd ~/Traefik/conf sudo nano tls_certificates.yml
Adicione e edite tls_certificates.yml na pasta conf.
tls:
certificates:
- certFile: "/etc/traefik/certs/traefik.localhost.local.crt"
keyFile: "/etc/traefik/certs/traefik.localhost.local.key"
- certFile: "/etc/traefik/certs/glpi.localhost.local.crt"
keyFile: "/etc/traefik/certs/glpi.localhost.local.key"
- certFile: "/etc/traefik/certs/portainer.localhost.local.crt"
keyFile: "/etc/traefik/certs/portainer.localhost.local.key"
- Se você usou o domínio ‘glpi.localhost.local’ para certificados autoassinados, não precisa fazer nada, porque esses caminhos já estão no arquivo. Se você usou outro nome de domínio, será necessário alterá-lo pelo nome de cada sub domínio no arquivo )
- Use um DNS ou adicione o nome de domínio do (
glpi.localhost.local) ao arquivohosts(use o IP do localhost) - Abra o arquivo /etc/hosts com o editor de texto preferido e adicione o nome de cada sub-dominio ao ip do servidor ubuntu:
sudo nano /etc/hosts
Passo 5: Configurar o Traefik
Crie um diretório para as configurações do Traefik e crie um arquivo static_conf.yml nele:
cd ~/Traefik sudo nano static_conf.yml
Adicione o seguinte conteúdo ao arquivo static_conf.yml:
# configure logs
log:
level: ERROR # Defina como 'DEBUG' para solução de problemas
# configure entry points
entryPoints:
web:
address: ":80"
http:
redirections: # redirecionamento http para https
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
# configure providers
providers:
docker:
endpoint: "unix:///var/run/docker.sock" # conexão com o daemon docker
exposedByDefault: false # ignore recipientes sem rótulo 'traefik.enable=true'
file:
directory: "/etc/traefik/conf" # diretório para arquivos de configuração dinâmica do traefik
watch: true # as alterações são processadas imediatamente
# configurar serviço de API
api:
dashboard: true # ativar o painel do traefik
Passo 6: Configurar os Containers
Configurando o Traefik
Crie um arquivo docker-compose-traefik.yml para configurar o Traefik com as configurações acima:
cd ~/Traefik nano docker-compose-traefik.yml
Cole o seguinte conteúdo no arquivo:
version: "3.8"
services:
traefik:
networks:
- proxy
image: traefik:v2.5.4
container_name: "local_traefik"
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- "80:80"
- "443:443"
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro # conexão com o daemon do docker para ouvir eventos do docker
- ./ssl_certificates/:/etc/traefik/certs/:ro # Certificados SSL
- ./static_conf.yml:/traefik.yml:ro # configuração estática do traefik
- ./conf/:/etc/traefik/conf/:ro # configuração dinâmica do traefik
labels:
- traefik.enable=true # se for true, o serviço será publicado no traefik
- traefik.http.routers.traefik.entrypoints=websecure # definindo o ponto de entrada, que será utilizado pelo serviço
- traefik.http.routers.traefik.rule=Host(`traefik.localhost.local`) # a regra pela qual a solicitação será encaminhada pelo traefik
- traefik.http.routers.traefik.tls=true # habilitando tls para o roteador
- traefik.http.routers.traefik.service=api@internal # especificando um serviço para o roteador
# - traefik.http.services.traefik-traefik.loadbalancer.server.port=8000 # especificando a porta para a qual a solicitação será roteada (no serviço de destino)
networks:
proxy:
external: true
Configurando o MariaDB
Crie um arquivo docker-compose-mariadb.yml para configurar o MariaDB:
sudo mkdir ~/mariadb_glpi cd ~/mariadb_glpi sudo nano docker-compose-mariadb.yml
Cole o seguinte conteúdo no arquivo docker-compose-mariadb.yml:
version: "3.8"
services:
mariadb:
image: mariadb:10.7
container_name: mariadb_glpi
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=glpidb
- MYSQL_USER=glpiuser
- MYSQL_PASSWORD=123456
volumes:
- /var/lib/mysql:/var/lib/mysql
networks:
- proxy
restart: always
networks:
proxy:
external: true
Configurando o GLPI
Crie um arquivo para configurar o GLPI:docker-compose-glpi.yml
sudo mkdir -p ~/GLPI/glpi_data cd ~/GLPI sudo nano docker-compose-glpi.yml
Cole o seguinte conteúdo no arquivo docker-compose-glpi.yml:
version: "3.8"
services:
glpi:
image: "jonas556440/glpi"
container_name: "glpi"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=glpidb
- MYSQL_USER=glpiuser
- MYSQL_PASSWORD=123456
volumes:
- ./glpi_data:/var/www/html/glpi
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.glpi.rule=Host(`glpi.localhost.local`)
- traefik.http.routers.glpi.tls=true
- traefik.http.routers.glpi.entrypoints=websecure # definindo o ponto de entrada, que será utilizado pelo serviço
- traefik.http.routers.glpi.service=glpi # especificando um serviço para a rota
- traefik.http.services.glpi.loadbalancer.server.port=80 # especificando a porta para a qual a solicitação será roteada (no serviço de destino)
restart: always
networks:
proxy:
external: true
Configurando o Portainer
Crie um arquivo docker-compose-portainer.yml para configurar o Portainer:
sudo mkdir -p ~/Portainer/port_data cd ~/Portainer sudo nano docker-compose-portainer.yml
Cole o seguinte conteúdo no arquivo docker-compose-portainer.yml:
version: "3.8"
services:
portainer:
image: "portainer/portainer"
container_name: "portainer"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./port_data:/data
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.portainer.rule=Host(`portainer.localhost.local`)
- traefik.http.routers.portainer.tls=true
- traefik.http.routers.portainer.entrypoints=websecure # definindo o ponto de entrada, que será utilizado pelo serviço
- traefik.http.routers.portainer.service=portainer # especificando um serviço para a rota
- traefik.http.services.portainer.loadbalancer.server.port=9000 # especificando a porta para a qual a solicitação será roteada (no serviço de destino)
restart: always
networks:
proxy:
external: true
Passo 7: Iniciando os Containers
Para iniciar os containers, use o seguinte comando:
cd ~/ docker-compose -f ~/Traefik/docker-compose-traefik.yml up -d docker-compose -f ~/mariadb_glpi/docker-compose-mariadb.yml up -d docker-compose -f ~/GLPI/docker-compose-glpi.yml up -d docker-compose -f ~/Portainer/docker-compose-portainer.yml up -d
Passo 8: Aponte os dominios para o IP do servidor
Certifique-se de que os domínios que você usará com seus certificados SSL autoassinados sejam direcionados para o IP do servidor onde o Docker e seus contêineres estão sendo executados. Isso pode ser feito de duas maneiras:
Opção 1: Usando um Servidor de DNS Interno
Você pode configurar um servidor DNS interno em sua rede para resolver os nomes de domínio (glpi.localhost.local, port.localhost.local, traefik.localhost.local) para o IP do servidor onde o Docker está sendo executado.
Opção 2: Editando o Arquivo /etc/hosts
Outra maneira é adicionar manualmente os mapeamentos de IP e domínio ao arquivo /etc/hosts do servidor. Você pode fazer isso com o seguinte comando:
sudo nano /etc/hosts
Dentro do arquivo, adicione linhas semelhantes a esta para cada domínio que você deseja configurar:
IP_DO_SERVIDOR glpi.localhost.local IP_DO_SERVIDOR port.localhost.local IP_DO_SERVIDOR traefik.localhost.local
Lembre-se de substituir IP_DO_SERVIDOR pelo endereço IP real do seu servidor onde o Docker está em execução.
Passo 8: Acessando as Aplicações
Agora, você pode acessar as seguintes aplicações:
- GLPI: https://glpi.localhost.local

- Portainer: https://port.localhost.local

- Traefik (painel de controle): https://traefik.localhost.local

Você verá avisos de segurança devido ao uso de certificados autoassinados. Você pode aceitar esses avisos para continuar.
Lembre-se de que os certificados autoassinados não são confiáveis para uso público, mas são úteis em ambientes internos para criptografar a comunicação. Certifique-se de que todos os dispositivos que se conectam às aplicações tenham o certificado raiz correspondente instalado como confiável para evitar avisos de segurança.
Este tutorial abordou a configuração de um ambiente Docker local com Traefik para SSL e o uso de GLPI e Portainer como exemplos de aplicativos. Você pode personalizar esse ambiente conforme necessário para suas próprias necessidades.
Espero que este tutorial seja útil para você e que você possa configurar seu ambiente Docker com Traefik com sucesso. Certifique-se de personalizar as senhas e ajustar as configurações conforme necessário.















Deixe uma resposta
Ver comentários