Pré-requisitos
- Um servidor Linux acessível a partir de onde você vai administrá-lo
- Docker e Docker Compose instalados
- Um nome de domínio apontando para o IP do seu servidor
- Portas 80 e 443 abertas para o Caddy, além da porta UDP do WireGuard aberta (padrão 51820)
O Caddy precisa de um nome DNS válido, interno ou público, apontando para o seu servidor para conseguir obter e renovar certificados SSL automaticamente.
Deploy
mkdir wireguard_webadmin && cd wireguard_webadminwget -O docker-compose.yml \
https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.ymlCrie um arquivo .env no mesmo diretório. Defina SERVER_ADDRESS com o seu domínio:
SERVER_ADDRESS=vpn.example.com
DEBUG_MODE=False
TIMEZONE=America/Sao_PauloVeja abaixo a referência do .env com todas as variáveis disponíveis.
docker compose up -dAcesse o painel em https://vpn.example.com. O Caddy obtém e renova certificados SSL automaticamente.
Referência do .env
| Variável | Obrigatória | Descrição |
|---|---|---|
| SERVER_ADDRESS | Sim | Nome DNS ou IP do seu servidor. Deve corresponder exatamente ao que você digita no navegador. Se não corresponder, ocorrerão erros de CSRF. |
| DEBUG_MODE | Não | Defina como True para ativar o modo debug do Django. Nunca use em produção. Padrão: False. |
| TIMEZONE | Não | Fuso horário da aplicação. Use um valor da base tz. Padrão: America/Sao_Paulo. |
| EXTRA_ALLOWED_HOSTS | Não | Hosts adicionais que o Django deve aceitar, separados por vírgula. SERVER_ADDRESS sempre é incluído. Exemplo: app1.example.com,app2.example.com:8443. |
| WIREGUARD_STATUS_CACHE_ENABLED | Não | Armazena o status do WireGuard em cache para reduzir chamadas ao wg. Padrão: True. |
| WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL | Não | Com que frequência o cache é atualizado, em segundos. Valores permitidos: 30, 60, 150, 300. Padrão: 60. |
| WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT | Não | Quantos snapshots em cache devem ser pré-carregados ao abrir a página (0-9). Valores mais altos preenchem os gráficos de tráfego antes. Reduza se a lista de peers parecer lenta. Padrão: 9. |
Atualização
Os dados ficam persistidos em volumes Docker. Atualizar não afeta seus peers, regras de firewall, entradas DNS nem qualquer outra configuração.
cd wireguard_webadmindocker compose down
docker compose pulltar cvfz wireguard-webadmin-backup-$(date +%Y-%m-%d-%H%M%S).tar.gz \
/var/lib/docker/volumes/wireguard_webadmin_wireguard/_data/ \
/var/lib/docker/volumes/wireguard_webadmin_rrd_data/_data/wget -O docker-compose.yml \
https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.ymldocker compose up -ddocker compose logs wireguard_webadminSolução de problemas
O Caddy não está obtendo certificado
- Confirme que o registro A do domínio aponta para o IP público do servidor
- Verifique se as portas 80 e 443 estão abertas e não bloqueadas na rede
- Consulte os logs do Caddy:
docker compose logs caddy
O painel não carrega
- Verifique se todos os containers estão em execução:
docker compose ps - Procure por erros:
docker compose logs wireguard_webadmin - Confirme que
SERVER_ADDRESSem.envcorresponde exatamente ao que você digita no navegador
Erros de CSRF no login
SERVER_ADDRESS está configurado incorretamente. Ele precisa corresponder ao hostname, e à porta se não for a padrão, usado para acessar o painel. Atualize o .env e reinicie com docker compose up -d.
Os peers do WireGuard não conseguem se conectar
- Confirme que a porta UDP do WireGuard está aberta no firewall do host. O padrão é 51820, mas se você estiver executando múltiplas instâncias cada uma precisa de sua própria porta.
- Garanta que o intervalo de portas UDP declarado em
docker-compose.ymlcorresponda ao que está configurado em cada instância do WireGuard dentro do painel. Se houver divergência, o container não exporá a porta correta no host. - Verifique se o IP forwarding está habilitado no host:
sysctl net.ipv4.ip_forward
O que está rodando
| Serviço | Função |
|---|---|
| wireguard-webadmin | Aplicação Django: interface web e API |
| caddy | Proxy reverso e TLS automático |
| auth-gateway | Camada de autorização Zero Trust: aplica verificações de identidade antes de encaminhar para o upstream |
| cron | Tarefas agendadas: ativação/desativação de peers e atualização de cache |
| rrdtool | Histórico de tráfego: coleta de dados RRD e geração de gráficos |
| dns | Resolvedor baseado em dnsmasq com suporte a listas de bloqueio por categoria |