Ir para o conteúdo

SQL Server (container)

Papel no stack

O banco LorentzCTI no SQL Server é compartilhado por:

  • LorentzCTI — estado de agentes, chamadas, filas, URA
  • Supervisor — CRUD web, relatórios, campanhas

Issabel usa MariaDB interna — banco separado, não substitui LorentzCTI.

Subir apenas SQL Server

cd ~/lorentz-vps-stack
cp .env.example .env   # se ainda não fez
./scripts/render-config.sh
docker compose up -d sqlserver
docker compose logs -f sqlserver

Aguarde healthcheck (~60–120 s na primeira execução).

Testar conexão

docker exec -it lorentz-sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P "$MSSQL_SA_PASSWORD" -C -Q "SELECT @@VERSION"

Substitua $MSSQL_SA_PASSWORD pela senha do .env.

Criar banco LorentzCTI

CREATE DATABASE LorentzCTI;
GO

Via sqlcmd:

docker exec lorentz-sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P "SuaSenha" -C \
  -Q "IF DB_ID('LorentzCTI') IS NULL CREATE DATABASE LorentzCTI"

Restaurar backup (.bak)

Modo facil (recomendado)

Coloque o arquivo em resources/LorentzCTI.bak e execute:

./scripts/restore-sql-bak.sh

Ou pelo Monitor → Ferramentas → Restaurar LorentzCTI.bak.

O script detecta automaticamente os nomes logicos do backup (ex.: Attender_CRMData / Attender_CRMLog).

Modo manual

  1. Copie o .bak para a VPS:
scp -i issabel-key.pem resources/LorentzCTI.bak ubuntu@IP:/tmp/
  1. Copie para o container:
docker cp /tmp/LorentzCTI.bak lorentz-sqlserver:/var/opt/mssql/backup/
docker exec lorentz-sqlserver mkdir -p /var/opt/mssql/backup
  1. Liste nomes logicos e restaure (ajuste MOVE conforme saida):
docker exec lorentz-sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P "$MSSQL_SA_PASSWORD" -C \
  -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/LorentzCTI.bak'"
RESTORE DATABASE LorentzCTI
FROM DISK = '/var/opt/mssql/backup/LorentzCTI.bak'
WITH MOVE 'Attender_CRMData' TO '/var/opt/mssql/data/LorentzCTI.mdf',
     MOVE 'Attender_CRMLog' TO '/var/opt/mssql/data/LorentzCTI_log.ldf',
     REPLACE, STATS = 10;

Backup automático (.bak)

Gera .bak comprimido no volume lorentz-sqlserver-backups, mantendo os últimos 7 (BACKUP_KEEP no .env):

./scripts/backup-sql.sh

Ou pelo MonitorOPS → Ferramentas → Backup SQL.

Agendar diário às 3h (cron na VPS):

crontab -e
# 0 3 * * * /home/ubuntu/omnichannel/lorentz-vps-stack/scripts/backup-sql.sh >> /var/log/lorentz-backup.log 2>&1

Copiar um backup para fora do container:

docker cp lorentz-sqlserver:/var/opt/mssql/backup/LorentzCTI-<stamp>.bak ./

Persistência

Volumes Docker: lorentz_lorentz-sqlserver-data (dados) e lorentz_lorentz-sqlserver-backups (.bak).

Backup do volume de dados:

docker run --rm -v lorentz_lorentz-sqlserver-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/sqlserver-data-$(date +%F).tar.gz /data

Configuração nos serviços

Serviço Host SQL (dentro Compose) Banco
lorentz-cti ServidorSQL=sqlserver no INI LorentzCTI
supervisor EW_SQLSERVER=sqlserver LorentzCTI

Gerado por ./scripts/render-config.sh.

Segurança

  • Bind local por padrãoMSSQL_BIND_IP=127.0.0.1 no .env; a porta 1433 só responde no host. Acesso externo (SSMS/Azure Data Studio) via túnel SSH:
ssh -i issabel-key.pem -L 1433:127.0.0.1:1433 ubuntu@IP_DA_VPS
# conecte em localhost,1433
  • Para expor publicamente (não recomendado): MSSQL_BIND_IP=0.0.0.0 + Security Group restrito ao IP administrativo
  • Use senha forte em MSSQL_SA_PASSWORD (limitação: LorentzCTI legado usa Jubilu2024 hardcoded)
  • MSSQL_MEMORY_LIMIT_MB (padrão 2048) evita o SQL consumir toda a RAM da VPS
  • SQL Server Developer Edition: limite de licenciamento Microsoft

Próximo passo

07-lorentz-cti-servidor.md após banco disponível.