# Configuração do Traefik com Nginx

### Opção 1: Desabilitar configurações do nginx (Recomendado)

Execute na VPS:

```bash
# 1. Verificar quais configurações do nginx estão ativas
ls -la /etc/nginx/sites-enabled/

# 2. Verificar se há configurações para os domínios
grep -r "dockerapp.comunidadezdg.com.br" /etc/nginx/sites-enabled/
grep -r "dockerapi.comunidadezdg.com.br" /etc/nginx/sites-enabled/

# 3. Desabilitar as configurações antigas (se existirem)
sudo rm /etc/nginx/sites-enabled/zpro-frontend
sudo rm /etc/nginx/sites-enabled/zpro-backend

# 4. Testar configuração do nginx
sudo nginx -t

# 5. Recarregar nginx
sudo systemctl reload nginx
```

### Opção 2: Configurar nginx para fazer proxy para Traefik

Se você quiser manter o nginx na porta 443 fazendo proxy para o Traefik:

```bash
# Criar configuração do nginx para fazer proxy para Traefik
sudo nano /etc/nginx/sites-available/zpro-traefik-proxy
```

**OPÇÃO A: Gerar certificados via Certbot (Recomendado)**

Primeiro, gere os certificados. Como a porta 80 está em uso pelo nginx, use uma das opções abaixo:

**Método 1: Parar nginx temporariamente (Mais simples)**

```bash
# Instalar certbot (se não tiver)
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

# Parar nginx temporariamente
sudo systemctl stop nginx

# Gerar certificados para os domínios
sudo certbot certonly --standalone -d dockerapp.comunidadezdg.com.br -d dockerapi.comunidadezdg.com.br

# Reiniciar nginx
sudo systemctl start nginx
```

**Método 2: Usar modo webroot (sem parar nginx)**

```bash
# Instalar certbot (se não tiver)
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

# Criar diretório para validação (se não existir)
sudo mkdir -p /var/www/html/.well-known/acme-challenge

# Garantir que nginx serve esse diretório (adicionar ao server block na porta 80)
# O nginx já deve estar configurado para servir arquivos estáticos

# Gerar certificados usando webroot
sudo certbot certonly --webroot -w /var/www/html -d dockerapp.comunidadezdg.com.br -d dockerapi.comunidadezdg.com.br
```

**Método 3: Usar plugin do nginx (Mais automático)**

```bash
# Instalar certbot (se não tiver)
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

# Criar configuração básica do nginx na porta 80 primeiro (se não existir)
# O certbot vai modificar automaticamente

# Gerar certificados usando plugin do nginx
sudo certbot --nginx -d dockerapp.comunidadezdg.com.br -d dockerapi.comunidadezdg.com.br
```

**Recomendação:** Use o **Método 1** (parar nginx temporariamente) - é o mais simples e rápido.

**IMPORTANTE:** Antes de criar a configuração, verifique se há conflitos de domínio:

```bash
# Verificar quais configurações estão ativas
sudo ls -la /etc/nginx/sites-enabled/

# Verificar se há configurações antigas para esses domínios
sudo grep -r "dockerapp.comunidadezdg.com.br" /etc/nginx/sites-enabled/
sudo grep -r "dockerapi.comunidadezdg.com.br" /etc/nginx/sites-enabled/

# Se houver configurações antigas para os mesmos domínios, você pode:
# 1. Desabilitá-las temporariamente: sudo rm /etc/nginx/sites-enabled/nome-antigo
# 2. Ou comentar os server blocks conflitantes dentro dos arquivos
```

Depois, crie o arquivo de configuração com um nome diferente (para não conflitar com configurações existentes):

```bash
sudo nano /etc/nginx/sites-available/zpro-traefik-proxy
```

Cole este conteúdo no arquivo:

