.test Como Criar Domínios e Sub Dominios no Ubuntu Docker🐳

.test Como Criar Domínios e Sub Dominios no Ubuntu Docker

Gerencie Múltiplos Projetos Docker com Domínios .test de Forma Simples e Dinâmica

Se você trabalha com Docker e gerencia vários projetos locais, provavelmente já se cansou de editar o arquivo /etc/hosts toda vez que precisa de um novo domínio. A boa notícia é que existe uma maneira muito mais inteligente e eficiente de fazer isso: configurando um DNS local e um reverse proxy dinâmico.

Neste tutorial, vamos mostrar como você pode resolver qualquer domínio .test para o seu ambiente de desenvolvimento e, em seguida, usar um proxy dinâmico para rotear as requisições para os containers certos. Isso vai automatizar todo o processo e liberar você para focar no que realmente importa: o código.


Passo 1: Resolvendo Domínios .test para 127.0.0.1

O primeiro passo é garantir que seu sistema operacional saiba para onde enviar as requisições de qualquer domínio que termine em .test. O jeito mais simples de fazer isso no Ubuntu é usando o dnsmasq, um servidor DNS leve e fácil de configurar.

1. Instale o dnsmasq:

Abra o terminal e execute o seguinte comando:

Bash

sudo apt install dnsmasq

2. Crie a configuração para .test:

Agora, vamos criar um arquivo de configuração que instrui o dnsmasq a redirecionar todos os domínios .test para o endereço local 127.0.0.1.

Bash

echo "address=/.test/127.0.0.1" | sudo tee /etc/dnsmasq.d/test.conf

3. Reinicie o serviço:

Para que as novas configurações entrem em vigor, reinicie o dnsmasq:

Bash

sudo systemctl restart dnsmasq

4. Verifique a configuração:

Para confirmar que tudo está funcionando, abra o terminal e tente dar um ping em algum domínio .test qualquer. Se a resposta for do 127.0.0.1, deu tudo certo!

Bash

ping meuprojeto.test
ping api.minha.aplicacao.test

Passo 2: Reverse Proxy Dinâmico com Docker

Com o DNS local resolvido, o próximo passo é usar um reverse proxy dinâmico dentro do Docker. Esse proxy “escuta” o tráfego na porta 80 e, com base no domínio que a requisição está tentando acessar, a encaminha para o container correto. Existem duas ótimas opções para isso: Traefik e nginx-proxy.

Opção A: Traefik (Recomendado)

O Traefik é um reverse proxy moderno, com recursos robustos e um painel de controle interativo. Ele se integra nativamente ao Docker e detecta novos containers automaticamente com base em labels que você define.

1. Crie uma rede de proxy externa:

É uma boa prática criar uma rede exclusiva para o proxy.

Bash

docker network create proxy

2. Adicione o Traefik ao seu docker-compose.yml:

No seu arquivo docker-compose.yml, adicione o serviço do Traefik. Certifique-se de que ele esteja na rede proxy.

YAML

services:
  traefik:
    image: traefik:v3.1
    container_name: traefik
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8081:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - proxy

networks:
  proxy:
    external: true

O api.insecure=true é para habilitar o painel do Traefik, que será acessível na porta 8081 (http://localhost:8081), ideal para ambientes de desenvolvimento.

3. Adicione labels aos seus projetos:

Agora, para cada projeto que você subir, basta adicionar as labels de configuração do Traefik. Elas dizem ao Traefik qual domínio o container deve responder e para qual porta ele deve encaminhar o tráfego.

YAML

services:
  laravel:
    build: ./backend
    container_name: laravel_app
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.laravel.rule=Host(`laravel.test`)"
      - "traefik.http.services.laravel.loadbalancer.server.port=80"
  
  api:
    build: ./backend
    container_name: laravel_api
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=Host(`api.laravel.test`)"
      - "traefik.http.services.api.loadbalancer.server.port=80"

Com essa configuração, o Traefik irá rotear as requisições:

  • http://laravel.test para o container laravel_app
  • http://api.laravel.test para o container laravel_api

Opção B: nginx-proxy (Mais Simples)

O nginx-proxy é uma alternativa mais leve e fácil de usar. Ele também se conecta ao socket do Docker e configura um proxy reverso para os seus containers, mas usa uma variável de ambiente chamada VIRTUAL_HOST.

1. Crie a rede de proxy externa:

Se ainda não a criou, execute:

Bash

docker network create proxy

2. Adicione o nginx-proxy ao seu docker-compose.yml:

YAML

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx_proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy

networks:
  proxy:
    external: true

3. Defina a variável VIRTUAL_HOST nos seus projetos:

Para cada container, basta adicionar a variável de ambiente VIRTUAL_HOST com o domínio que você deseja usar.

YAML

services:
  laravel:
    build: ./backend
    container_name: laravel_app
    environment:
      - VIRTUAL_HOST=laravel.test
    networks:
      - proxy

  api:
    build: ./backend
    container_name: laravel_api
    environment:
      - VIRTUAL_HOST=api.laravel.test
    networks:
      - proxy

O nginx-proxy irá detectar a variável e configurar o roteamento automaticamente. Simples assim!


Resumo

  • dnsmasq: Resolve qualquer domínio .test para 127.0.0.1 em nível de sistema.
  • Traefik: Reverse proxy dinâmico e moderno, ideal para quem precisa de mais recursos como painel de controle e suporte a HTTPS em ambiente de desenvolvimento.
  • nginx-proxy: Alternativa mais simples e leve, perfeita para quem busca uma solução rápida e sem complicações.

Com essa configuração, você nunca mais precisará tocar no arquivo /etc/hosts para gerenciar seus projetos locais. O fluxo de trabalho se torna muito mais ágil e organizado.