Tutorial Self-Hosting
Use o Caddy como reverse proxy em um servidor local

Usando o Caddy como proxy reverso local com Docker

Configurar um servidor local geralmente exige uma maneira eficiente de direcionar o tráfego web de entrada para vários contêineres Docker internos. Combinando Caddy e Docker, você pode estabelecer um sistema de proxy reverso limpo e automatizado que lida com o roteamento sem esforço.

Configurando o proxy reverso Caddy

Para começar, organize seus serviços centrais compartilhados em um diretório dedicado no seu servidor. Crie e navegue até o diretório designado para o Caddy executando os seguintes comandos no seu terminal:

mkdir -p /srv/core-and-shared/caddy
cd /srv/core-and-shared/caddy

Em seguida, defina a configuração do seu contêiner. Crie o arquivo compose.yaml dentro do seu diretório /srv/core-and-shared/caddy/ usando seu editor de texto preferido.

/srv/core-and-shared/caddy/compose.yaml:

services:
  caddy:
    image: caddy:2-alpine
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config
    networks:
      - ingress
      - caddy

volumes:
  caddy-data:
  caddy-config:

networks:
  ingress:
    name: ingress
    external: true
  caddy:
    name: caddy

Agora, configure suas regras de roteamento e blocos de servidor. Crie o Caddyfile no mesmo diretório para lidar com solicitações de entrada e mapeá-las para seus serviços locais.

/srv/core-and-shared/caddy/Caddyfile:

http://<domain> {
    respond "Hello World!"
}

Inicie seu contêiner Caddy em modo desacoplado para iniciar o serviço:

docker compose up -d

Verifique se o proxy está respondendo corretamente fazendo uma solicitação HTTP para o seu endpoint configurado:

curl https://<domain>

Integrando túneis do Cloudflare

Se você precisar tornar seus serviços locais acessíveis externamente sem abrir portas de firewall, você pode parear sua configuração com um túnel seguro.

Para aprender como expor com segurança um servidor local à internet usando o Cloudflare Tunnel e o Docker Compose sem encaminhamento de porta ou abertura de portas de firewall, confira o seguinte guia:

Exponha um servidor local com Cloudflare Tunnel

Exponha um servidor local com Cloudflare Tunnel

Aprenda a expor um servidor Linux local à internet usando Cloudflare Tunnel e Docker Compose com instruções passo a passo.

Prepare um diretório separado para a configuração do túnel e configure seu arquivo compose correspondente:

mkdir -p /srv/core-and-shared/cloudflared/
cd /srv/core-and-shared/cloudflared/

/srv/core-and-shared/cloudflared/compose.yaml:

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: unless-stopped
    command: tunnel --no-autoupdate run --token ${TUNNEL_TOKEN} --url http://caddy:80
    networks:
      - ingress

networks:
  ingress:
    name: ingress
    external: true

Inicie o túnel usando o Docker Compose:

curl https://<domain>

Para explorar estratégias alternativas de implantação de proxy e técnicas de endurecimento para ambientes de produção, leia este tutorial relacionado:

Proteja serviços Docker com Caddy em uma VPS

Proteja serviços Docker com Caddy em uma VPS

Aprenda a proteger serviços Docker em uma VPS usando Caddy como proxy reverso, redes Docker externas, Caddyfiles customizados e túneis Cloudflare opcionalmente.