Files
sgse-app/docs/JITSI_CONFIGURACAO.md

622 lines
16 KiB
Markdown

# Configuração do Jitsi Meet no SGSE
## Introdução
O sistema de videochamadas do SGSE utiliza o Jitsi Meet, uma solução open-source para comunicação por vídeo e áudio. Este documento fornece um guia completo para configurar o Jitsi Meet no sistema SGSE.
### Benefícios
- **Chamadas de vídeo e áudio** em tempo real
- **Autenticação JWT** para controle de acesso
- **Suporte a múltiplos ambientes** (desenvolvimento, staging, produção)
- **Gravação de chamadas** (quando habilitado no servidor)
- **Integração nativa** com o sistema de chat
### Visão Geral da Arquitetura
```
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Cliente │────────▶│ Backend │────────▶│ Jitsi │
│ (Navegador)│ │ (Convex) │ │ Servidor │
└─────────────┘ └──────────────┘ └─────────────┘
│ │ │
│ │ │
└─────────────────────────┴────────────────────────┘
Token JWT (opcional)
```
## Requisitos do Sistema
### Requisitos de Hardware
- **CPU**: Mínimo 2 cores (recomendado: 4+ cores)
- **RAM**: Mínimo 4GB (recomendado: 8GB+)
- **Largura de Banda**: Mínimo 1 Mbps por participante (recomendado: 2+ Mbps)
### Requisitos de Software
- **Docker** e **Docker Compose** (para instalação self-hosted)
- **Node.js** 18+ (já incluído no SGSE)
- **Navegador moderno** com suporte a WebRTC (Chrome, Firefox, Safari, Edge)
### Requisitos de Rede
- **Portas necessárias**:
- `80` (HTTP) ou `443` (HTTPS) - Web
- `4443` (TURN/TCP) - Retransmissão de mídia
- `10000/udp` (RTP/RTCP) - Streaming de mídia
- **Firewall**: Permitir tráfego UDP e TCP nas portas acima
- **DNS**: Configurar registro A ou CNAME para o domínio (produção)
### Requisitos de Certificados SSL
- **Produção**: Certificado válido (Let's Encrypt recomendado)
- **Desenvolvimento**: Certificado autoassinado aceitável
## Tipos de Instalação
### 1. Jitsi Self-Hosted com Docker
Esta é a opção recomendada para produção e oferece controle total sobre o servidor.
#### Pré-requisitos
1. Servidor com Docker e Docker Compose instalados
2. Domínio configurado (para produção) ou acesso a `localhost` (desenvolvimento)
3. Certificado SSL (para produção)
#### Passo a Passo
1. **Instalar Docker e Docker Compose**
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker.io docker-compose
# Verificar instalação
docker --version
docker-compose --version
```
2. **Criar diretório para configuração**
```bash
mkdir -p ~/jitsi-meet
cd ~/jitsi-meet
```
3. **Baixar arquivos de configuração**
```bash
# Baixar docker-compose.yml oficial
curl -L https://github.com/jitsi/docker-jitsi-meet/archive/refs/heads/master.zip -o jitsi.zip
unzip jitsi.zip
cd docker-jitsi-meet-master
```
4. **Configurar variáveis de ambiente**
```bash
# Copiar arquivo de exemplo
cp env.example .env
# Editar .env com suas configurações
nano .env
```
Configurações importantes no `.env`:
```env
# Domínio
CONFIG=~/.jitsi-meet-cfg
TZ=America/Recife
HTTP_PORT=8000
HTTPS_PORT=8443
PUBLIC_URL=https://meet.example.com
DOMAIN=meet.example.com
# Autenticação
ENABLE_AUTH=1
ENABLE_GUESTS=0
# JWT
JWT_APP_ID=sgse-app
JWT_APP_SECRET=seu-jwt-secret-aqui-minimo-32-caracteres
# Gravação (opcional)
ENABLE_RECORDING=0
# Outras configurações
ENABLE_PREJOIN_PAGE=0
START_AUDIO_MUTED=0
START_VIDEO_MUTED=0
ENABLE_XMPP_WEBSOCKET=1
ENABLE_P2P=1
MAX_NUMBER_OF_PARTICIPANTS=10
```
5. **Gerar JWT Secret seguro**
```bash
# Gerar secret aleatório de 64 caracteres
openssl rand -hex 32
```
6. **Criar diretório de configuração**
```bash
mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
```
7. **Iniciar containers**
```bash
docker-compose up -d
```
8. **Verificar status**
```bash
docker-compose ps
```
9. **Verificar logs**
```bash
docker-compose logs -f
```
#### Configuração de Certificados SSL
**Para Produção (Let's Encrypt):**
O Jitsi Docker suporta Let's Encrypt automaticamente. Configure:
```env
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN=meet.example.com
LETSENCRYPT_EMAIL=admin@example.com
```
**Para Desenvolvimento (Autoassinado):**
```env
ENABLE_LETSENCRYPT=0
```
E aceite o certificado no navegador na primeira conexão.
### 2. Jitsi as a Service (JaaS/8x8)
JaaS é uma solução gerenciada pela 8x8 que oferece Jitsi como serviço.
#### Passo a Passo
1. **Criar conta no JaaS**
- Acesse https://jaas.8x8.vc
- Crie uma conta ou faça login
2. **Obter credenciais**
- No painel do JaaS, vá em "Settings" > "API Keys"
- Copie o **Application ID** e **Application Secret**
3. **Configurar no SGSE**
- Use o domínio: `8x8.vc` ou seu domínio personalizado
- App ID: O Application ID do JaaS
- JWT Secret: O Application Secret do JaaS
4. **Domínio personalizado (opcional)**
- No painel JaaS, configure um domínio personalizado
- Atualize o domínio no SGSE
### 3. Desenvolvimento Local
Para desenvolvimento rápido sem Docker:
1. **Usar Jitsi Meet público** (não recomendado para produção)
- Domínio: `meet.jit.si`
- Não requer configuração de servidor
- Limitações: Sem JWT, sem controle total
2. **Docker local simplificado**
- Siga os passos do "Jitsi Self-Hosted"
- Use `localhost:8443` como domínio
- Configure certificado autoassinado
## Configuração de JWT no Servidor Jitsi
### Para Jitsi Self-Hosted
#### 1. Gerar JWT Secret
```bash
# Gerar secret seguro
openssl rand -hex 32
```
#### 2. Configurar Prosody
Edite `~/.jitsi-meet-cfg/prosody/config/conf.d/jitsi-meet.cfg.lua`:
```lua
-- Habilitar autenticação JWT
authentication = "token";
-- Configurar verificação de token
asap_accepted_audiences = "sgse-app"
asap_accepted_issuers = "sgse-app"
-- Módulo de verificação de token
Component "conference.meet.example.com" "muc"
modules_enabled = {
"token_verification";
}
```
#### 3. Configurar Jicofo
Edite `~/.jitsi-meet-cfg/jicofo/sip-communicator.properties`:
```properties
org.jitsi.jicofo.auth.URL=XMPP:meet.example.com
org.jitsi.jicofo.jwt.secret=seu-jwt-secret-aqui
org.jitsi.jicofo.jwt.appId=sgse-app
```
#### 4. Reiniciar serviços
```bash
docker-compose restart prosody jicofo
```
### Para JaaS
JWT já está configurado. Apenas use as credenciais fornecidas no painel.
## Configuração no Painel SGSE
### Acesso ao Painel
1. Faça login como usuário com permissão de TI (TI_MASTER, TI_USUARIO ou ADMIN)
2. Navegue para: **TI** > **Configurações do Jitsi**
### Preenchimento de Campos
#### Domínio
- **Formato**: FQDN (ex: `meet.example.com`) ou `localhost:porta` (ex: `localhost:8443`)
- **Exemplos**:
- Produção: `meet.example.com`
- Desenvolvimento: `localhost:8443`
- JaaS: `8x8.vc` ou seu domínio personalizado
#### App ID
- **Formato**: Alfanumérico, pode conter hífens e underscores
- **Exemplos**: `sgse-app`, `my-app`, `app_123`
- **Onde encontrar**:
- Self-hosted: Configurado no `.env` como `JWT_APP_ID`
- JaaS: Application ID no painel do JaaS
#### JWT Secret
- **Requisitos**: Mínimo 16 caracteres (recomendado: 32+)
- **Onde encontrar**:
- Self-hosted: Configurado no `.env` como `JWT_APP_SECRET`
- JaaS: Application Secret no painel do JaaS
- **Segurança**: O secret será criptografado antes de ser armazenado
#### Prefixo de Sala
- **Formato**: Apenas letras, números e hífens
- **Exemplo**: `sgse`, `meeting`, `call-123`
- **Uso**: Prefixo usado para gerar nomes únicos de salas
#### Ambiente
- **Opções**: Desenvolvimento, Staging, Produção
- **Uso**: Permite múltiplas configurações para diferentes ambientes
- **Padrão**: Deixe vazio para configuração padrão
#### JWT Audience e Issuer (Opcionais)
- **Audience**: Padrão é o domínio do servidor
- **Issuer**: Padrão é o App ID
- **Quando configurar**: Apenas se necessário para compatibilidade com configurações específicas do servidor
### Teste de Conexão
1. Preencha os campos básicos (Domínio, App ID)
2. Clique em **"Testar Conexão"**
3. Aguarde a validação
4. Se houver erros, verifique:
- Servidor está online
- Domínio está correto
- Portas estão acessíveis
- Certificado SSL (se HTTPS)
### Geração de Token de Teste
1. Configure o JWT Secret
2. Clique em **"Gerar Token de Teste"**
3. O token será gerado automaticamente quando você criar uma chamada
## Troubleshooting
### Problemas de Conexão
#### Servidor não acessível
**Sintomas**: Timeout ou erro de conexão
**Soluções**:
1. Verificar se o servidor está online: `ping meet.example.com`
2. Verificar portas: `telnet meet.example.com 443`
3. Verificar firewall: Permitir portas 80, 443, 4443, 10000/udp
4. Verificar DNS: `nslookup meet.example.com`
#### Timeout de conexão
**Sintomas**: Conexão demora muito ou falha
**Soluções**:
1. Verificar largura de banda
2. Verificar latência de rede
3. Verificar se há proxy ou firewall bloqueando
4. Testar de outra rede
#### Erro de DNS
**Sintomas**: "DNS resolution failed"
**Soluções**:
1. Verificar se o domínio está configurado corretamente
2. Verificar registros DNS (A ou CNAME)
3. Aguardar propagação DNS (até 48 horas)
### Problemas de Certificado SSL
#### Certificado inválido
**Sintomas**: Aviso de certificado não confiável
**Soluções**:
1. **Produção**: Usar certificado válido (Let's Encrypt)
2. **Desenvolvimento**: Habilitar "Aceitar Certificados Autoassinados" no painel
#### Certificado autoassinado não aceito
**Sintomas**: Erro mesmo com opção habilitada
**Soluções**:
1. Aceitar certificado manualmente no navegador na primeira conexão
2. Adicionar exceção no navegador
3. Para produção, usar certificado válido
#### Erro de cadeia de certificados
**Sintomas**: "Certificate chain incomplete"
**Soluções**:
1. Verificar se o certificado inclui a cadeia completa
2. Reinstalar certificado com cadeia completa
3. Verificar configuração do servidor web
### Problemas com JWT
#### Token inválido
**Sintomas**: Erro de autenticação ao conectar
**Soluções**:
1. Verificar se JWT Secret está correto no servidor e no SGSE
2. Verificar se App ID corresponde
3. Verificar se token não expirou (padrão: 1 hora)
4. Regenerar token
#### Token expirado
**Sintomas**: Conexão funciona inicialmente, depois falha
**Soluções**:
1. Tokens são regenerados automaticamente
2. Verificar se o relógio do servidor está sincronizado (NTP)
3. Aumentar tempo de expiração (se necessário)
#### Secret incorreto
**Sintomas**: Erro de autenticação persistente
**Soluções**:
1. Verificar JWT Secret no servidor (`.env` ou configuração)
2. Verificar JWT Secret no painel SGSE
3. Garantir que são idênticos (sem espaços extras)
4. Reiniciar serviços do Jitsi após alterar secret
#### Claims incorretos
**Sintomas**: Conexão estabelecida mas sem permissões
**Soluções**:
1. Verificar claims do token (iss, aud, room, moderator)
2. Verificar configuração do Prosody
3. Verificar logs do servidor Jitsi
### Problemas de Firewall
#### Portas bloqueadas
**Sintomas**: Conexão HTTP funciona, mas mídia não
**Soluções**:
1. Abrir portas necessárias:
- `80/tcp`, `443/tcp` (HTTP/HTTPS)
- `4443/tcp` (TURN)
- `10000/udp` (RTP/RTCP)
2. Verificar regras de firewall
3. Testar com `telnet` ou `nc`
#### UDP não funcionando
**Sintomas**: Áudio/vídeo cortando ou não funcionando
**Soluções**:
1. Verificar se UDP está habilitado no firewall
2. Verificar se NAT está configurado corretamente
3. Configurar TURN server para fallback
#### WebRTC bloqueado
**Sintomas**: Navegador não consegue estabelecer conexão WebRTC
**Soluções**:
1. Verificar se WebRTC está habilitado no navegador
2. Verificar se não há extensões bloqueando WebRTC
3. Verificar configurações de proxy/VPN
### Problemas de Performance
#### Qualidade de vídeo ruim
**Sintomas**: Vídeo pixelado ou com baixa resolução
**Soluções**:
1. Verificar largura de banda disponível
2. Reduzir número de participantes simultâneos
3. Ajustar resolução nas configurações do Jitsi
4. Verificar recursos do servidor (CPU, RAM)
#### Áudio cortando
**Sintomas**: Áudio intermitente ou com atraso
**Soluções**:
1. Verificar latência de rede
2. Verificar recursos do servidor
3. Configurar codec de áudio adequado
4. Verificar dispositivos de áudio do cliente
#### Alta latência
**Sintomas**: Atraso perceptível entre áudio/vídeo
**Soluções**:
1. Verificar latência de rede (ping)
2. Verificar localização do servidor (usar servidor próximo)
3. Configurar TURN server próximo aos usuários
4. Otimizar configurações de codec
## Exemplos de Configuração
### Exemplo 1: Desenvolvimento Local
```yaml
Domínio: localhost:8443
App ID: sgse-app
Prefixo de Sala: sgse-dev
HTTPS: Sim
Certificados Autoassinados: Sim
JWT Secret: (opcional para desenvolvimento)
Ambiente: desenvolvimento
```
### Exemplo 2: Produção Self-Hosted
```yaml
Domínio: meet.example.com
App ID: sgse-app
Prefixo de Sala: sgse
HTTPS: Sim
Certificados Autoassinados: Não
JWT Secret: [secret de 32+ caracteres]
JWT Audience: meet.example.com
JWT Issuer: sgse-app
Ambiente: producao
```
### Exemplo 3: JaaS com Domínio Personalizado
```yaml
Domínio: meet.seudominio.com
App ID: [Application ID do JaaS]
Prefixo de Sala: sgse
HTTPS: Sim
Certificados Autoassinados: Não
JWT Secret: [Application Secret do JaaS]
Ambiente: producao
```
### Exemplo 4: Múltiplos Ambientes
**Desenvolvimento:**
```yaml
Ambiente: desenvolvimento
Domínio: localhost:8443
```
**Staging:**
```yaml
Ambiente: staging
Domínio: meet-staging.example.com
```
**Produção:**
```yaml
Ambiente: producao
Domínio: meet.example.com
```
## Boas Práticas
### Segurança
1. **Use HTTPS em produção**: Sempre use certificados válidos
2. **JWT Secret forte**: Mínimo 32 caracteres, use gerador seguro
3. **Rotação de secrets**: Rotacione JWT secrets periodicamente
4. **Limitação de acesso**: Configure firewall para permitir apenas IPs necessários (opcional)
5. **Logs de auditoria**: Monitore logs para atividades suspeitas
### Performance
1. **Recursos do servidor**: Aloque recursos adequados (CPU, RAM, largura de banda)
2. **Otimização de codecs**: Use codecs eficientes (VP8, Opus)
3. **Configuração de P2P**: Habilite P2P para reduzir carga no servidor
4. **Monitoramento**: Monitore métricas de CPU, RAM, largura de banda
### Monitoramento
1. **Logs importantes**:
- Logs do Prosody (XMPP)
- Logs do Jicofo (conferências)
- Logs do JVB (vídeo bridge)
- Logs do nginx (web server)
2. **Métricas a acompanhar**:
- Número de participantes ativos
- Largura de banda utilizada
- CPU e RAM do servidor
- Latência de conexão
3. **Alertas recomendados**:
- Alta utilização de CPU/RAM
- Falhas de conexão
- Certificados próximos do vencimento
- Erros de autenticação JWT
## Referências
- **Documentação oficial do Jitsi Meet**: https://jitsi.github.io/handbook/
- **Especificação JWT do Jitsi**: https://github.com/jitsi/lib-jitsi-meet/blob/master/doc/tokens.md
- **Guia de instalação Docker**: https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
- **Comunidade Jitsi**: https://community.jitsi.org/
- **JaaS (8x8)**: https://jaas.8x8.vc
## Suporte
Para problemas ou dúvidas:
1. Consulte a seção de Troubleshooting acima
2. Verifique os logs do servidor Jitsi
3. Consulte a documentação oficial do Jitsi
4. Entre em contato com a equipe de TI