38 — VPS Hostinger — passo a passo (Lorentz VPS Stack)¶
Guia operacional para KVM Hostinger + Ubuntu 22.04 LTS + stack Lorentz (Docker Compose, Issabel,
orbitall.app).Migração AWS → Hostinger: 37-migracao-vps-aws-hostinger.md
Instalação completa (referência): INSTALACAO-SUPORTE.md
Deploy genérico: 13-maquina-nova-stack-aws-cli.md (Caminho B)
Tempo estimado: 3–6 h (primeira vez; Issabel + ISO ~1,9 GB).
Visão geral das fases¶
| Fase | Onde | Resumo |
|---|---|---|
| 1 | hPanel | Criar VPS, chave SSH, anotar IP |
| 2 | PC | SSH, Cursor (opcional), .env.production |
| 3 | hPanel + VPS | Firewall portas |
| 4 | VPS | Docker, swap, pré-requisitos |
| 5 | VPS | Clone Git + .env na VPS |
| 6 | PC → VPS | Zips .NET (net9.0.zip, etc.) |
| 7 | VPS | render-config.sh, checklist |
| 8 | VPS | deploy-all.sh ou deploy-stack.sh |
| 9 | VPS | Issabel (issabel4-docker) |
| 10 | VPS | Restore SQL LorentzCTI.bak |
| 11 | DNS + VPS | Caddy / Let's Encrypt (orbitall.app) |
| 12 | VPS | validate-install.sh --external |
Exemplo produção Orbitall (2026-07): IP 2.25.92.168, SSH root, chave id_ed25519artesdosul.
Fase 1 — Criar a VPS no hPanel¶
- Acesse hPanel → VPS → Create New VPS.
- Tipo: KVM (não hospedagem compartilhada).
- Plano:
- Mínimo: KVM 2 — 2 vCPU, 8 GB RAM, ~100 GB NVMe (homologação).
- Recomendado: KVM 4 se Issabel + SQL + CTI + Supervisor simultâneos com folga.
- Sistema operacional: Ubuntu 22.04 LTS (64-bit, amd64).
- Localização: São Paulo (Brazil) ou mais próxima dos usuários.
- SSH key: cole a chave pública (exemplo):
- Finalize a criação e anote o IP público (ex.:
2.25.92.168).
Hostinger vs AWS (não confundir)¶
| Item | Hostinger | AWS (legado) |
|---|---|---|
| Abrir portas | hPanel Firewall / ufw |
Security Group + open-aws-port-*.sh |
| AWS CLI na VPS | Não usar | Opcional |
| Usuário SSH comum | root |
ubuntu |
ISSABEL_DIR típico |
/root/issabel4-docker |
/home/ubuntu/issabel4-docker |
Fase 2 — Conectar do PC (Windows)¶
2.1 Teste SSH¶
Chave privada (sem .pub):
Se Permission denied com ubuntu@, use root@.
2.2 Cursor Remote-SSH (opcional)¶
No Cursor: Remote-SSH: Connect to Host… → lorentz-hostinger → pasta /root/omnichannel/lorentz-vps-stack.
2.3 Arquivo .env no PC (sync, não commitar)¶
Mantenha .env.production no PC com IP e SSH (gitignore). Na VPS o .env é criado na Fase 5.
Referência: .env.example ou .env.production local.
Variáveis mínimas:
VPS_PUBLIC_IP=SEU_IP
VPS_SSH_USER=root
VPS_SSH_KEY=C:/Users/aragu/.ssh/id_ed25519artesdosul
ISSABEL_DIR=/root/issabel4-docker
ORBITALL_DOMAIN=orbitall.app
EDGE_ACME_EMAIL=ti@orbitall.net.br
EDGE_ADMIN_CIDRS=SEU_IP_ADMIN/32
URLs HTTPS (após DNS): ver .env.example (PORTAL_PUBLIC_URL, supervisor., phone., etc.).
Fase 3 — Firewall (hPanel e opcional ufw)¶
3.1 hPanel → VPS → Firewall¶
| Protocolo | Porta | Origem sugerida | Serviço |
|---|---|---|---|
| TCP | 22 | Seu IP / confiável | SSH |
| TCP | 80, 443 | 0.0.0.0/0 | Caddy / Issabel (via proxy) |
| TCP | 8080 | 0.0.0.0/0 | Supervisor |
| TCP | 8081 | 0.0.0.0/0 | Webphone |
| TCP | 8089 | 0.0.0.0/0 | Asterisk WSS |
| TCP | 8099 | 0.0.0.0/0 | Portal Orbitall (HTTP) |
| TCP | 8443 | 0.0.0.0/0 | Portal PWA (cert local; opcional com LE) |
| TCP | 9090 | IP equipe TI | MonitorOPS |
| TCP | 9443 | IP equipe TI | Portainer |
| UDP | 5060 | 0.0.0.0/0 | SIP |
| UDP | 10000–10100 | 0.0.0.0/0 | RTP |
Mapa completo: 34-checklist-portas-dns-orbitall.md.
Confirme com suporte Hostinger se UDP 5060 e RTP não são bloqueados no plano.
3.2 ufw na VPS (opcional, além do hPanel)¶
ufw allow 22/tcp
ufw allow 80,443/tcp
ufw allow 8080,8081,8089,8099/tcp
ufw allow 9090/tcp # restrinja depois ao IP TI se exposto
ufw allow 5060/udp
ufw allow 10000:10100/udp
ufw enable
ufw status
Fase 4 — Pré-requisitos na VPS¶
Conectado como root:
Clone o stack (ajuste URL/branch se necessário):
git clone https://github.com/araguaci/lorentz-vps-stack.git lorentz-vps-stack
cd lorentz-vps-stack
chmod +x scripts/*.sh
Instalação automatizada (Docker, swap 4 GB, pacotes):
Verifique Docker (API ≥ 1.44):
Se Docker antigo: ./scripts/upgrade-docker.sh
Logout/login ou newgrp docker se não for root (root já roda docker).
Fase 5 — Configurar .env na VPS¶
Ajuste obrigatoriamente:
| Variável | Exemplo |
|---|---|
VPS_PUBLIC_IP |
IP do hPanel |
ISSABEL_DIR |
/root/issabel4-docker |
ISSABEL_SIP_EXTERNAL_ADDRESS |
IP ou orbitall.app após DNS |
MSSQL_SA_PASSWORD |
forte (compatível com legado se usar Jubilu2024) |
MONITOR_ADMIN_PASSWORD |
trocar padrão password |
LORENTZ_STACK_HOST_ID |
preservar se migrou da AWS |
EDGE_ADMIN_CIDRS |
IP(s) TI para monitorops. / portainer. |
Gere configs derivadas:
Clone Supervisor (irmão):
cd /root/omnichannel
git clone -b lorentz-vps https://github.com/araguaci/lorentz-supervisor.git supervisor
Detalhes: 35-repositorios-stack.md.
Fase 6 — Enviar binários .NET do PC (não compilar na VPS)¶
No PC (monorepo com server/LorentzCTI/):
cd D:\omnichannel\lorentz-vps-stack
.\scripts\build-lorentz-cti-zip.sh
# opcional: basehistorica.zip, licenca.zip
Envio para a VPS:
scp -i "C:\Users\aragu\.ssh\id_ed25519artesdosul" `
resources\net9.0.zip `
root@SEU_IP:/root/omnichannel/lorentz-vps-stack/resources/
Na VPS:
cd /root/omnichannel/lorentz-vps-stack
./scripts/extract-lorentz-cti-publish.sh resources/net9.0.zip
ls resources/lorentz-cti-publish/LorentzCTI.dll
Mesmo fluxo para basehistorica.zip / licenca.zip se usar esses serviços (32-instalar-apps-core.md).
Fase 7 — Checklist antes do deploy¶
Na VPS:
Corrija avisos (disco, RAM, Docker, portas em uso).
Fase 8 — Deploy do stack Docker¶
Primeira instalação completa (com Issabel)¶
Só containers core (Issabel já existente)¶
Validar containers¶
Fase 9 — Issabel PBX (issabel4-docker)¶
Issabel roda fora do compose principal (network_mode: host).
cd /root
git clone https://github.com/araguaci/issabel4-docker.git issabel4-docker
cd issabel4-docker
# seguir README do repo + docs/06-issabel-pbx.md
No .env do stack:
Após subir Issabel:
cd /root/omnichannel/lorentz-vps-stack
./scripts/render-config.sh
docker compose restart lorentz-cti lorentz-supervisor
WebRTC / WSS: 14-issabel-webrtc-wss.md.
Fase 10 — Banco SQL Server¶
- Copiar
LorentzCTI.bakpara a VPS (ex.:resources/ou/tmp). - Restore:
- Ou bootstrap lab:
./scripts/init-sql-lab.sh(somente ambiente de teste).
Doc: 05-sql-server.md.
Licença Supervisor: se trouxe config/runtime/stack-host-id da AWS, copie antes de gerar nova licença (08-supervisor-web.md).
Fase 11 — DNS e TLS (orbitall.app)¶
- No registrador, aponte registros A de
orbitall.appe subdomínios paraVPS_PUBLIC_IP(34-checklist-portas-dns-orbitall.md). - Antes do Caddy: liberar :443 — Issabel não pode ficar em 443 no host (cert autoassinado →
ERR_CERT_AUTHORITY_INVALIDem todos os subdomínios):
Diagnóstico registrado (srv1869007): 39-diagnostico-err-cert-orbitall-hostinger.md.
- Na VPS, Caddy + Let's Encrypt (Fase D):
Ou manual: ./scripts/render-edge-config.sh, copiar config/runtime/Caddyfile → /etc/caddy/, systemctl restart caddy. Plano: 22-plano-dominio-orbitall-app.md.
- Atualize
.envcom URLshttps://*.orbitall.appe rode./scripts/render-config.sh+ reload containers.
Portal — IP no rodapé: após deploy, https://orbitall.app mostra o IP público para liberar EDGE_ADMIN_CIDRS / MonitorOPS.
Fase 12 — Validação final¶
Na VPS:
Testes manuais:
| URL | Esperado |
|---|---|
https://orbitall.app/ |
Portal Orbitall |
https://supervisor.orbitall.app/login.php |
Supervisor |
https://monitorops.orbitall.app/ |
MonitorOPS (só IP allowlist) |
https://pbx.orbitall.app/ |
Issabel |
Checklist amplo: 33-checklist-teste-ambiente.md.
Sync PC → VPS (atualizações)¶
Opção A — Git (recomendado após git push no PC):
cd /root/omnichannel/lorentz-vps-stack
./scripts/setup-vps-git-remotes.sh # 1ª vez
./scripts/pull-stack-on-vps.sh --render # pull + chmod + render-config
# se mudou Dockerfile/nginx/portal:
./scripts/pull-stack-on-vps.sh --rebuild
No PC, antes do pull na VPS:
Opção B — tar/SSH (preserva .env remoto):
Git Bash / WSL no PC:
cd lorentz-vps-stack
./scripts/sync-lab-to-vps-safe.sh -i "/c/Users/aragu/.ssh/id_ed25519artesdosul" root@SEU_IP
Preserva .env remoto e stack-host-id. Doc: 16-atualizacao-supervisor-web.md.
Migração desde AWS (resumo)¶
- Backup
.bak,.env,stack-host-id, Issabel. - Seguir fases 1–12 nesta VPS Hostinger.
- DNS: trocar A records
3.93.232.33→ novo IP. - Não executar
open-aws-port-*.sh.
Detalhe: 37-migracao-vps-aws-hostinger.md.
Problemas comuns (Hostinger)¶
| Sintoma | Causa provável | Ação |
|---|---|---|
SSH Permission denied |
Chave não no hPanel / usuário errado | root@ + chave privada; cadastrar .pub |
:8080 timeout externo |
Firewall hPanel | Liberar TCP 8080 |
| SIP sem áudio | UDP RTP bloqueado | 10000–10100 UDP no hPanel |
| CTI sem AMI | Issabel parado ou ACL | 18-monitor-troubleshooting.md |
| Build CTI na VPS | Sem SDK | Use net9.0.zip do PC |
ERR_CERT_AUTHORITY_INVALID + HSTS em *.orbitall.app |
Issabel httpd na 443; Caddy inativo |
39 §2.1: Fase C → D |
Apps abrem IP AWS 3.93.232.33 |
*_PUBLIC_URL duplicada no .env |
39 §2.2: uma URL HTTPS + render-config |
Supervisor login.php 404 |
Bind ../supervisor via symlink /root/lorentz → pasta vazia |
39 §2.3 / §6 |
Supervisor Fatal getParmWkr / adodb5 / mssql |
Case Linux + driver legado | 39 §2.4–2.5 |
/cliente/ 403/502 |
cliente/cliente/ sem index.php na raiz |
39 §2.7 |
Portainer 403 / origin invalid |
Allowlist ou CSRF | 39 §2.9 · 31 |
monitorops 403 |
EDGE_ADMIN_CIDRS |
Página Orbitall mostra o IP; liberar CIDR no .env + ./scripts/apply-edge-config.sh |
| Energy sem tabelas | Profile up sem dump | ./scripts/import-energy-db.sh --force |
| SQL OOM | RAM baixa | Swap 4 GB; MSSQL_MEMORY_LIMIT_MB=2048 |
Checklist imprimível¶
- [ ] VPS Ubuntu 22.04 criada; IP anotado
- [ ] Chave SSH no hPanel; login
rootOK - [ ] Firewall hPanel (22, 80, 443, 8080–8081, 8089, 8099, 5060/UDP, RTP)
- [ ]
install-host-prerequisites.sh+ Docker OK - [ ] Repos clonados;
.env+render-config.sh - [ ]
net9.0.zipextraído na VPS - [ ]
deploy-all.shoudeploy-stack.shverde - [ ] Issabel + tema Lorentz
- [ ] Restore
LorentzCTI.bak - [ ] DNS
orbitall.app→ IP Hostinger - [ ]
.envsem*_PUBLIC_URLduplicada / sem IP AWS - [ ] Fase C (
:8445) + Fase D (Caddy/LE) - [ ] Supervisor:
login.php+cliente/index.php+mssqlnative - [ ] Caddy / LE;
validate-install.sh --external - [ ] Senhas Monitor/Supervisor alteradas;
EDGE_ADMIN_CIDRSatual - [ ] Catálogo completo: 39 — Aprendizado Hostinger
Documentação relacionada¶
| Doc | Conteúdo |
|---|---|
| 02-pre-requisitos.md | RAM, disco, swap |
| 10-firewall-aws-security-group.md | Tabela de portas (aplicar no hPanel) |
| 25-guia-scripts-deploy.md | Qual script usar quando |
| SUPORTE-COMECE-AQUI.md | Índice suporte |
Histórico¶
| Data | Notas |
|---|---|
| 2026-07-30 | Guia inicial Hostinger; SSH root; exemplo IP 2.25.92.168 |
| 2026-07-31 | Problemas comuns + checklist alinhados ao cutover real (39) |