Ir para o conteúdo

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

  1. Acesse hPanel → VPS → Create New VPS.
  2. Tipo: KVM (não hospedagem compartilhada).
  3. Plano:
  4. Mínimo: KVM 2 — 2 vCPU, 8 GB RAM, ~100 GB NVMe (homologação).
  5. Recomendado: KVM 4 se Issabel + SQL + CTI + Supervisor simultâneos com folga.
  6. Sistema operacional: Ubuntu 22.04 LTS (64-bit, amd64).
  7. Localização: São Paulo (Brazil) ou mais próxima dos usuários.
  8. SSH key: cole a chave pública (exemplo):
ssh-ed25519 AAAA... seu-comentario
  1. 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):

ssh -i "C:\Users\aragu\.ssh\id_ed25519artesdosul" root@SEU_IP

Se Permission denied com ubuntu@, use root@.

2.2 Cursor Remote-SSH (opcional)

cd D:\omnichannel\lorentz-vps-stack
.\scripts\setup-cursor-remote.ps1 -ApplyRemote

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:

apt-get update && apt-get upgrade -y
mkdir -p /root/omnichannel
cd /root/omnichannel

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):

./scripts/install-host-prerequisites.sh

Verifique Docker (API ≥ 1.44):

docker version
docker compose version

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

cd /root/omnichannel/lorentz-vps-stack
cp .env.example .env
nano .env

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:

./scripts/render-config.sh
./scripts/render-stack-host-id.sh   # se primeira instalação Linux

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:

cd /root/omnichannel/lorentz-vps-stack
./scripts/check-pre-install.sh

Corrija avisos (disco, RAM, Docker, portas em uso).


Fase 8 — Deploy do stack Docker

Primeira instalação completa (com Issabel)

cd /root/omnichannel/lorentz-vps-stack
./scripts/deploy-all.sh

Só containers core (Issabel já existente)

./scripts/deploy-stack.sh

Validar containers

docker ps --format 'table {{.Names}}\t{{.Status}}'
./scripts/diagnose-stack.sh --brief

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:

ISSABEL_DIR=/root/issabel4-docker

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

  1. Copiar LorentzCTI.bak para a VPS (ex.: resources/ ou /tmp).
  2. Restore:
./scripts/restore-sql-bak.sh /caminho/LorentzCTI.bak
  1. 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)

  1. No registrador, aponte registros A de orbitall.app e subdomínios para VPS_PUBLIC_IP (34-checklist-portas-dns-orbitall.md).
  2. Antes do Caddy: liberar :443 — Issabel não pode ficar em 443 no host (cert autoassinado → ERR_CERT_AUTHORITY_INVALID em todos os subdomínios):
ss -tlnp | grep ':443'   # se httpd (Issabel): rodar Fase C
./scripts/apply-phase-c-issabel-https.sh

Diagnóstico registrado (srv1869007): 39-diagnostico-err-cert-orbitall-hostinger.md.

  1. Na VPS, Caddy + Let's Encrypt (Fase D):
./scripts/apply-phase-d-caddy.sh

Ou manual: ./scripts/render-edge-config.sh, copiar config/runtime/Caddyfile → /etc/caddy/, systemctl restart caddy. Plano: 22-plano-dominio-orbitall-app.md.

  1. Atualize .env com URLs https://*.orbitall.app e 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:

cd /root/omnichannel/lorentz-vps-stack
./scripts/validate-install.sh --external

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:

cd D:\omnichannel\lorentz-vps-stack
git push origin main

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)

  1. Backup .bak, .env, stack-host-id, Issabel.
  2. Seguir fases 1–12 nesta VPS Hostinger.
  3. DNS: trocar A records 3.93.232.33 → novo IP.
  4. 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 root OK
  • [ ] 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.zip extraído na VPS
  • [ ] deploy-all.sh ou deploy-stack.sh verde
  • [ ] Issabel + tema Lorentz
  • [ ] Restore LorentzCTI.bak
  • [ ] DNS orbitall.app → IP Hostinger
  • [ ] .env sem *_PUBLIC_URL duplicada / 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_CIDRS atual
  • [ ] 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)