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.appObjetivo: 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:
- Alterar Issabel para HTTPS interno (ex.:
8443) —ISSABEL_HTTPS_PORT=8443noissabel.env - Manter SIP
:5060UDP/TCP e RTP10000-10100no hostnet (sem proxy) - Caddy/nginx escuta
:443público e fazreverse_proxy→127.0.0.1:8443parapbx.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:
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 →
:8443interno - [ ] Caddy
:443→ portal:8099, supervisor:8080 - [ ] Atualizar
.envURLs HTTPS (§7) - [ ]
./scripts/render-config.sh+ reload containers - [ ] Testar PWA em
https://orbitall.app
Fase 2 — Webphone + WSS (1–2 dias)¶
- [ ] Subdomínios
phone.ewss. - [ ] Atualizar
cfgLorentz008.json/ Issabel WSS - [ ] Teste chamada WebRTC fim-a-fim
Fase 3 — Ops + hardening (1 dia)¶
- [ ]
monitorops.eportainer.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 delorentzdocs.orbitall.net.br - [ ]
energy.orbitall.app - [ ] Redirects 301 domínios legados
Fase 5 — Automação no stack (backlog)¶
- [ ]
docker/caddy/ouscripts/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. |