Neste guia, eu vou mostrar como configurar o Caddy junto com o Cloudflare Tunnel, usando o Docker e o Cloudflared. O Caddy é um servidor web e proxy reverso de código aberto, que usa HTTPS por padrão e facilita a configuração de sites e serviços. O Cloudflare Tunnel é um recurso que permite que você crie um túnel seguro entre o seu servidor e a rede da Cloudflare, sem expor o seu IP ou abrir portas no seu firewall.
O objetivo deste guia é permitir que você acesse o seu site ou serviço através de um domínio da Cloudflare, usando o Caddy como proxy reverso e o Cloudflare Tunnel como camada de segurança.
Índice
Requisitos
- Uma conta da Cloudflare e um domínio registrado na Cloudflare. (pode ser a conta gratuita)
- Um servidor com o Docker e o Docker Compose instalados .
Preparando os certificados na Cloudflare
O primeiro passo é criar um certificado de origem no site da Cloudflare, que será utilizado pelo Caddy para estabelecer uma conexão HTTPS com o Cloudflare Tunnel. Para isso, siga as etapas abaixo:
Acesse o painel da Cloudflare e selecione o seu domínio. Navegue até a seção SSL/TLS e clique em Origem.
Clique em ‘Criar Certificado’ e selecione as opções desejadas.
Clique em ‘Avançar’ e copie o certificado e a chave privada gerados. Salve os certificados com os nomes cert.pem e key.key
Cloudflare: Criando um Tunel
O próximo passo é configurar um túnel no site da Cloudflare, o que permitirá o acesso ao seu site ou serviço por meio de um domínio da Cloudflare, usando o Cloudflare Tunnel como camada de segurança. Para isso, siga estes passos:
Navegue até a seção Zero Trust no site da Cloudflare.
Clicar em Networks e clicar em Criar túnel.
Digite um nome para o seu túnel e clique em Criar.
Em sistema operacional clique em docker.
Copie o comando que aparece a única coisa que vamos precisar desse comando é o token.
Caddy: Configuração
Precisamos criar um arquivo docker-compose que vai definir os serviços do Caddy e do Cloudflared
Estrutura dos arquivos e Diretórios
/mnt/dockerapp
├── caddy
│ ├── certs
│ │ ├── cert.pem
│ │ └── key.key
│ ├── container-config
│ │ ├── Caddyfile
│ │ ├── whoami.caddy
├── docker-compose.yaml
Criando os diretórios
sudo mkdir -p /mnt/dockerapp/caddy
sudo mkdir -p /mnt/dockerapp/caddy/container-config/
sudo mkdir -p /mnt/dockerapp/caddy/certs/
Vamos precisar criar uma rede de comunicação para o Caddy com o nome ‘proxy’ execute o comando abaixo:
sudo docker network create --driver bridge proxy
Copiar os certificados da Cloudflare
Copie o conteúdo dos certificados gerados na Cloudflare para o diretório /certs usando os comandos abaixo:
sudo nano /mnt/dockerapp/caddy/certs/cert.pem
Copie e cole o conteúdo do arquivo ‘cert.pem’, salve e saia.
Repita o processo agora para o arquivo key.key
sudo nano /mnt/dockerapp/caddy/certs/key.key
Altere as permissões dos certificados.
sudo chmod 600 /mnt/dockerapp/caddy/certs/*
Criando um Caddyfile
No arquivo de configuração do Caddy, vamos incluir o caminho para os certificados, proteger os cabeçalhos e importar arquivos de configuração.
sudo nano /mnt/dockerapp/caddy/container-config/Caddyfile
Caddyfile
(trusted_proxy_list) {
## Uncomment & adjust the following line to configure specific ranges which should be considered as trustworthy.
trusted_proxies 10.0.0.0/8 172.16.0.0/16 192.168.0.0/16 fc00::/7
}
(cert_origem) {
tls /etc/ssl/certs/cert.pem /etc/ssl/certs/key.key
}
(headers) {
header {
Strict-Transport-Security max-age=31536000;
X-Content-Type-Options nosniff
X-Frame-Options DENY
Referrer-Policy no-referrer-when-downgrade
X-XSS-Protection 1
}
}
import *.caddy
Também vamos criar um arquivo para uma aplicação de teste usando o Whoami.
siga o comando abaixo:
sudo nano /mnt/dockerapp/caddy/container-config/whoami.caddy
whoami.seudominio.com {
tls /etc/ssl/certs/cert.pem /etc/ssl/certs/key.key
reverse_proxy whoami:80
}
Criando o arquivo Docker Compose
Com os arquivos de configuração já criados, podemos prosseguir para a etapa de criação do arquivo que gerará as imagens.
Crie o arquivo docker-compose.yaml
sudo nano /mnt/dockerapp/caddy/docker-compose.yaml
docker-compose.yaml
---
version: "3.9"
services:
tunnel:
container_name: cloudflared-tunnel
image: cloudflare/cloudflared
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN= seutoken
networks:
- cloudflare
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
networks:
- cloudflare
- proxy
security_opt:
- label:disable
ports:
- 7280:80
- 5443:443
- 443:443/udp
volumes:
- ./container-config/:/etc/caddy
- /etc/localtime:/etc/localtime:ro
- ./certs/:/etc/ssl/certs/
networks:
cloudflare: null
proxy:
external: true
Inicie o Caddy usando o comando.
cd /mnt/dockerapp/caddy && sudo docker compose up -d
Verifique os logs em busca de possíveis erros.
sudo docker logs caddy
sudo docker logs cloudflared-tunnel
Se tudo ocorrer conforme o esperado, o Caddy iniciará seu serviço e ficará aguardando conexões.
Criando uma aplicação de Teste
Com o proxy já configurado, vamos testar sua integração com alguma aplicação usando o Cloudflare Tunnel. Para isso, utilizaremos a aplicação Whoami.
Crie um diretório de nome whoami
sudo mkdir -p /mnt/dockerapp/whoami
Crie um arquivo docker-compose.yaml
sudo nano /mnt/dockerapp/whoami/docker-compose.yaml
docker-compose.yaml
---
version: "3.8"
services:
whoami:
container_name: whoami
image: containous/whoami
restart: unless-stopped
ports:
- 80:80
networks:
- proxy
networks:
proxy:
external: true
Suba o serviço
cd /mnt/dockerapp/whoami && sudo docker compose up -d
Verifique os logs em busca de possíveis erros.
sudo docker logs whoami
Configurando Um APP Na Cloudflare Tunel
Com o proxy já em execução e uma aplicação pronta, é hora de adicioná-la ao nosso domínio e usar os certificados gerados.
Navegue até o site do Cloudflare, acesse o menu Zero Trust, vá para Redes, clique no nome do seu túnel criado e, em seguida, na aba Public Hostname. Por fim, clique no botão ‘Add a Public Hostname’.
Dê um nome para o seu subdomínio, por exemplo, ‘whoami’. Em ‘Domain’, selecione o seu domínio. No ‘Service Type’, escolha HTTPS e, na URL, escreva ‘caddy’, que é o nome do container do nosso proxy. Clique em ‘Additional Application Settings’ e em ‘Original Server Name’, coloque o seu endereço. Depois clique no botão ‘Save Hostname’.
Conclusão
Neste guia, eu mostrei como configurar o Caddy junto com o Cloudflare Tunnel, usando o Docker e o Cloudflared. Com isso, você pode acessar o seu site ou serviço através de um domínio da Cloudflare, usando o Caddy como proxy reverso e o Cloudflare Tunnel como camada de segurança.
Se você quiser saber mais sobre o Caddy, o Cloudflare Tunnel, você pode visitar os endereços oficiais:
- Caddy:
- Cloudflare Tunnel: