Ir para o conteúdo

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

  1. Visão em uma página
  2. Mapa de arquitetura
  3. Mapa de portas
  4. Fluxos operacionais
  5. Fluxo de deploy
  6. Cadeia de configuração
  7. Volumes e persistência
  8. Supervisor PHP 8.2.26
  9. Estrutura de pastas
  10. Matriz de dependências
  11. Comandos rápidos
  12. 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 + LorentzCTI Docker). 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.jsonctiMonitor.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

cd ~/lorentz-vps-stack
cp .env.example .env    # ajustar VPS_PUBLIC_IP, senhas
./scripts/deploy-all.sh

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/Dockerfilephp: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 supervisorsem 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.mdMonitorOPS
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.