Pular para o conteúdo principal

Supervisor

O Rouxinol depende de processos de longa duração rodando em segundo plano — o worker de filas e os listeners do Janus. O Supervisor garante que eles iniciem com o servidor e sejam reiniciados automaticamente se caírem.

Processos necessários​

ComandoFunção
php artisan queue:workProcessa a fila padrão (jobs gerais da aplicação).
php artisan queue:work --queue=realtime-callsProcessa a fila realtime-calls, usada durante o processamento das sessões de voz em tempo real.
php artisan janus:listenConecta ao Janus via WebSocket e escuta chamadas SIP recebidas, encaminhando o SDP para a URA ou agente configurado.
php artisan janus:whatsapp-listenConecta ao Janus via WebSocket e processa ligações do WhatsApp Cloud API, colocando chamador e agente de IA na mesma sala.

Os dois últimos são conexões persistentes — cada um deve rodar com apenas um processo. Os workers de fila podem ter mais de um processo (numprocs) se você precisar de mais throughput.

Instalando​

sudo apt update
sudo apt install -y supervisor
sudo systemctl enable --now supervisor

Configuração​

Crie /etc/supervisor/conf.d/rouxinol.conf (ajuste directory para o caminho real do projeto e user para o usuário que roda a aplicação):

[program:rouxinol-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/rouxinol/artisan queue:work --sleep=3 --tries=3
directory=/var/www/rouxinol
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/rouxinol/storage/logs/supervisor-queue.log
stopwaitsecs=3600

[program:rouxinol-queue-realtime-calls]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/rouxinol/artisan queue:work --queue=realtime-calls --sleep=3 --tries=3
directory=/var/www/rouxinol
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/rouxinol/storage/logs/supervisor-queue-realtime.log
stopwaitsecs=3600

[program:rouxinol-janus-listen]
command=php /var/www/rouxinol/artisan janus:listen
directory=/var/www/rouxinol
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/rouxinol/storage/logs/supervisor-janus-listen.log
stopwaitsecs=30

[program:rouxinol-janus-whatsapp-listen]
command=php /var/www/rouxinol/artisan janus:whatsapp-listen
directory=/var/www/rouxinol
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/rouxinol/storage/logs/supervisor-janus-whatsapp-listen.log
stopwaitsecs=30
dica

stopwaitsecs nas filas

Os programas de fila usam stopwaitsecs=3600 para dar tempo do worker terminar o job atual antes de ser encerrado (o Supervisor manda SIGTERM, que o queue:work trata como "pare após o job em andamento"). Sem isso, um deploy ou restart pode matar um job no meio da execução.

Aplicando a configuração​

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status

A saída deve mostrar os quatro grupos de processo como RUNNING:

rouxinol-queue:rouxinol-queue_00 RUNNING
rouxinol-queue:rouxinol-queue_01 RUNNING
rouxinol-queue-realtime-calls:rouxinol-queue-realtime-calls_00 RUNNING
rouxinol-janus-listen RUNNING
rouxinol-janus-whatsapp-listen RUNNING

Comandos úteis​

# Reiniciar tudo (ex: depois de um deploy)
sudo supervisorctl restart all

# Reiniciar só os workers de fila
sudo supervisorctl restart rouxinol-queue:*

# Ver os logs em tempo real
sudo supervisorctl tail -f rouxinol-janus-listen

:::warning Reinicie os workers após cada deploy O queue:work mantém o código da aplicação carregado em memória entre os jobs — se você alterar código sem reiniciar os workers, eles continuam rodando a versão antiga. Inclua sudo supervisorctl restart all (ou pelo menos os workers de fila) no seu processo de deploy. :::

Próximo passo​

Com a infraestrutura completa, volte para Instalação e Configuração para colocar o Rouxinol em funcionamento.