# 📦 Installation Guide - Integration Hub

## Pré-Requisitos

### Sistema Operacional
- Linux (Ubuntu 20.04+, CentOS 8+) ou macOS
- Windows 11 with WSL2

### Dependências
- Docker 20.10+
- Docker Compose 2.0+
- Git 2.30+
- 8GB RAM (mínimo)
- 20GB Disk (mínimo)

## Instalação Rápida (5 minutos)

### 1. Clone o Repositório
```bash
git clone https://github.com/seu-org/integration-hub.git
cd integration-hub
```

### 2. Configure Variáveis de Ambiente
```bash
cp .env.example .env

# Edite .env com suas configurações
nano .env

# Gere uma chave de aplicação
docker-compose run --rm app php artisan key:generate
```

### 3. Inicie os Containers
```bash
docker-compose up -d

# Verifique status
docker-compose ps
```

### 4. Setup do Banco de Dados
```bash
# Execute migrations
docker-compose exec app php artisan migrate

# Seed com dados iniciais
docker-compose exec app php artisan db:seed

# Gere a chave JWT
docker-compose exec app php artisan jwt:secret
```

### 5. Acesse a Aplicação
```
Dashboard: http://localhost:8000
PHPMyAdmin: http://localhost:8080
RabbitMQ: http://localhost:15672
```

## Instalação Detalhada

### Passo 1: Clone e Preparação
```bash
# Clone
git clone <repo-url>
cd integration-hub

# Verifique se .env existe, caso contrário crie
test -f .env || cp .env.example .env
```

### Passo 2: Configuração de Variáveis
```bash
nano .env
```

Valores importantes a configurar:

```env
# App
APP_NAME="Integration Hub"
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:... (será gerado automaticamente)
APP_URL=http://localhost:8000

# Database
DB_PASSWORD=seu_senha_segura
DB_ROOT_PASSWORD=root_senha_segura

# Redis
REDIS_PASSWORD=redis_senha_segura

# RabbitMQ
RABBITMQ_PASSWORD=rabbitmq_senha_segura

# JWT
JWT_SECRET= (será gerado automaticamente)

# Mail (configurar depois)
MAIL_FROM_ADDRESS=admin@integration-hub.local
```

### Passo 3: Build dos Containers
```bash
# Build da imagem
docker-compose build

# Pode levar 5-10 minutos na primeira vez
```

### Passo 4: Inicialização
```bash
# Inicie todos os serviços
docker-compose up -d

# Aguarde ~30 segundos para mysql estar pronto
sleep 30

# Verifique logs
docker-compose logs -f app
```

### Passo 5: Laravel Setup
```bash
# Entre no container
docker-compose exec app bash

# Gere chave de aplicação (se ainda não feito)
php artisan key:generate

# Gere chave JWT
php artisan jwt:secret

# Execute migrations
php artisan migrate

# Seed do banco
php artisan db:seed --class=RolePermissionSeeder
php artisan db:seed --class=UserSeeder

# Cache de otimização
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Saia do container
exit
```

### Passo 6: Verificação
```bash
# Teste a aplicação
curl -X GET http://localhost:8000/api/health

# Esperado:
# {"status":"ok","timestamp":"..."}
```

### Passo 7: Acesso ao Dashboard
```
URL: http://localhost:8000
Email: admin@integration-hub.local
Senha: senha123

OBS: Mude a senha na primeira login!
```

## Configurações Pós-Instalação

### 1. HTTPS (Produção)
```bash
# Gere certificado auto-assinado (dev)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

# Ou use Let's Encrypt (produção)
sudo certbot certonly --standalone -d seu-dominio.com
```

### 2. Email
```env
MAIL_MAILER=smtp
MAIL_HOST=seu-smtp-server.com
MAIL_PORT=587
MAIL_USERNAME=seu-email@company.com
MAIL_PASSWORD=sua-senha-app
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@seu-dominio.com
```

### 3. Backup Automático
```bash
# Crie um script de backup diário
cat > /home/ubuntu/backup-hub.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backups/integration-hub"
mkdir -p $BACKUP_DIR
docker-compose exec -T mysql mysqldump -u root -p$DB_ROOT_PASSWORD nucleo > $BACKUP_DIR/$(date +%Y%m%d-%H%M%S).sql
EOF

chmod +x /home/ubuntu/backup-hub.sh

# Adicione ao crontab
crontab -e
# 0 2 * * * /home/ubuntu/backup-hub.sh
```

