Ir para o conteúdo

48 — Omnichannel-System junto do legado

O Supervisor (PHP, SQL Server LorentzCTI) continua sendo o contact center em produção. O Omnichannel-System (Laravel 12, MySQL, Redis) é o projeto que assume esse lugar. Nesta fase os dois sobem no mesmo ambiente e se encontram pelo Portal e pelo MonitorOPS. Cada um guarda o seu banco.

Não misture os composes. O arquivo omnichannel-system/docker-compose.yml publica a porta 8090, que já é a Monitor API do LorentzCTI. O stack usa só docker-compose.vps.yml, na porta 8095.


O que sobe

Container Função
omnichannel_nginx HTTP do Laravel
omnichannel_app PHP-FPM
omnichannel_queue Filas
omnichannel_scheduler Agendador
omnichannel_db MySQL 8 (omnichannel) — não é o SQL Server do legado
omnichannel_redis Cache, sessão e fila
omnichannel_waha WhatsApp. Só com --with-waha. Fica em 127.0.0.1:3001

Código: pasta irmã ../omnichannel-system (OMNICHANNEL_DIR).


Onde entra em cada ambiente

Ambiente Comando Quem alcança o Laravel
Lab WSL ./scripts/deploy-lab-local.sh (já chama o script abaixo) http://127.0.0.1:8095/
Homologação 192.168.144.89 O mesmo script, com VPS_PUBLIC_IP=192.168.144.89 http://192.168.144.89:8095/
VPS ./scripts/deploy-all.sh ou ./scripts/deploy-omnichannel.sh --vps https://omnichannel.<domínio>/ via Caddy. A 8095 não abre no firewall

Para não subir o Laravel no lab: ./scripts/deploy-lab-local.sh --skip-omnichannel.

Se a pasta omnichannel-system não existir, o script avisa e o legado segue sozinho.


Passo a passo

1. Código ao lado do stack

omnichannel/
├── lorentz-vps-stack/
├── supervisor/              ← legado
└── omnichannel-system/      ← Laravel

Na VPS, o mesmo layout em ~/omnichannel/.

2. Subir

cd ~/omnichannel/lorentz-vps-stack   # ou /mnt/d/omnichannel/lorentz-vps-stack
chmod +x scripts/*.sh

# Lab ou homologação Windows/WSL (bind 0.0.0.0)
./scripts/deploy-omnichannel.sh --lab

# VPS (bind 127.0.0.1, atrás do Caddy)
./scripts/deploy-omnichannel.sh --vps

O script:

  1. Cria omnichannel-system/.env a partir de .env.vps.example se ainda não houver arquivo
  2. Grava OMNICHANNEL_APP_URL, a porta e o bind. O APP_URL usado pelo composer dev no host não é trocado
  3. No lab, se DB_PASSWORD / DB_ROOT_PASSWORD ainda forem CHANGE_ME, grava senha inicial de laboratório
  4. Gera APP_KEY se estiver vazio
  5. Sobe o compose e roda php artisan migrate --force

Senhas iniciais somente quando o .env ainda está no exemplo, em modo lab:

Variável Valor inicial
DB_PASSWORD LabOmni_2026!
DB_ROOT_PASSWORD LabOmni_Root2026!

Na VPS o script recusa seguir com CHANGE_ME. Troque antes.

3. Conferir

curl -sI http://127.0.0.1:8095/login | head -5
docker ps --format '{{.Names}} {{.Status}}' | grep omnichannel_

No Portal (:8099), o cartão Suporte aponta para OMNICHANNEL_PUBLIC_URL + suporte.

No MonitorOPS (:9090), o grupo Omnichannel lista app, nginx, MySQL, Redis e WAHA.

4. Parar

./scripts/deploy-omnichannel.sh --stop

Volumes do MySQL e do Redis permanecem. ./scripts/deploy-lab-local.sh --stop para o legado e o Laravel.


Integração nesta fase

Ligação Como
Menu Portal Orbitall → Suporte → Omnichannel-System
Operação MonitorOPS reinicia, reconstrói e lê o .env do Laravel
Dados SQL Server LorentzCTI (Supervisor / CTI) e MySQL omnichannel (Laravel) ficam separados
Telefonia Continua no LorentzCTI + Issabel. O Laravel ainda não substitui o CTI
WhatsApp Profile waha, opcional: ./scripts/deploy-omnichannel.sh --lab --with-waha

O container força DB_CONNECTION=mysql e DB_HOST=db. Isso vale dentro do Docker. O PHP no Windows, fora do container, continua com o DB_CONNECTION do .env do projeto.


Requisitos a mais

Além do legado (doc 47 ou doc 02):

Recurso Acréscimo
RAM Cerca de 2 GB (MySQL + Redis + PHP + fila). Em WSL de 8 GB, baixe MSSQL_MEMORY_LIMIT_MB para 1536
Disco Cerca de 8 GB (imagem PHP com vendor/build + volume MySQL)
Porta lab/homolog TCP 8095 na LAN. Não use 8090
Porta VPS 8095 só em localhost. Público: 443 no hostname omnichannel.
Clone omnichannel-system com Dockerfile e docker-compose.vps.yml

Build da imagem na primeira vez pode levar vários minutos (Composer e frontend dentro do Docker).


Homologação na 192.168.144.89

No .env do stack, antes do deploy:

VPS_PUBLIC_IP=192.168.144.89
OMNICHANNEL_PUBLIC_URL=http://192.168.144.89:8095/
OMNICHANNEL_HTTP_PORT=8095
OMNICHANNEL_DIR=../omnichannel-system

Inclua 8095 na regra de firewall da LAN (perfil Privado). O SQL Server do legado e o MySQL do Laravel continuam sem porta publicada para outros PCs.

Aceite: de outro PC, http://192.168.144.89:8095/login responde, e o cartão Suporte do Portal abre esse endereço.


Problemas frequentes

Sintoma Ação
Porta 8090 ocupada ou CTI Monitor cai ao subir o Laravel Algum compose antigo do Omnichannel publicou 8090. Pare esses containers e use só docker-compose.vps.yml
FALHA: defina DB_PASSWORD VPS: edite omnichannel-system/.env
Login do Laravel em loop no HTTP do lab OMNICHANNEL_SESSION_SECURE tem de ser false no lab. Rode de novo ./scripts/deploy-omnichannel.sh --lab
Portal ainda aponta para orbitall.app Ajuste OMNICHANNEL_PUBLIC_URL e rode ./scripts/render-config.sh
Pasta ausente O legado sobe; o script só avisa. Clone omnichannel-system e rode o deploy de novo

Histórico

Data Notas
2026-09-28 Deploy integrado ao lab, à homologação LAN e à VPS. Compose na porta 8095