Compare commits
8 Commits
refactor/m
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| bff12b122e | |||
| 7e371a3c7e | |||
| dccbf2a1a2 | |||
| ba5d0c03a4 | |||
| 1b865fbb09 | |||
| 309c51b620 | |||
| f4e6dc9fb0 | |||
| 1a294d6f1c |
36
.gitea/workflows/deploy-dev.yml
Normal file
36
.gitea/workflows/deploy-dev.yml
Normal file
@ -0,0 +1,36 @@
|
||||
name: Deploy Dev
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: omnichannel-uat
|
||||
steps:
|
||||
- name: Atualizar deploy
|
||||
run: |
|
||||
cd /opt/omnichannel
|
||||
git pull origin dev
|
||||
|
||||
- name: Atualizar backend
|
||||
run: |
|
||||
cd /opt/omnichannel/backend
|
||||
git pull origin dev
|
||||
|
||||
- name: Atualizar frontend
|
||||
run: |
|
||||
cd /opt/omnichannel/frontend
|
||||
git pull origin dev
|
||||
|
||||
- name: Copiar envs
|
||||
run: |
|
||||
cp /home/desenvolvimento/.envs/omnichannel/deploy.env.development /opt/omnichannel/.env.development
|
||||
cp /home/desenvolvimento/.envs/omnichannel/backend.env.development /opt/omnichannel/backend/.env.development
|
||||
cp /home/desenvolvimento/.envs/omnichannel/frontend.env.development /opt/omnichannel/frontend/.env.development
|
||||
|
||||
- name: Rebuild todos containers
|
||||
run: |
|
||||
cd /opt/omnichannel
|
||||
docker compose up -d --build
|
||||
57
.gitea/workflows/diagnose-ssh.yml
Normal file
57
.gitea/workflows/diagnose-ssh.yml
Normal file
@ -0,0 +1,57 @@
|
||||
name: Diagnose SSH
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
diagnose:
|
||||
name: Diagnostico SSH no servidor
|
||||
runs-on: omnichannel-uat
|
||||
|
||||
steps:
|
||||
- name: Status do sshd
|
||||
shell: bash
|
||||
run: |
|
||||
echo "=== systemctl status sshd ==="
|
||||
sudo systemctl status sshd --no-pager || true
|
||||
|
||||
- name: Logs recentes do sshd
|
||||
shell: bash
|
||||
run: |
|
||||
echo "=== journalctl sshd (ultimas 50 linhas) ==="
|
||||
sudo journalctl -u sshd -n 50 --no-pager || true
|
||||
|
||||
- name: Fail2ban status
|
||||
shell: bash
|
||||
run: |
|
||||
echo "=== fail2ban-client status ==="
|
||||
sudo fail2ban-client status 2>/dev/null || echo "fail2ban nao instalado ou sem permissao"
|
||||
echo ""
|
||||
echo "=== fail2ban jail sshd ==="
|
||||
sudo fail2ban-client status sshd 2>/dev/null || echo "jail sshd nao encontrado"
|
||||
|
||||
- name: IPs banidos no fail2ban
|
||||
shell: bash
|
||||
run: |
|
||||
echo "=== IPs banidos (iptables) ==="
|
||||
sudo iptables -L f2b-sshd -n 2>/dev/null || sudo iptables -L -n 2>/dev/null | grep -A5 "f2b" || echo "Sem regras f2b encontradas"
|
||||
|
||||
- name: Conexoes SSH ativas e MaxStartups
|
||||
shell: bash
|
||||
run: |
|
||||
echo "=== Conexoes na porta 60000 ==="
|
||||
ss -tnp | grep ':60000' || echo "Nenhuma conexao ativa"
|
||||
echo ""
|
||||
echo "=== MaxStartups configurado ==="
|
||||
sudo sshd -T 2>/dev/null | grep -i maxstartups || grep -i maxstartups /etc/ssh/sshd_config || echo "Configuracao padrao (10:30:100)"
|
||||
|
||||
- name: Quem esta logado
|
||||
shell: bash
|
||||
run: |
|
||||
echo "=== Sessoes ativas ==="
|
||||
who || true
|
||||
echo ""
|
||||
echo "=== Ultimos logins ==="
|
||||
last -n 10 || true
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
@ -4,6 +4,10 @@ dist
|
||||
*.log
|
||||
.DS_Store
|
||||
|
||||
# Repos clonados separadamente dentro do deploy
|
||||
/backend/
|
||||
/frontend/
|
||||
|
||||
# Backend Specific Ignore
|
||||
backend/node_modules
|
||||
backend/dist
|
||||
@ -14,4 +18,4 @@ backend/test-api-out.json
|
||||
|
||||
# Frontend Specific Ignore
|
||||
frontend/node_modules
|
||||
frontend/dist
|
||||
frontend/dist
|
||||
|
||||
48
README.md
48
README.md
@ -4,6 +4,29 @@ Plataforma omnichannel para atendimento com foco inicial em WhatsApp. O sistema
|
||||
|
||||
O projeto foi construído para validar e evoluir um MVP de atendimento corporativo, com perfis de agente, supervisor e administrador.
|
||||
|
||||
## Clonando o Projeto
|
||||
|
||||
Este repositório funciona como o repositório de deploy/orquestração. O backend e o frontend ficam em repositórios separados e devem ser clonados dentro das pastas esperadas pelo `docker-compose.yml`.
|
||||
|
||||
Em uma pasta vazia:
|
||||
|
||||
```bash
|
||||
git clone https://chaleiradev.sothistelecom.com/Sothis/omnichannel-deploy.git .
|
||||
git clone https://chaleiradev.sothistelecom.com/Sothis/omnichannel-backend.git backend
|
||||
git clone https://chaleiradev.sothistelecom.com/Sothis/omnichannel-frontend.git frontend
|
||||
```
|
||||
|
||||
Ao final, a estrutura deve ficar assim:
|
||||
|
||||
```txt
|
||||
omnichannel/
|
||||
├── backend/
|
||||
├── frontend/
|
||||
├── database/
|
||||
├── docker-compose.yml
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## Principais Recursos
|
||||
|
||||
- Login corporativo via LDAP/Active Directory.
|
||||
@ -11,7 +34,7 @@ O projeto foi construído para validar e evoluir um MVP de atendimento corporati
|
||||
- JWT próprio da aplicação com perfis e especialidades.
|
||||
- Atendimento WhatsApp em tempo real via `whatsapp-web.js`.
|
||||
- Socket.IO para atualização de chats/mensagens.
|
||||
- Agente Virtual Sothis para triagem e roteamento.
|
||||
- Agente Virtual para triagem e roteamento.
|
||||
- Fila por especialidade.
|
||||
- Assumir, liberar, transferir e fechar atendimento.
|
||||
- Abertura ativa com templates aprovados.
|
||||
@ -31,10 +54,10 @@ O projeto foi construído para validar e evoluir um MVP de atendimento corporati
|
||||
- TypeScript `^6.0`.
|
||||
- PostgreSQL via `pg`.
|
||||
- Socket.IO `^4.8`.
|
||||
- `whatsapp-web.js` `^1.34`.
|
||||
- `whatsapp-web.js` `^1.34`, usando Puppeteer/Chrome para controlar o WhatsApp Web.
|
||||
- LDAP via `ldapts`.
|
||||
- JWT via `jsonwebtoken`.
|
||||
- Logs com `winston`.
|
||||
- Logs com `NestJS`.
|
||||
|
||||
### Frontend
|
||||
|
||||
@ -74,7 +97,8 @@ omnichannel/
|
||||
|
||||
1. Configure `.env.development` na raiz com os dados do banco externo.
|
||||
2. Garanta que o PostgreSQL externo esteja acessível a partir do container backend.
|
||||
3. Suba backend e frontend:
|
||||
3. Garanta que o backend consiga iniciar Chrome/Chromium para o Puppeteer usado pelo `whatsapp-web.js`.
|
||||
4. Suba backend e frontend:
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
@ -91,6 +115,19 @@ Health:
|
||||
curl http://localhost:4001/health
|
||||
```
|
||||
|
||||
## Deploy Automatizado
|
||||
|
||||
O deploy deve seguir pelo Gitea Actions. O antigo fluxo manual via arquivo `.bat` não faz mais parte do processo recomendado.
|
||||
|
||||
Responsabilidades esperadas da pipeline:
|
||||
|
||||
- baixar/clonar os repositórios necessários;
|
||||
- configurar variáveis de ambiente do ambiente alvo;
|
||||
- buildar backend e frontend;
|
||||
- subir os serviços com Docker Compose;
|
||||
- executar validações pós-deploy;
|
||||
- não gerenciar o banco dentro do compose.
|
||||
|
||||
## Como Rodar em Desenvolvimento
|
||||
|
||||
Backend:
|
||||
@ -130,7 +167,8 @@ Para ambiente novo, antes de subir backend para uso real:
|
||||
2. aplicar as migrations em ordem;
|
||||
3. validar tabelas principais;
|
||||
4. criar/atribuir usuário admin;
|
||||
5. subir backend e frontend.
|
||||
5. validar Chrome/Chromium e volume de sessao WhatsApp para Puppeteer;
|
||||
6. subir backend e frontend.
|
||||
|
||||
Detalhes em:
|
||||
|
||||
|
||||
1
backend
1
backend
@ -1 +0,0 @@
|
||||
Subproject commit 8790ce70d05d0256ded89ea8fb9335afad41bfa8
|
||||
16
database/migrations/024_mensagens.sql
Normal file
16
database/migrations/024_mensagens.sql
Normal file
@ -0,0 +1,16 @@
|
||||
-- Migration 024: Persistência de mensagens WhatsApp (Meta API)
|
||||
CREATE TABLE mensagens (
|
||||
id SERIAL PRIMARY KEY,
|
||||
wamid VARCHAR(255) UNIQUE NOT NULL,
|
||||
chat_id VARCHAR(50) NOT NULL,
|
||||
from_me BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
type VARCHAR(50) NOT NULL DEFAULT 'text',
|
||||
body TEXT,
|
||||
sender_name VARCHAR(255),
|
||||
status VARCHAR(20),
|
||||
timestamp BIGINT NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_mensagens_chat_id ON mensagens(chat_id);
|
||||
CREATE INDEX idx_mensagens_timestamp ON mensagens(timestamp);
|
||||
@ -1 +0,0 @@
|
||||
ssh desenvolvimento@10.0.120.75 -p 60000 "/home/desenvolvimento/scripts/deploy-omnichannel-dev.sh"
|
||||
@ -3,6 +3,7 @@ services:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "4000:3000"
|
||||
|
||||
@ -10,6 +11,7 @@ services:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "4001:3001"
|
||||
env_file:
|
||||
|
||||
1
frontend
1
frontend
@ -1 +0,0 @@
|
||||
Subproject commit 7dc07c2a806d6352d2a84c333f09974d997918b0
|
||||
Loading…
Reference in New Issue
Block a user