16 KiB
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) ou443(HTTPS) - Web4443(TURN/TCP) - Retransmissão de mídia10000/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
- Servidor com Docker e Docker Compose instalados
- Domínio configurado (para produção) ou acesso a
localhost(desenvolvimento) - Certificado SSL (para produção)
Passo a Passo
- Instalar Docker e Docker Compose
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker.io docker-compose
# Verificar instalação
docker --version
docker-compose --version
- Criar diretório para configuração
mkdir -p ~/jitsi-meet
cd ~/jitsi-meet
- Baixar arquivos de configuração
# 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
- Configurar variáveis de ambiente
# Copiar arquivo de exemplo
cp env.example .env
# Editar .env com suas configurações
nano .env
Configurações importantes no .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
- Gerar JWT Secret seguro
# Gerar secret aleatório de 64 caracteres
openssl rand -hex 32
- Criar diretório de configuração
mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
- Iniciar containers
docker-compose up -d
- Verificar status
docker-compose ps
- Verificar logs
docker-compose logs -f
Configuração de Certificados SSL
Para Produção (Let's Encrypt):
O Jitsi Docker suporta Let's Encrypt automaticamente. Configure:
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN=meet.example.com
LETSENCRYPT_EMAIL=admin@example.com
Para Desenvolvimento (Autoassinado):
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
-
Criar conta no JaaS
- Acesse https://jaas.8x8.vc
- Crie uma conta ou faça login
-
Obter credenciais
- No painel do JaaS, vá em "Settings" > "API Keys"
- Copie o Application ID e Application Secret
-
Configurar no SGSE
- Use o domínio:
8x8.vcou seu domínio personalizado - App ID: O Application ID do JaaS
- JWT Secret: O Application Secret do JaaS
- Use o domínio:
-
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:
-
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
- Domínio:
-
Docker local simplificado
- Siga os passos do "Jitsi Self-Hosted"
- Use
localhost:8443como domínio - Configure certificado autoassinado
Configuração de JWT no Servidor Jitsi
Para Jitsi Self-Hosted
1. Gerar JWT Secret
# Gerar secret seguro
openssl rand -hex 32
2. Configurar Prosody
Edite ~/.jitsi-meet-cfg/prosody/config/conf.d/jitsi-meet.cfg.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:
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
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
- Faça login como usuário com permissão de TI (TI_MASTER, TI_USUARIO ou ADMIN)
- Navegue para: TI > Configurações do Jitsi
Preenchimento de Campos
Domínio
- Formato: FQDN (ex:
meet.example.com) oulocalhost:porta(ex:localhost:8443) - Exemplos:
- Produção:
meet.example.com - Desenvolvimento:
localhost:8443 - JaaS:
8x8.vcou seu domínio personalizado
- Produção:
App ID
- Formato: Alfanumérico, pode conter hífens e underscores
- Exemplos:
sgse-app,my-app,app_123 - Onde encontrar:
- Self-hosted: Configurado no
.envcomoJWT_APP_ID - JaaS: Application ID no painel do JaaS
- Self-hosted: Configurado no
JWT Secret
- Requisitos: Mínimo 16 caracteres (recomendado: 32+)
- Onde encontrar:
- Self-hosted: Configurado no
.envcomoJWT_APP_SECRET - JaaS: Application Secret no painel do JaaS
- Self-hosted: Configurado no
- 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
- Preencha os campos básicos (Domínio, App ID)
- Clique em "Testar Conexão"
- Aguarde a validação
- 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
- Configure o JWT Secret
- Clique em "Gerar Token de Teste"
- 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:
- Verificar se o servidor está online:
ping meet.example.com - Verificar portas:
telnet meet.example.com 443 - Verificar firewall: Permitir portas 80, 443, 4443, 10000/udp
- Verificar DNS:
nslookup meet.example.com
Timeout de conexão
Sintomas: Conexão demora muito ou falha
Soluções:
- Verificar largura de banda
- Verificar latência de rede
- Verificar se há proxy ou firewall bloqueando
- Testar de outra rede
Erro de DNS
Sintomas: "DNS resolution failed"
Soluções:
- Verificar se o domínio está configurado corretamente
- Verificar registros DNS (A ou CNAME)
- Aguardar propagação DNS (até 48 horas)
Problemas de Certificado SSL
Certificado inválido
Sintomas: Aviso de certificado não confiável
Soluções:
- Produção: Usar certificado válido (Let's Encrypt)
- Desenvolvimento: Habilitar "Aceitar Certificados Autoassinados" no painel
Certificado autoassinado não aceito
Sintomas: Erro mesmo com opção habilitada
Soluções:
- Aceitar certificado manualmente no navegador na primeira conexão
- Adicionar exceção no navegador
- Para produção, usar certificado válido
Erro de cadeia de certificados
Sintomas: "Certificate chain incomplete"
Soluções:
- Verificar se o certificado inclui a cadeia completa
- Reinstalar certificado com cadeia completa
- Verificar configuração do servidor web
Problemas com JWT
Token inválido
Sintomas: Erro de autenticação ao conectar
Soluções:
- Verificar se JWT Secret está correto no servidor e no SGSE
- Verificar se App ID corresponde
- Verificar se token não expirou (padrão: 1 hora)
- Regenerar token
Token expirado
Sintomas: Conexão funciona inicialmente, depois falha
Soluções:
- Tokens são regenerados automaticamente
- Verificar se o relógio do servidor está sincronizado (NTP)
- Aumentar tempo de expiração (se necessário)
Secret incorreto
Sintomas: Erro de autenticação persistente
Soluções:
- Verificar JWT Secret no servidor (
.envou configuração) - Verificar JWT Secret no painel SGSE
- Garantir que são idênticos (sem espaços extras)
- Reiniciar serviços do Jitsi após alterar secret
Claims incorretos
Sintomas: Conexão estabelecida mas sem permissões
Soluções:
- Verificar claims do token (iss, aud, room, moderator)
- Verificar configuração do Prosody
- Verificar logs do servidor Jitsi
Problemas de Firewall
Portas bloqueadas
Sintomas: Conexão HTTP funciona, mas mídia não
Soluções:
- Abrir portas necessárias:
80/tcp,443/tcp(HTTP/HTTPS)4443/tcp(TURN)10000/udp(RTP/RTCP)
- Verificar regras de firewall
- Testar com
telnetounc
UDP não funcionando
Sintomas: Áudio/vídeo cortando ou não funcionando
Soluções:
- Verificar se UDP está habilitado no firewall
- Verificar se NAT está configurado corretamente
- Configurar TURN server para fallback
WebRTC bloqueado
Sintomas: Navegador não consegue estabelecer conexão WebRTC
Soluções:
- Verificar se WebRTC está habilitado no navegador
- Verificar se não há extensões bloqueando WebRTC
- 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:
- Verificar largura de banda disponível
- Reduzir número de participantes simultâneos
- Ajustar resolução nas configurações do Jitsi
- Verificar recursos do servidor (CPU, RAM)
Áudio cortando
Sintomas: Áudio intermitente ou com atraso
Soluções:
- Verificar latência de rede
- Verificar recursos do servidor
- Configurar codec de áudio adequado
- Verificar dispositivos de áudio do cliente
Alta latência
Sintomas: Atraso perceptível entre áudio/vídeo
Soluções:
- Verificar latência de rede (ping)
- Verificar localização do servidor (usar servidor próximo)
- Configurar TURN server próximo aos usuários
- Otimizar configurações de codec
Exemplos de Configuração
Exemplo 1: Desenvolvimento Local
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
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
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:
Ambiente: desenvolvimento
Domínio: localhost:8443
Staging:
Ambiente: staging
Domínio: meet-staging.example.com
Produção:
Ambiente: producao
Domínio: meet.example.com
Boas Práticas
Segurança
- Use HTTPS em produção: Sempre use certificados válidos
- JWT Secret forte: Mínimo 32 caracteres, use gerador seguro
- Rotação de secrets: Rotacione JWT secrets periodicamente
- Limitação de acesso: Configure firewall para permitir apenas IPs necessários (opcional)
- Logs de auditoria: Monitore logs para atividades suspeitas
Performance
- Recursos do servidor: Aloque recursos adequados (CPU, RAM, largura de banda)
- Otimização de codecs: Use codecs eficientes (VP8, Opus)
- Configuração de P2P: Habilite P2P para reduzir carga no servidor
- Monitoramento: Monitore métricas de CPU, RAM, largura de banda
Monitoramento
-
Logs importantes:
- Logs do Prosody (XMPP)
- Logs do Jicofo (conferências)
- Logs do JVB (vídeo bridge)
- Logs do nginx (web server)
-
Métricas a acompanhar:
- Número de participantes ativos
- Largura de banda utilizada
- CPU e RAM do servidor
- Latência de conexão
-
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:
- Consulte a seção de Troubleshooting acima
- Verifique os logs do servidor Jitsi
- Consulte a documentação oficial do Jitsi
- Entre em contato com a equipe de TI