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.