```nginx
# Frontend - dockerapp.comunidadezdg.com.br
server {
    listen 443 ssl http2;
    server_name dockerapp.comunidadezdg.com.br;

    # Certificados SSL gerados via certbot
    ssl_certificate /etc/letsencrypt/live/dockerapp.comunidadezdg.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dockerapp.comunidadezdg.com.br/privkey.pem;

    # Configurações SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass https://localhost:8443;
        proxy_ssl_verify off;  # Desabilita verificação SSL para o Traefik
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

# Backend - dockerapi.comunidadezdg.com.br
server {
    listen 443 ssl http2;
    server_name dockerapi.comunidadezdg.com.br;

    # Certificados SSL gerados via certbot (mesmo certificado, pois foram gerados juntos)
    ssl_certificate /etc/letsencrypt/live/dockerapp.comunidadezdg.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dockerapp.comunidadezdg.com.br/privkey.pem;

    # Configurações SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass https://localhost:8443;
        proxy_ssl_verify off;  # Desabilita verificação SSL para o Traefik
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
```

**OPÇÃO B: Usar certificados auto-assinados temporários (apenas para teste)**

Primeiro, gere certificados auto-assinados:

```bash
# Criar diretório para certificados
sudo mkdir -p /etc/nginx/ssl

# Gerar certificado auto-assinado para dockerapp
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/dockerapp.key \
  -out /etc/nginx/ssl/dockerapp.crt \
  -subj "/CN=dockerapp.comunidadezdg.com.br"

# Gerar certificado auto-assinado para dockerapi
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/dockerapi.key \
  -out /etc/nginx/ssl/dockerapi.crt \
  -subj "/CN=dockerapi.comunidadezdg.com.br"
```

Depois, use esta configuração:

```nginx
# Frontend - dockerapp.comunidadezdg.com.br
server {
    listen 443 ssl http2;
    server_name dockerapp.comunidadezdg.com.br;

    # Certificados auto-assinados (temporários)
    ssl_certificate /etc/nginx/ssl/dockerapp.crt;
    ssl_certificate_key /etc/nginx/ssl/dockerapp.key;

    # Configurações SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass https://localhost:8443;
        proxy_ssl_verify off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

# Backend - dockerapi.comunidadezdg.com.br
server {
    listen 443 ssl http2;
    server_name dockerapi.comunidadezdg.com.br;

    # Certificados auto-assinados (temporários)
    ssl_certificate /etc/nginx/ssl/dockerapi.crt;
    ssl_certificate_key /etc/nginx/ssl/dockerapi.key;

    # Configurações SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass https://localhost:8443;
        proxy_ssl_verify off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
```

Depois:

```bash
# Habilitar configuração
sudo ln -s /etc/nginx/sites-available/zpro-traefik-proxy /etc/nginx/sites-enabled/

# Testar
sudo nginx -t

# Recarregar
sudo systemctl reload nginx
```

### Opção 3: Acessar diretamente o Traefik (sem nginx)

Se você quiser acessar diretamente o Traefik sem passar pelo nginx:

1. **Acesse via porta 8443:**
   * `https://dockerapp.comunidadezdg.com.br:8443`
   * `https://dockerapi.comunidadezdg.com.br:8443`
2. **Ou configure o DNS para apontar diretamente para o Traefik** (não recomendado se você já tem nginx rodando)

### Verificação

Após aplicar uma das soluções:

```bash
# Verificar se o Traefik está rodando
docker ps | grep traefik

# Verificar logs do Traefik
docker logs zpro-traefik

# Testar acesso direto ao Traefik
curl -k https://localhost:8443 -H "Host: dockerapp.comunidadezdg.com.br"
```

#### Nota Importante

Se você escolher a **Opção 1** (desabilitar nginx), certifique-se de que:

* O Traefik está acessível na porta 8443
* O firewall permite conexões na porta 8443
* Os certificados SSL estão sendo gerados corretamente pelo Traefik

Se você escolher a **Opção 2** (nginx como proxy), o nginx gerencia o SSL na porta 443 e faz proxy para o Traefik na 8443.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ajuda.zdg.com.br/avancado-recursos-tecnicos/boas-praticas-de-infraestrutura/configuracao-do-traefik-com-nginx.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
