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