Info
Content

Implantação do Go2RTC via Docker

1. Iniciando a impantação

# 📹 Painel de Monitoramento CFTV - CTIC (IFPE)

## 📌 Visão Geral
Este projeto reestrutura o acesso às câmeras IP da instituição. Para aumentar a segurança e reduzir 
a latência, removemos a exposição direta de portas RTSP no firewall (MikroTik). 

O tráfego agora é centralizado na DMZ através de um proxy reverso (Caddy), que exige autenticação e 
roteia o acesso para um contêiner Docker (go2rtc). O go2rtc converte os fluxos RTSP internos em 
WebRTC (latência ultrabaixa) e os exibe em um painel HTML em formato de mosaico.

## 🏗️ Arquitetura
* **Firewall:** MikroTik (Redirecionamento da porta 554 bloqueado para a internet; porta 1984 
liberada internamente entre DMZ e Docker).
* **Proxy Reverso & Web Server:** Caddy (Garante o HTTPS, exige usuário/senha e 
hospeda a página HTML do painel).
* **Motor de Vídeo:** go2rtc via Docker (Busca o RTSP nas câmeras via IP interno e 
converte para WebRTC).

## 📂 Estrutura de Diretórios
* `/opt/go2rtc/` ➔ Arquivos do Docker (`docker-compose.yml` e `go2rtc.yaml`)
* `/var/www/html/cameras/` ➔ Página web do mosaico (`painel.html`)
* `/etc/caddy/` ➔ Configuração do proxy (`Caddyfile`)

---

## 🛠️ 1. Configuração do Docker (go2rtc)
**IP do Servidor Docker:** `10.36.254.115`

**Arquivo: `/opt/go2rtc/docker-compose.yml`**
```yaml
version: '3.8'

services:
  go2rtc:
    image: alexxit/go2rtc:latest
    container_name: go2rtc_panel
    restart: unless-stopped
    network_mode: host
    volumes:
      - /opt/go2rtc/go2rtc.yaml:/config/go2rtc.yaml

Arquivo: /opt/go2rtc/go2rtc.yaml

streams:
  camera_01_lab04: rtsp://[USUARIO]:[SENHA]@10.36.254.26:554/[CAMINHO_RTSP]
  camera_02_lab04: rtsp://[USUARIO]:[SENHA]@10.36.254.27:554/[CAMINHO_RTSP]
  camera_lab07: rtsp://[USUARIO]:[SENHA]@10.36.254.29:554/[CAMINHO_RTSP]
  camera_lab08: rtsp://[USUARIO]:[SENHA]@10.36.254.30:554/[CAMINHO_RTSP]
  camera_lab09: rtsp://[USUARIO]:[SENHA]@10.36.254.31:554/[CAMINHO_RTSP]

Comandos Úteis (Docker):

  • Subir o serviço: sudo docker compose up -d

  • Reiniciar após adicionar câmeras: sudo docker restart go2rtc_panel

  • Ver logs de erro: sudo docker logs go2rtc_panel --tail 50

2. Configuração do Caddy (DMZ)

Domínio: cameras.palmares.ifpe.edu.br

Arquivo: /etc/caddy/Caddyfile

cameras.palmares.ifpe.edu.br {
    # Camada de Segurança (Usuário/Senha)
    basicauth /* {
        admin [HASH_DA_SENHA_AQUI]
    }

    # Rota para o Mosaico HTML
    handle /painel.html {
        root * /var/www/html/cameras
        file_server
    }

    # Proxy reverso para o go2rtc
    handle {
        reverse_proxy 10.36.254.115:1984
    }
}

Comandos Úteis (Caddy):

  • Gerar hash de nova senha: caddy hash-password --plaintext "NovaSenha"

  • Validar sintaxe: caddy validate --config /etc/caddy/Caddyfile

  • Aplicar alterações sem derrubar o serviço: sudo systemctl reload caddy

3. O Painel Mosaico (HTML)

Arquivo: /var/www/html/cameras/painel.html

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Monitoramento - Laboratórios</title>
    <style>
        body {
            background-color: #121212;
            color: #ffffff;
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
        }
        h2 {
            text-align: center;
            margin-bottom: 20px;
            color: #4CAF50;
        }
        .grid-container {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
            gap: 15px;
        }
        .camera-card {
            background-color: #1e1e1e;
            padding: 10px;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0,0,0,0.3);
        }
        .camera-title {
            text-align: center;
            margin: 0 0 10px 0;
            font-size: 16px;
        }
        iframe {
            width: 100%;
            height: 250px;
            border: none;
            border-radius: 4px;
            background-color: #000;
            overflow: hidden;
        }
    </style>
</head>
<body>

    <h2>Monitoramento CFTV - CTIC</h2>

    <div class="grid-container">
        <div class="camera-card">
            <h3 class="camera-title">Lab 04 - Câmera 01</h3>
            <iframe src="/webrtc.html?src=camera_01_lab04" allow="autoplay; fullscreen" scrolling="no"></iframe>
        </div>
        <div class="camera-card">
            <h3 class="camera-title">Lab 04 - Câmera 02</h3>
            <iframe src="/webrtc.html?src=camera_02_lab04" allow="autoplay; fullscreen" scrolling="no"></iframe>
        </div>

        <div class="camera-card">
            <h3 class="camera-title">Lab 07</h3>
            <iframe src="/webrtc.html?src=camera_lab07" allow="autoplay; fullscreen" scrolling="no"></iframe>
        </div>
        <div class="camera-card">
            <h3 class="camera-title">Lab 08</h3>
            <iframe src="/webrtc.html?src=camera_lab08" allow="autoplay; fullscreen" scrolling="no"></iframe>
        </div>
        <div class="camera-card">
            <h3 class="camera-title">Lab 09</h3>
            <iframe src="/webrtc.html?src=camera_lab09" allow="autoplay; fullscreen" scrolling="no"></iframe>
        </div>
    </div>

</body>
</html>

Para adicionar novas câmeras, adicione a configuração no go2rtc.yaml e crie um novo bloco <div class="camera-card"> no HTML seguindo o mesmo padrão.

 

No Comments
Back to top