Ir para o conteúdo

Plano de domínio — orbitall.app (apps, subdomínios e certificados)

Status: documento de planejamento — não implementado no stack atual (acesso hoje via IP + portas). Domínio registrado: orbitall.app Objetivo: HTTPS válido (Let's Encrypt), URLs amigáveis por app e PWA/WebRTC em contexto seguro.


1. Problema atual (IP + portas)

Nomenclatura: MonitorOPS = console infra :9090. MonitorCTI = dashboard CTI (/cti/, API :8090).

App URL hoje Limitação
Portal Orbitall http://IP:8099/ Sem TLS confiável; PWA exige :8443 autoassinado
Supervisor http://IP:8080/ HTTP; cookies/sessão sem HSTS
Webphone http://IP:8081/ WebRTC exige HTTPS em produção
MonitorOPS http://IP:9090/ HTTP; restrito à equipe TI
Issabel PBX https://IP:443/ Cert autoassinado; ocupa :443 no host
Energy http://IP:8082/ HTTP
Portainer https://IP:9443/ Cert interno
Docs http://lorentzdocs.orbitall.net.br/ Domínio legado separado

Conflito crítico: Issabel (hostnet) e futuro reverse proxy competem pela porta 443 do host.


2. Arquitetura alvo — reverse proxy na borda

Um proxy TLS único no host (fora da bridge Docker) termina HTTPS e roteia por Server Name (SNI) / subdomínio:

Internet :443 / :80
┌───────────────────────────────────────┐
│  Caddy ou nginx + certbot (HOST)      │
│  Let's Encrypt · renovação automática │
└───────────────────────────────────────┘
        │                    │
        │                    └── ACME HTTP-01 (:80 /.well-known)
        ├── orbitall.app          → 127.0.0.1:8099   (Portal)
        ├── supervisor.orbitall.app → 127.0.0.1:8080
        ├── phone.orbitall.app      → 127.0.0.1:8081
        ├── monitorops.orbitall.app → 127.0.0.1:9090  (IP allowlist)
        ├── pbx.orbitall.app        → 127.0.0.1:8443  (Issabel — ver §5)
        ├── wss.orbitall.app        → 127.0.0.1:8089  (Asterisk WSS)
        ├── energy.orbitall.app     → 127.0.0.1:8082
        ├── docs.orbitall.app       → site estático / outro host
        └── portainer.orbitall.app  → 127.0.0.1:9443  (opcional, IP restrito)

Recomendação de ferramenta

Opção Prós Contras
Caddy 2 (recomendado) TLS automático, config mínima, wildcard com DNS-01 Nova peça no host
nginx + certbot Familiar, flexível Mais arquivos; renovação via cron
Traefik (Docker) Integra Compose Issabel hostnet complica labels

Para primeiro deploy, preferir Caddy no host apontando para 127.0.0.1:<porta> dos containers já publicados.


3. Mapa oficial — subdomínio → app → backend

3.1 Produção (stack Lorentz VPS)

Subdomínio App / função Backend interno Público? Certificado
orbitall.app Portal Orbitall (hub + /cti/, /ura/) 127.0.0.1:8099 Sim LE apex
www.orbitall.app Redirect 301 → orbitall.app Sim LE (SAN ou CNAME)
supervisor.orbitall.app Supervisor CTI (call center) 127.0.0.1:8080 Sim (operadores) LE
phone.orbitall.app Lorentz Webphone (WebRTC) 127.0.0.1:8081 Sim (agentes) LE obrigatório
pbx.orbitall.app Issabel — admin PABX 127.0.0.1:8443* Sim (TI) LE
wss.orbitall.app Asterisk WebSocket (SIP.js) 127.0.0.1:8089 Sim (agentes) LE
monitorops.orbitall.app MonitorOPS (Flask, infra stack) 127.0.0.1:9090 Não — IP equipe LE + allowlist
energy.orbitall.app Lorentz Energy 127.0.0.1:8082 Conforme produto LE
docs.orbitall.app Documentação técnica CMS estático / VPS docs Sim LE
portainer.orbitall.app Portainer CE 127.0.0.1:9443 Não — TI only LE + allowlist

Após mover Issabel HTTPS para porta interna (§5). Enquanto Issabel usar :443 no host, o proxy não pode escutar :443 — migrar Issabel primeiro ou usar IP dedicado.

3.2 Paths no Portal (sem subdomínio extra)

Manter dentro de https://orbitall.app/ — já implementado:

Path Conteúdo Proxy interno
/ Hub orbital V5 estático nginx portal
/cti/ Dashboard CTI Monitor /api/cti/monitor/lorentz-cti:8090
/ura/ Dashboard URA estático (futuro API)
/gravador/ Placeholder estático
/energy/ Redirect ou iframe opcional — preferir subdomínio energy.

Não criar cti.orbitall.app separado na fase 1 — evita CORS/cookies duplicados; o proxy CTI já está no portal.

3.3 APIs (opcional fase 2)

Subdomínio Uso Backend
api.orbitall.app REST Supervisor JWT 127.0.0.1:8080/api/
cti-api.orbitall.app Monitor API direta (TI) 127.0.0.1:8090 + header X-Monitor-Api-Key

Preferência: manter Monitor API atrás do portal (/api/cti/monitor/) e restringir :8090 a localhost.

3.4 Domínios legados

Legado Ação sugerida
orbitall.net.br Site institucional — manter; link no portal (developerUrl)
lorentzdocs.orbitall.net.br Migrar conteúdo → docs.orbitall.app; redirect 301

4. Registros DNS (Route 53 ou registrador)

Apontar todos para VPS_PUBLIC_IP (A record) ou ALB futuro.

Nome Tipo Valor TTL
@ (apex) A 3.93.232.33 300
www CNAME orbitall.app 300
supervisor A 3.93.232.33 300
phone A 3.93.232.33 300
pbx A 3.93.232.33 300
wss A 3.93.232.33 300
monitorops A 3.93.232.33 300
energy A 3.93.232.33 300
docs A 3.93.232.33 300
portainer A 3.93.232.33 300

Wildcard (opcional): *.orbitall.app A → mesmo IP — simplifica novos subdomínios; certificado wildcard exige DNS-01 (API Route 53).

E-mail / marketing: configurar MX, SPF, DKIM em registros separados — não conflita com A dos subdomínios de app.


5. Issabel + SIP + WebRTC com domínio

5.1 Liberar porta 443 para o proxy

Ordem obrigatória:

  1. Alterar Issabel para HTTPS interno (ex.: 8443) — ISSABEL_HTTPS_PORT=8443 no issabel.env
  2. Manter SIP :5060 UDP/TCP e RTP 10000-10100 no hostnet (sem proxy)
  3. Caddy/nginx escuta :443 público e faz reverse_proxy127.0.0.1:8443 para pbx.orbitall.app

5.2 Webphone + WSS

Atualizar .env / config WebRTC:

ISSABEL_SIP_EXTERNAL_ADDRESS=orbitall.app
# ou host SIP explícito:
# SIP_DOMAIN=sip.orbitall.app  (futuro — requer registro DNS SRV)

WEBRTC_WSS_URL=wss://wss.orbitall.app/ws
ISSABEL_WSS_PORT=8089
WEBPHONE_PUBLIC_URL=https://phone.orbitall.app/

No cfgLorentz008.json (render-config): servidor WSS = wss.orbitall.app, porta 443 (proxy) → backend 8089.

Doc detalhada: 14-issabel-webrtc-wss.md

5.3 Certificado SIP/TLS (opcional)

Ramais SIP TLS (não WSS) podem usar certificado do proxy ou cert separado — fase 3.


6. Certificados TLS — estratégia

6.1 Let's Encrypt (recomendado)

Método Quando usar
HTTP-01 (:80) Subdomínios individuais; Caddy/certbot padrão
DNS-01 (Route 53) Wildcard *.orbitall.app + apex

Renovação: automática (Caddy) ou cron certbot renew + reload nginx.

6.2 O que deixar de usar após migração

Item Substituir por
Portal :8443 autoassinado https://orbitall.app (LE)
Script install-portal-cert.ps1 Desnecessário com LE confiável
Issabel cert autoassinado LE via pbx.orbitall.app
Acesso https://IP:9443 Portainer https://portainer.orbitall.app

6.3 HSTS e PWA

Com LE válido em orbitall.app:

  • PWA instala sem aviso de certificado
  • manifest.webmanifest"start_url": "https://orbitall.app/"
  • Habilitar HSTS no proxy (Caddy: default)

7. Variáveis .env — mapeamento pós-domínio

Bloco sugerido para .env (substituir IP):

ORBITALL_DOMAIN=orbitall.app

PORTAL_PUBLIC_URL=https://orbitall.app/
SUPERVISOR_PUBLIC_URL=https://supervisor.orbitall.app/
WEBPHONE_PUBLIC_URL=https://phone.orbitall.app/
MONITOR_PUBLIC_URL=https://monitorops.orbitall.app/
ISSABEL_PUBLIC_URL=https://pbx.orbitall.app/
ENERGY_PUBLIC_URL=https://energy.orbitall.app/
DOCS_PUBLIC_URL=https://docs.orbitall.app/

# Portas internas (containers) — inalteradas
PORTAL_HTTP_PORT=8099
SUPERVISOR_HTTP_PORT=8080
WEBPHONE_HTTP_PORT=8081
MONITOR_HTTP_PORT=9090
ENERGY_HTTP_PORT=8082
ISSABEL_HTTPS_PORT=8443

# Proxy edge (host)
EDGE_TLS_ENABLED=1
EDGE_HTTP_PORT=80
EDGE_HTTPS_PORT=443

Após editar: ./scripts/render-config.sh → regenera portal.apps.json, att_config.php, configs Webphone.

Atualizar também portal.apps.json.template → URL docs:

"url": "https://docs.orbitall.app/"

8. Exemplo Caddyfile (referência)

Arquivo no host: /etc/caddy/Caddyfile

{
    email ti@orbitall.net.br
}

orbitall.app, www.orbitall.app {
    redir www.orbitall.app https://orbitall.app{uri} permanent
    reverse_proxy 127.0.0.1:8099
}

supervisor.orbitall.app {
    reverse_proxy 127.0.0.1:8080
}

phone.orbitall.app {
    reverse_proxy 127.0.0.1:8081
}

pbx.orbitall.app {
    reverse_proxy 127.0.0.1:8443
}

wss.orbitall.app {
    reverse_proxy 127.0.0.1:8089
}

energy.orbitall.app {
    reverse_proxy 127.0.0.1:8082
}

docs.orbitall.app {
    reverse_proxy 127.0.0.1:8083
    # ou root /var/www/docs
}

monitorops.orbitall.app {
    @blocked not remote_ip 203.0.113.0/24 198.51.100.50
    respond @blocked 403
    reverse_proxy 127.0.0.1:9090
}

portainer.orbitall.app {
    @blocked not remote_ip 203.0.113.0/24
    respond @blocked 403
    reverse_proxy https://127.0.0.1:9443 {
        transport http {
            tls_insecure_skip_verify
        }
    }
}

