Deploy VPS — AWS ou Hostinger¶
Guia para subir Issabel PBX + SQL Server + LorentzCTI + Supervisor em VPS Linux nova.
Dois caminhos de provedor:
| Caminho | SO testado | Firewall |
|---|---|---|
| A — AWS EC2 | Rocky Linux 9 | Security Group + AWS CLI (opcional) |
| B — Hostinger KVM | Ubuntu 22.04 LTS | Painel Hostinger / ufw |
Tempo estimado: 2–4 h (ISO Issabel ~1,9 GB).
O que levar para a VPS (sem código-fonte CTI)¶
Entrega oficial para suporte¶
Desenvolvimento gera dist/lorentz-deploy-<versao>.tar.gz (ver 15-distribuicao-equipe-suporte.md).
O pacote inclui:
omnichannel/
├── lorentz-vps-stack/
│ ├── resources/net9.0.zip ← Release LorentzCTI (fixo nesta pasta)
│ ├── INSTALACAO-SUPORTE.md
│ └── ...
└── supervisor/
Suporte: INSTALACAO-SUPORTE.md → ./scripts/prepare-support-install.sh
Pacote mínimo manual (alternativa)¶
Não envie o monorepo completo. Pacote mínimo:
~/omnichannel/
├── lorentz-vps-stack/ ← scripts, compose, docs, templates
│ └── resources/
│ └── net9.0.zip ← binários LorentzCTI (.NET 9 publish)
└── supervisor/ ← PHP (interface web)
| Item | Obrigatório | Notas |
|---|---|---|
lorentz-vps-stack/ |
Sim | Scripts de deploy |
resources/net9.0.zip |
Sim | Publish do LorentzCTI — não leve server/LorentzCTI/ |
supervisor/ |
Sim | PHP montado no container |
server/LorentzCTI/ |
Não | Apenas no PC de build |
Gerar net9.0.zip (PC de desenvolvimento)¶
Requer .NET SDK 9 no monorepo:
Ou manualmente:
cd server/LorentzCTI
dotnet publish LorentzCTI.vbproj -c Release -o bin/Release/net9.0/publish /p:UseAppHost=false
cd bin/Release/net9.0/publish && zip -r ../../../../../../lorentz-vps-stack/resources/net9.0.zip .
Extrair na VPS¶
cd ~/omnichannel/lorentz-vps-stack
./scripts/extract-lorentz-cti-publish.sh resources/net9.0.zip
ls resources/lorentz-cti-publish/LorentzCTI.dll
O LorentzCTI.ini é gerado depois por ./scripts/render-config.sh (não use o INI dentro do zip).
Build CTI a partir do código (opcional — dev)¶
Somente se tiver server/LorentzCTI/ na VPS:
Requisitos mínimos da VPS¶
| Recurso | Mínimo | Recomendado |
|---|---|---|
| vCPU | 2 | 4 |
| RAM | 4 GB | 8 GB |
| Disco SSD | 40 GB | 80 GB |
| Swap | 4 GB | 4 GB (script cria) |
| SO | x86_64 Linux | Rocky 9 / Ubuntu 22.04 |
Portas (firewall)¶
| Porta | Protocolo | Serviço |
|---|---|---|
| 22 | TCP | SSH |
| 80, 443 | TCP | Issabel |
| 8080 | TCP | Supervisor |
| 9090 | TCP | MonitorOPS |
| 5060 | UDP | SIP |
| 10000–10100 | UDP | RTP |
Não expor: 5038 (AMI), 1433 (SQL).
Checklist e scripts¶
| Momento | Comando |
|---|---|
| Antes | ./scripts/check-pre-install.sh |
| Deploy | ./scripts/deploy-all.sh |
| Depois | ./scripts/validate-install.sh |
| Externo | ./scripts/validate-install.sh --external |
Passos comuns (AWS e Hostinger)¶
1. Conectar SSH¶
| Provedor | Usuário típico |
|---|---|
| AWS Rocky | rocky |
| Hostinger Ubuntu | ubuntu |
2. Preparar SO¶
Rocky / RHEL:
Ubuntu (Hostinger):
sudo apt update && sudo apt upgrade -y
sudo timedatectl set-timezone America/Sao_Paulo
mkdir -p ~/omnichannel
3. Copiar pacote mínimo (SCP)¶
No PC (PowerShell), a partir de d:\omnichannel:
scp -i "C:\Users\aragu\.ssh\sua-chave.pem" -r `
d:\omnichannel\lorentz-vps-stack `
d:\omnichannel\supervisor `
usuario@IP:~/omnichannel/
scp -i "C:\Users\aragu\.ssh\sua-chave.pem" `
d:\omnichannel\lorentz-vps-stack\resources\net9.0.zip `
usuario@IP:~/omnichannel/lorentz-vps-stack/resources/
Na VPS:
cd ~/omnichannel/lorentz-vps-stack
chmod +x scripts/*.sh
./scripts/extract-lorentz-cti-publish.sh resources/net9.0.zip
ls ../supervisor/login.php
4. Configurar .env¶
VPS_PUBLIC_IP=IP_DA_VPS
SUPERVISOR_PUBLIC_URL=http://IP_DA_VPS:8080/
ISSABEL_SIP_EXTERNAL_ADDRESS=IP_DA_VPS
MSSQL_SA_PASSWORD=Jubilu2024
LORENTZ_CTI_PBX_IP=host.docker.internal
# Hostinger Ubuntu — ajuste o caminho Issabel:
ISSABEL_DIR=/home/ubuntu/issabel4-docker
5. Deploy¶
6. Pós-deploy¶
Bootstrap SQL (se volume novo):
docker cp docker/sqlserver/init/01-bootstrap-homolog.sql lorentz-sqlserver:/tmp/
docker cp docker/sqlserver/init/02-cti-core-tables.sql lorentz-sqlserver:/tmp/
docker exec lorentz-sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P 'Jubilu2024' -C -i /tmp/01-bootstrap-homolog.sql
docker exec lorentz-sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P 'Jubilu2024' -C -i /tmp/02-cti-core-tables.sql
AMI para rede Docker (LorentzCTI):
docker exec issabel-prod bash -c 'cat >> /etc/asterisk/manager_custom.conf << EOF
[admin]
secret = amp111
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.255
permit=172.16.0.0/12
read = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
write = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
writetimeout = 5000
EOF
asterisk -rx "manager reload"'
./scripts/render-config.sh && docker compose restart lorentz-cti
Caminho A — AWS EC2¶
A.1 Criar instância¶
| Item | Valor |
|---|---|
| Tipo | t3.medium (2 vCPU, 4 GB) ou maior |
| SO | Rocky Linux 9.x |
| Disco | 40 GB gp3 |
| Key pair | .pem para SSH |
A.2 Security Group (inbound)¶
Configure no console EC2 ou via AWS CLI:
| Porta | Protocolo |
|---|---|
| 22, 80, 443, 8080, 9090 | TCP |
| 5060 | UDP |
| 10000–10100 | UDP |
A.3 AWS CLI (opcional)¶
./scripts/install-aws-cli.sh
aws configure # ou IAM role na instância
./scripts/open-aws-port-8080.sh
./scripts/open-aws-port-9090.sh SEU_IP/32
Sem credenciais AWS, abra portas manualmente no console EC2.
Detalhes: 10-firewall-aws-security-group.md
Caminho B — Hostinger KVM¶
B.1 Plano¶
Use VPS KVM (root/sudo), não hospedagem compartilhada.
| Plano Hostinger | Uso |
|---|---|
| KVM 2 (2 vCPU / 4 GB) | Mínimo homologação |
| KVM 4 (4 vCPU / 8 GB) | Recomendado |
SO: Ubuntu 22.04 LTS na instalação.
B.2 Firewall¶
No hPanel → VPS → Firewall, libere as mesmas portas da tabela acima.
Ou no servidor:
sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw allow 8080/tcp
sudo ufw allow 9090/tcp
sudo ufw allow 5060/udp
sudo ufw allow 10000:10100/udp
sudo ufw enable
Confirme com suporte Hostinger se 5060/UDP e RTP não estão bloqueados no plano.
B.3 Diferenças em relação à AWS¶
| Item | Hostinger |
|---|---|
| AWS CLI | Não necessário |
open-aws-port-8080.sh |
Não usar |
| IP público | Painel Hostinger (fixo ou anote após criar VPS) |
ISSABEL_DIR |
/home/ubuntu/issabel4-docker |
| Metadata AWS | Não existe — use IP do painel no .env |
Endpoints finais¶
| Serviço | URL |
|---|---|
| Issabel | https://<IP>/ |
| Supervisor | http://<IP>:8080/ |
| Login bootstrap | admin / Admin2026! |
Próximos passos¶
| # | Ação | Doc |
|---|---|---|
| 1 | Schema SQL completo (.bak ou CREATE_MISSING_OBJECTS.sql) | 05-sql-server.md |
| 2 | Ramais, troncos, filas Issabel | 06-issabel-pbx.md |
| 3 | Agentes e grupos Supervisor | 08-supervisor-web.md |
| 4 | Clientes CTI :8000 / Phoenix :3000 |
07-lorentz-cti-servidor.md |
| 5 | Backup e hardening | 11-operacao-e-manutencao.md |
Problemas comuns¶
| Sintoma | Solução |
|---|---|
| Build CTI falha | Extraia net9.0.zip — LorentzCTI.dll em resources/lorentz-cti-publish/ |
Timeout :8080 externo |
Firewall AWS SG ou Hostinger hPanel |
| AMI Authentication failed | ./scripts/render-config.sh + ACL 172.16.0.0/12 |
| Tabelas SQL ausentes | Bootstrap SQL (passo 6) |
Mais: 12-troubleshooting.md