### 4. Monitoramento
```bash
# Instale node_exporter para Prometheus
docker run -d --name=node-exporter \
  -p 9100:9100 \
  prom/node-exporter:latest
```

## Troubleshooting

### Problema: Porta 3306 já em uso
```bash
# Encontre qual processo está usando
lsof -i :3306

# Mate o processo
kill -9 <PID>

# Ou use uma porta diferente no docker-compose.yml
ports:
  - "3307:3306"
```

### Problema: Espaço em disco insuficiente
```bash
# Limpe volumes não utilizados
docker volume prune

# Remova imagens não utilizadas
docker image prune -a

# Limpe cache do Docker
docker system prune
```

### Problema: RabbitMQ recusando conexão
```bash
# Verifique se o container está rodando
docker-compose ps rabbitmq

# Veja logs
docker-compose logs rabbitmq

# Reinicie o container
docker-compose restart rabbitmq
```

### Problema: Laravel migrations falhando
```bash
# Verifique conexão com DB
docker-compose exec app php artisan db

# Veja todos os errors
docker-compose exec app php artisan migrate --verbose

# Rollback e tente novamente
docker-compose exec app php artisan migrate:reset
docker-compose exec app php artisan migrate
```

### Problema: Sessão não persiste
```bash
# Verifique conexão Redis
docker-compose exec redis redis-cli ping

# Deve responder: PONG
```

## Operações Básicas

### Parar a Aplicação
```bash
docker-compose down
```

### Reiniciar
```bash
docker-compose restart app
```

### Ver Logs
```bash
# Todos os serviços
docker-compose logs -f

# Específico
docker-compose logs -f app
docker-compose logs -f mysql
```

### Executar Comandos Artisan
```bash
docker-compose exec app php artisan <comando>
```

### Acessar Shell
```bash
# PHP shell
docker-compose exec app php artisan tinker

# Bash
docker-compose exec app bash

# MySQL
docker-compose exec mysql mysql -u nucleo_user -p
```

## Desenvolvimento

### Modo Debug
```env
APP_DEBUG=true
LOG_LEVEL=debug
```

### Hot Reload
```bash
# Instale Vite (já incluído)
docker-compose exec app npm install
docker-compose exec app npm run dev
```

### Database Factory & Seeding
```bash
# Crie factory
php artisan make:factory IntegrationFactory

# Crie seeder
php artisan make:seeder IntegrationSeeder
```

### Queue Testing
```bash
# Teste sem processar (sync)
php artisan queue:work --driver=sync

# Ou com RabbitMQ
php artisan queue:work rabbitmq --verbose
```

## Deployment em Produção

### 1. Variáveis de Ambiente Críticas
```env
APP_ENV=production
APP_DEBUG=false
APP_KEY=<base64-key>
JWT_SECRET=<long-random-string>
SANCTUM_STATEFUL_DOMAINS=seu-dominio.com
SESSION_SECURE_COOKIES=true
```

### 2. Build de Produção
```bash
docker build --build-arg APP_ENV=production -t seu-registry/integration-hub:latest .
docker push seu-registry/integration-hub:latest
```

### 3. Deploy com Kubernetes
```bash
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yaml
```

### 4. Verificação Pós-Deploy
```bash
# Health check
curl -X GET https://seu-dominio.com/api/health

# Teste auth
curl -X POST https://seu-dominio.com/api/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@integration-hub.local","password":"senha123"}'
```

## Próximos Passos

1. ✅ Instalação concluída
2. ⬜ Configure as primeiras integrações
3. ⬜ Crie regras de negócio
4. ⬜ Configure webhooks
5. ⬜ Setup de monitoramento
6. ⬜ Configure backups automáticos
7. ⬜ Migre dados do ITSM legado

## Suporte

- **Documentação**: `/docs`
- **Issues**: GitHub Issues
- **Email**: admin@integration-hub.local
- **Slack**: #integration-hub channel