Ajustar remote_ip para IPs reais da equipe / VPN.


9. Security Group AWS — portas após domínio

Porta Antes Depois (ideal)
443 Issabel direto Caddy/nginx (único entry HTTPS)
80 Opcional Obrigatório (ACME + redirect HTTP→HTTPS)
8080, 8081, 8099, 9090 Públicos Fechar — só localhost; acesso via proxy
5060 UDP/TCP Público Manter (SIP)
8089 Público Pode fechar se WSS só via wss.orbitall.app:443
10000-10100 UDP RTP Manter
8090 Monitor API CTI 127.0.0.1 only — proxy via portal

Script futuro sugerido: scripts/open-aws-port-443.sh, scripts/harden-post-domain.sh (remove portas expostas).


10. Fases de implementação

Fase 0 — DNS (1 dia)

  • [x] Criar registros A/CNAME (§4)
  • [x] Validar propagação: dig +short supervisor.orbitall.app

Fase 1 — Proxy + Portal + Supervisor (2–3 dias)

  • [ ] Instalar Caddy no host
  • [ ] Migrar Issabel HTTPS → :8443 interno
  • [ ] Caddy :443 → portal :8099, supervisor :8080
  • [ ] Atualizar .env URLs HTTPS (§7)
  • [ ] ./scripts/render-config.sh + reload containers
  • [ ] Testar PWA em https://orbitall.app

