Mapa e fluxo — Ambiente Lorentz VPS Stack¶
Documento de referência rápida: o que existe na VPS, como os componentes se conectam e em que ordem implantar/operar.
Stack atual: Supervisor migrado para PHP 8.2.26 (Apache + sqlsrv).
Detalhes técnicos numerados: 00-indice.md.
Índice rápido deste mapa¶
- Visão em uma página
- Mapa de arquitetura
- Mapa de portas
- Fluxos operacionais
- Fluxo de deploy
- Cadeia de configuração
- Volumes e persistência
- Supervisor PHP 8.2.26
- Estrutura de pastas
- Matriz de dependências
- Comandos rápidos
- Documentação relacionada
1. Visão em uma página¶
O lorentz-vps-stack empacota o contact center Lorentz legado para uma VPS Linux (AWS EC2, Hostinger, etc.):
Duas plantas: esta stack implementa a Planta A (Issabel/Asterisk +
LorentzCTIDocker). Clientes com Intelbras Impacta CSTA usam deploy isolado — ver 21-plano-deploy-impacta-csta.md.
| Pilar | Componente | Onde roda | Função |
|---|---|---|---|
| Telefonia | Issabel PBX (Asterisk 18) | Docker hostnet (issabel-prod) |
SIP, filas, gravações, AMI, WSS WebRTC |
| CTI | LorentzCTI (.NET 9) | Container lorentz-cti |
Agentes :8000, Phoenix :3000, URA :4000, Monitor API :8090 |
| Supervisão | Supervisor (PHP 8.2.26) | Container lorentz-supervisor |
Painel web, campanhas, relatórios, API JWT |
| Dados | SQL Server 2022 | Container lorentz-sqlserver |
Banco central LorentzCTI |
| MonitorOPS | MonitorOPS (Flask) | Container lorentz-monitor |
Dashboard infra, diagnóstico, editor .env |
| Portal | Orbitall Hub (nginx) | Container lorentz-portal |
Hub HTTP :80 — menu V5 das apps |
| Opcional | Webphone (Expo/nginx) | Profile webphone |
Softphone no browser |
| Opcional | Portainer CE | Profile portainer |
UI Docker |
Dois mundos de rede:
- Bridge Compose (
lorentz_default) — SQL, CTI, Supervisor, Monitor - Host network — Issabel (SIP/RTP não toleram NAT Docker)
Dois bancos distintos (não integrados):
- SQL Server
LorentzCTI→ CTI + Supervisor - MariaDB interna ao Issabel → config Asterisk / RoundCube
2. Mapa de arquitetura¶
flowchart TB
subgraph Internet["Internet / operação"]
SUP_USER["Supervisor / relatórios<br/>HTTP :8080"]
ISS_USER["Admin Issabel<br/>HTTPS :443"]
AGT_DESK["Agente desktop<br/>TCP :8000 + SIP"]
AGT_WEB["Webphone browser<br/>HTTP :8081 + WSS :8089"]
OPS["Equipe TI<br/>MonitorOPS :9090"]
PORTAL["Visitante / equipe<br/>HTTP :80 Hub"]
end
subgraph VPS["VPS Linux"]
subgraph HostNet["Rede HOST — Issabel"]
ISS["issabel-prod<br/>Apache Asterisk MariaDB"]
end
subgraph Compose["Docker Compose — lorentz_default"]
SQL[("lorentz-sqlserver<br/>LorentzCTI :1433")]
CTI["lorentz-cti<br/>.NET 9<br/>:3000 :8000 :4000"]
SUP["lorentz-supervisor<br/>PHP 8.2.26 Apache<br/>:8080→80"]
WP["lorentz-webphone<br/>nginx :8081"]
MON["lorentz-monitor<br/>Flask :9090"]
PORT["lorentz-portal<br/>nginx :80"]
POR["portainer :9443"]
end
end
SUP_USER --> SUP
ISS_USER --> ISS
AGT_DESK --> CTI
AGT_DESK -->|SIP/RTP 5060 10000-10100| ISS
AGT_WEB --> WP
AGT_WEB -->|wss://IP:8089/ws| ISS
AGT_WEB -->|API REST| SUP
OPS --> MON
PORTAL --> PORT
PORT -->|links| SUP
PORT -->|links| MON
PORT -->|links| WP
PORT -->|links| ISS
SUP -->|sqlsrv TCP 1433| SQL
SUP -->|Phoenix TCP 3000| CTI
CTI -->|ODBC TCP 1433| SQL
CTI -->|AMI TCP 5038<br/>host.docker.internal| ISS
MON -->|docker.sock| Compose
MON -->|compose em /issabel| ISS
POR -->|docker.sock| Compose
3. Mapa de portas (host)¶
| Porta | Proto | Serviço | Container / host | Expor na internet? |
|---|---|---|---|---|
| 22 | TCP | SSH | host | Sim (IP restrito) |
| 8088 | TCP | Issabel HTTP (legado/redirect) | issabel-prod (hostnet) |
Opcional |
| 80 | TCP | Portal Orbitall | lorentz-portal |
Sim |
| 443 | TCP | Issabel HTTPS | hostnet | Sim |
| 5060 | UDP/TCP | SIP | hostnet | Sim |
| 10000–10100 | UDP | RTP mídia | hostnet | Sim |
| 8080 | TCP | Supervisor web | lorentz-supervisor |
Sim |
| 8081 | TCP | Webphone (opcional) | lorentz-webphone |
Sim |
| 8089 | TCP | Asterisk WSS WebRTC | hostnet | Sim |
| 9090 | TCP | MonitorOPS | lorentz-monitor |
Equipe / IP fixo |
| 9443 / 9000 | TCP | Portainer (opcional) | lorentz-portainer |
Equipe / IP fixo |
| 1433 | TCP | SQL Server | lorentz-sqlserver |
Não (default 127.0.0.1) |
| 3000 | TCP | Phoenix / Concentre | lorentz-cti |
VPN / interno |
| 4000 | TCP | URA XML | lorentz-cti |
Interno |
| 5038 | TCP | AMI Asterisk | hostnet | Não |
| 8000 | TCP/UDP | Agentes / monitor CTI legado | lorentz-cti |
VPN / agentes |
| 8090 | HTTP | Monitor API (substituto MonitorCTI desktop) | lorentz-cti |
TI / proxy Portal |
| 8099 | HTTP | Portal Orbitall (hub + /cti/) |
lorentz-portal |
Operacional |
| 8443 | HTTPS | Portal Orbitall PWA | lorentz-portal |
Instalar App |
Não há nginx reverso único — cada app publica porta própria no host.
4. Fluxos operacionais¶
4.1 Supervisor web (supervisor → CTI → SQL)¶
Browser
→ http://VPS:8080/login.php
→ Apache + PHP 8.2.26 (lorentz-supervisor)
├─ sqlsrv → sqlserver:1433 / LorentzCTI (SAC_FUNCIONARIO, CTI_*, SAC_*)
└─ TCP :3000 STX/ETX → lorentz-cti (Phoenix / PowerDialing)
└─ AMI :5038 → Issabel + SQL
Config gerada: config/runtime/att_config.php
Chaves: EW_SQLSERVER=sqlserver, EW_PHOENIX_SERVER=lorentz-cti, EW_PHOENIX_PORTA=3000
4.2 Agente desktop (LorentzCliente)¶
Cliente Lorentz.exe
→ TCP VPS:8000 (eventos CTI, estados)
→ SIP/RTP VPS:5060 (voz via Issabel)
→ gravações / screen pop conforme INI
4.3 Webphone (opcional)¶
Browser
→ http://VPS:8081/ (app estático nginx)
→ wss://VPS:8089/ws (SIP.js → Asterisk)
→ http://VPS:8080/api/... (Supervisor web_agent / JWT)
Config: config/runtime/cfgLorentz008.json + ramal WEBRTC_EXTENSION no .env
4.4 CTI Monitor (Portal → API REST/SSE)¶
Browser
→ http://VPS:8099/cti/ (dashboard estático)
→ EventSource /api/cti/monitor/stream (SSE ~2s, via nginx)
└─ proxy → lorentz-cti:8090/api/monitor/*
└─ MonitorApiHost (LorentzCTI)
└─ colProcesso / colDispositivo (mesmos dados do MonitorCTI UDP)
Config: config/runtime/portal.apps.json → ctiMonitor.apiBase, apiKey, useSse: true
Doc: 07-lorentz-cti-servidor.md · 20-portal-orbitall.md
Planta B (Impacta): mesma API no
LorentzCTI.Impacta(systemd); dashboard copiável ou proxy dedicado — 21-plano-deploy-impacta-csta.md.
4.5 Admin Issabel + tema Orbitall¶
Browser → https://VPS/
→ Apache Issabel (hostnet)
→ MariaDB interna (globals, extensions, filas)
→ Tema: themes/lorentzpbx (paleta Pantone Orbitall)
Variáveis: ISSABEL_THEME=lorentzpbx, ISSABEL_THEME_ACTIVATE=1
4.6 Portal Orbitall (hub :8099)¶
Browser → http://VPS/
→ nginx (lorentz-portal)
→ index.html (layout orbital V5)
→ config.json (links das apps)
→ rodapé → https://orbitall.net.br/
4.7 MonitorOPS (dashboard infra :9090)¶
Browser → http://VPS:9090/
→ Flask + docker.sock
→ lê/edita /stack (.env), diagnostica portas, SQL, AMI
→ compose em ISSABEL_DIR para Issabel
5. Fluxo de deploy (ordem obrigatória)¶
flowchart LR
A["0. Build dev<br/>net9.0.zip"] --> B["1. Transferir<br/>stack + supervisor"]
B --> C["2. Host prep<br/>Docker + swap"]
C --> D["3. .env +<br/>render-config.sh"]
D --> E["4. check-pre-install"]
E --> F["5. deploy-issabel.sh<br/>hostnet + tema"]
F --> G["6. deploy-stack.sh<br/>SQL CTI Supervisor Monitor"]
G --> H["7. Opcionais<br/>webphone portainer"]
H --> I["8. restore SQL<br/>.bak ou bootstrap"]
I --> J["9. validate-install<br/>--external"]
J --> K["10. systemd<br/>autostart"]
Script orquestrador¶
Equivale a:
| Passo | Script |
|---|---|
| Pré-requisitos host | install-host-prerequisites.sh |
| Checklist | check-pre-install.sh |
| Gerar configs | render-config.sh |
| PBX | deploy-issabel.sh |
| Stack Docker | deploy-stack.sh |
| Validar | validate-install.sh |
| Autostart | install-systemd-stack.sh |
Opcionais (não sobem no deploy-all / deploy-stack padrão):
Ver tabela completa: 25-guia-scripts-deploy.md.
./scripts/deploy-webphone.sh # profile webphone
./scripts/deploy-lorentz-energy.sh # profile energy
./scripts/deploy-licenca.sh # profile licenca
./scripts/deploy-lab-local.sh # lab WSL (sem Issabel)
./scripts/deploy-portainer.sh # profile portainer
6. Cadeia de configuração¶
.env
└── scripts/render-config.sh
├── config/runtime/att_config.php → Supervisor (SQL, Phoenix, URL)
├── config/runtime/api-att_config.php → API Supervisor
├── config/runtime/LorentzCTI.ini → LorentzCTI (SQL, AMI, portas)
├── config/runtime/cfgLorentz008.json → Webphone
└── issabel4-docker/.env (via deploy) → Issabel hostnet
Variável .env |
Efeito |
|---|---|
VPS_PUBLIC_IP |
SIP externip, URLs públicas, WSS |
MSSQL_SA_PASSWORD |
SA SQL Server (legado CTI: Jubilu2024) |
MSSQL_BIND_IP |
127.0.0.1 = SQL só local |
SUPERVISOR_HTTP_PORT / SUPERVISOR_PUBLIC_URL |
Porta e links PHP |
LORENTZ_CTI_PBX_IP |
host.docker.internal → AMI no host |
ISSABEL_DIR |
Caminho clone issabel4-docker |
ISSABEL_THEME |
lorentzpbx (Orbitall) |
7. Volumes e persistência¶
| Volume / mount | Conteúdo |
|---|---|
lorentz-sqlserver-data |
Dados MSSQL |
lorentz-sqlserver-backups |
.bak para restore |
lorentz-cti-logs |
Logs CTI |
supervisor-uploads |
Uploads PHP |
supervisor-log |
Logs Supervisor |
../supervisor → /var/www/html |
Código PHP (bind mount live) |
portainer-data |
Estado Portainer |
Volumes Issabel (issabel_*) |
etc, mysql, spool Asterisk |
8. Supervisor PHP 8.2.26¶
| Item | Valor |
|---|---|
| Código-fonte | ../supervisor/ (monorepo omnichannel) |
| Container | lorentz-supervisor |
| Imagem | docker/supervisor/Dockerfile → php:8.2.26-apache-bookworm |
| Extensões | gd, mbstring, xml, zip, mysqli, sqlsrv 5.12.0, pdo_sqlsrv, ODBC 18 |
| Healthcheck | GET /login.php |
| Atualizar só PHP | Sync supervisor/ + docker compose restart supervisor — sem rebuild |
| Atualizar Dockerfile/extensões | docker compose build supervisor |
Guia de patch em produção: 16-atualizacao-supervisor-web.md
9. Estrutura de pastas (stack)¶
lorentz-vps-stack/
├── docker-compose.yml # Stack principal
├── docker-compose.source.yml # Override build CTI (dev)
├── docker-compose.webphone.yml # Override webphone
├── .env.example # Variáveis de ambiente
├── config/
│ ├── templates/ # att_config, LorentzCTI.ini, webphone JSON
│ └── runtime/ # Gerado por render-config.sh (gitignore prod)
├── docker/
│ ├── supervisor/ # Dockerfile PHP 8.2.26
│ ├── lorentz-cti/ # Dockerfile.runtime .NET 9
│ ├── lorentz-webphone/ # Build Expo + nginx
│ ├── monitor/ # Dashboard Flask
│ └── sqlserver/init/ # Bootstrap SQL
├── scripts/ # deploy-*, validate, backup, AWS ports
├── themes/ # lorentzpbx (Orbitall), lorentzaxis, …
├── resources/ # net9.0.zip, supervisor.tar.gz, systemd
├── dist/ # Pacotes para equipe suporte
└── docs/ # Documentação numerada 00–19
Fora do pacote (mesmo host ou monorepo):
| Path | Uso |
|---|---|
../supervisor/ |
PHP Supervisor (bind mount) |
../server/LorentzCTI/ |
Fonte CTI (build dev) |
../lorentz-webphone/ |
Fonte webphone |
$ISSABEL_DIR (ex. ~/issabel4-docker) |
PBX hostnet |
10. Matriz de dependências¶
┌─────────────┐
│ SQL Server │◄────────────────┐
└──────┬──────┘ │
│ healthy │ sqlsrv
┌────────────┼────────────┐ │
▼ ▼ │ │
┌──────────┐ ┌──────────┐ │ ┌─────────────┐
│ Lorentz │ │Supervisor│─────┘ │ MonitorOPS │
│ CTI │──►│ PHP 8.2 │ │ (observa) │
└────┬─────┘ └──────────┘ └─────────────┘
│ AMI :5038
▼
┌──────────┐
│ Issabel │ (independente do Compose — sobe antes ou em paralelo)
│ PBX │
└──────────┘
Ordem de subida: SQL (+ dados) → Issabel (+ AMI) → CTI → Supervisor → opcionais
11. Comandos rápidos (operação)¶
# Status
docker compose ps
./scripts/diagnose-stack.sh # serviços up/down + soluções
./scripts/diagnose-all.sh # wrapper + logs
# Logs
docker compose logs -f supervisor lorentz-cti sqlserver
# Reiniciar Supervisor após sync PHP
docker compose restart supervisor
# Backup SQL
./scripts/backup-sql.sh
# Atualizar Supervisor na VPS
./scripts/update-supervisor-web.sh
# Validar portas externas
./scripts/validate-install.sh --external
# Parar stack (não para Issabel)
./scripts/stop-stack.sh
12. Documentação relacionada¶
| Tema | Documento |
|---|---|
| Índice completo | 00-indice.md |
| Arquitetura detalhada | 01-visao-geral-arquitetura.md |
| Portas e integração | 09-integracao-e-redes.md |
| Supervisor PHP | 08-supervisor-web.md |
| Atualizar Supervisor | 16-atualizacao-supervisor-web.md |
| Issabel + WSS | 06-issabel-pbx.md, 14-issabel-webrtc-wss.md |
| Monitor | 17-dashboard-monitoramento.md — MonitorOPS |
| CTI Monitor + API | 07-lorentz-cti-servidor.md, 20-portal-orbitall.md |
| Planta B Impacta CSTA | 21-plano-deploy-impacta-csta.md |
| Deploy VPS nova | 13-maquina-nova-stack-aws-cli.md |
| Instalação suporte (5 passos) | Instalação completa |
| Tema Orbitall | themes/lorentzpbx/css/orbitall-tokens.json |
Última revisão: jul/2026 — Supervisor PHP 8.2.26, LorentzCTI .NET 9, Issabel 4 hostnet.