Fase 2 — Webphone + WSS (1–2 dias)

  • [ ] Subdomínios phone. e wss.
  • [ ] Atualizar cfgLorentz008.json / Issabel WSS
  • [ ] Teste chamada WebRTC fim-a-fim

Fase 3 — Ops + hardening (1 dia)

  • [ ] monitorops. e portainer. com IP allowlist
  • [ ] Fechar portas 8080/8081/8099/9090 no Security Group
  • [ ] Desativar cert autoassinado portal :8443 (opcional)

Fase 4 — Docs + Energy + marketing (conforme demanda)

  • [ ] docs.orbitall.app — migrar de lorentzdocs.orbitall.net.br
  • [ ] energy.orbitall.app
  • [ ] Redirects 301 domínios legados

Fase 5 — Automação no stack (backlog)

  • [ ] docker/caddy/ ou scripts/install-edge-proxy.sh
  • [ ] Template Caddyfile.template + render-edge-config.sh
  • [ ] Variáveis ORBITALL_* no .env.example
  • [ ] MonitorOPS: card "Status certificados" (expiry LE)

11. Diagrama resumo

flowchart TB
    subgraph DNS["DNS orbitall.app"]
        A1[orbitall.app]
        A2[supervisor.orbitall.app]
        A3[phone.orbitall.app]
        A4[pbx.orbitall.app]
        A5[wss.orbitall.app]
    end

    subgraph VPS["VPS — host"]
        Caddy["Caddy :443/:80<br/>Let's Encrypt"]
        P8099["Portal :8099"]
        P8080["Supervisor :8080"]
        P8081["Webphone :8081"]
        P8443["Issabel :8443"]
        P8089["Asterisk WSS :8089"]
    end

    A1 & A2 & A3 & A4 & A5 --> Caddy
    Caddy --> P8099
    Caddy --> P8080
    Caddy --> P8081
    Caddy --> P8443
    Caddy --> P8089

12. Checklist de validação pós-cutover

# TLS válido (sem -k)
curl -sI https://orbitall.app/health | head -1
curl -sI https://supervisor.orbitall.app/login.php | head -1
curl -sI https://phone.orbitall.app/ | head -1

# Portal CTI via proxy
curl -s -H "X-Monitor-Api-Key: $KEY" https://orbitall.app/api/cti/monitor/snapshot | head -c 200

# ACME renovação
sudo caddy validate --config /etc/caddy/Caddyfile

13. Documentação relacionada

Documento Conteúdo
20-portal-orbitall.md Portal, /cti/, proxy Monitor API
09-integracao-e-redes.md Portas e fluxos atuais
10-firewall-aws-security-group.md Regras AWS
14-issabel-webrtc-wss.md WSS + Webphone
ENTREGA-V1.9.md URLs atuais homologação

14. Histórico

Data Notas
2026-07-10 Plano inicial após registro de orbitall.app. Stack continua operando por IP até Fase 1.