# GUIA DE INSTALAÇÃO - SIGED Laravel Multi-tenant

## 📋 Pré-requisitos

### Softwares Necessários
- PHP 8.1 ou superior
- MySQL 5.7 ou MariaDB 10.5
- Composer (gerenciador de pacotes PHP)
- Node.js (para compilar assets)
- Git (opcional, para versionamento)

### Hospedagem Recomendada
- cPanel/WHM com SSH acesso
- Mínimo 2GB RAM
- Mínimo 10GB espaço em disco
- Suporte a múltiplos bancos MySQL
- Suporte a domínios adicionais

---

## 🚀 INSTALAÇÃO PASSO A PASSO

### PASSO 1: Preparar o Servidor

#### 1.1 Criar Diretórios Necessários

Via SSH/cPanel File Manager:

```bash
# Criar diretório principal
mkdir -p ~/public_html/siged
cd ~/public_html/siged

# Criar diretórios necessários
mkdir -p storage/app/public
mkdir -p storage/logs
mkdir -p bootstrap/cache
mkdir -p uploads
```

#### 1.2 Criar Bancos de Dados

Via cPanel > MySQL Databases:

**Banco 1 - Landlord (Central)**
```
Nome: siged_landlord
Usuário: siged_admin
Senha: [gere uma senha forte]
```

**Banco 2 - Tenant (Para cada instituição)**
```
Nome: siged_tenant_1
Usuário: siged_admin
Senha: [mesma senha]
```

#### 1.3 Configurar DNS

Para suportar multi-domínio, configure:

```
Domínio Principal:   siged.example.com
Subdomínios:         *.siged.example.com
                     instituicao1.siged.example.com
                     instituicao2.siged.example.com
```

---

### PASSO 2: Upload de Arquivos

#### 2.1 Via FTP/SFTP

Abra seu cliente FTP (FileZilla, WinSCP, etc) e faça upload para `~/public_html/siged`:

```
Estrutura esperada após upload:
siged/
├── app/
├── bootstrap/
├── config/
├── database/
├── resources/
├── routes/
├── storage/
├── vendor/
├── public/
├── .env.example
├── composer.json
├── composer.lock
└── artisan
```

#### 2.2 Via SSH

Se preferir via terminal:

```bash
cd ~/public_html/siged
git clone https://seu-repo.git .
# ou fazer upload dos arquivos via SCP
```

---

### PASSO 3: Instalar Dependências

#### 3.1 Instalar Composer

SSH acesso - Execute:

```bash
cd ~/public_html/siged

# Instalar dependências PHP
composer install --no-dev

# Se tiver erro de memória, use:
php -d memory_limit=-1 composer.phar install --no-dev
```

#### 3.2 Compilar Assets

```bash
# Instalar dependências Node.js
npm install

# Compilar assets para produção
npm run build

# Se tiver npm, senão pule este passo
```

---

### PASSO 4: Configurar Permissões

```bash
# Dar permissão de escrita aos diretórios críticos
chmod -R 755 storage
chmod -R 755 bootstrap/cache
chmod -R 755 public
chmod -R 755 uploads

# Dar propriedade ao usuário do PHP
chown -R nobody:nobody storage bootstrap/cache
# ou
chown -R www-data:www-data storage bootstrap/cache
```

---

### PASSO 5: Configurar Arquivo .env

#### 5.1 Criar arquivo .env

```bash
cp .env.example .env
```

#### 5.2 Editar arquivo .env

Abra via FTP/cPanel File Manager e configure:

```env
APP_NAME="SIGED Multi-tenant"
APP_ENV=production
APP_KEY=base64:YOUR_KEY_HERE  # Será gerado pelo instalador
APP_DEBUG=false
APP_URL=https://siged.example.com

# Banco de Dados Landlord
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=siged_landlord
DB_USERNAME=siged_admin
DB_PASSWORD=sua_senha_forte_aqui

# Tenancy
TENANCY_DB_HOST=localhost
TENANCY_DB_PORT=3306
TENANCY_DB_USERNAME=siged_admin
TENANCY_DB_PASSWORD=sua_senha_forte_aqui
TENANCY_DB_PREFIX=siged_tenant_

# Mail (opcional)
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=465
MAIL_USERNAME=seu_email@example.com
MAIL_PASSWORD=sua_senha_email

# WhatsApp (opcional)
WHATSAPP_ENABLED=false
WHATSAPP_API_URL=
WHATSAPP_API_TOKEN=

# Cache
CACHE_DRIVER=file

# Session
SESSION_DRIVER=cookie
SESSION_LIFETIME=120

# Segurança
FORCE_HTTPS=true
SECURE_HEADERS=true
```

---

### PASSO 6: Acessar Instalador Web

#### 6.1 Generar Chave da Aplicação

```bash
php artisan key:generate
```

Ou deixe o instalador gerar automaticamente.

#### 6.2 Acessar via Navegador

Abra seu navegador e acesse:

```
https://siged.example.com/installer
```

#### 6.3 Seguir os Passos do Instalador

**Passo 1: Verificação de Requisitos**
- Verifique se todos os requisitos estão atendidos (✓)
- Clique em "Próximo"

**Passo 2: Configurar Banco de Dados**
- Host: localhost
- Porta: 3306
- Usuário: siged_admin
- Senha: [sua senha]
- Nome do banco: siged_landlord
- Clique em "Próximo"

**Passo 3: Configurar Sistema**
- Nome do sistema: SIGED
- Email do sistema: admin@siged.example.com
- Nome do admin: [Seu Nome]
- Email do admin: seu@email.com
- Senha do admin: [senha forte]
- Telefone: (XX) XXXXX-XXXX
- Nome da instituição: Sua Instituição
- CNPJ: XX.XXX.XXX/XXXX-XX
- Endereço: Sua instituição
- Cidade, Estado, CEP
- Clique em "Próximo"

**Passo 4: Configurar Tenant**
- Domínio: instituicao1.siged.example.com
- Nome do tenant: Instituição 1
- Clique em "Próximo"

**Passo 5: Revisar Resumo**
- Verifique todas as informações
- Clique em "Instalar"

#### 6.4 Concluir Instalação

Quando ver a mensagem "Instalação concluída com sucesso!", clique em "Ir para o Dashboard".

---

### PASSO 7: Configurar Domínio no cPanel

#### 7.1 Criar Addon Domain

Via cPanel:
1. Acesse "Addon Domains"
2. Preencha:
   - Domain Name: `instituicao1.siged.example.com`
   - Document Root: `/public_html/siged/public`
3. Clique em "Add Domain"

#### 7.2 Configurar SSL/HTTPS

Via cPanel > AutoSSL:
1. Selecione o domínio
2. Clique em "Manage"
3. Verifique se está com SSL ativo

---

## ✅ VERIFICAÇÃO PÓS-INSTALAÇÃO

### Checklist de Verificação

```bash
# 1. Verificar se .env foi criado
ls -la .env

# 2. Verificar permissões
ls -la storage/
ls -la bootstrap/cache/

# 3. Testar banco de dados
php artisan migrate --check

# 4. Testar cache
php artisan cache:clear

# 5. Testar logs
tail -f storage/logs/laravel.log
```

### Testes no Navegador

1. **Página de Login**
   ```
   https://siged.example.com/login
   ```
   - Email: admin@siged.example.com
   - Senha: [a senha configurada]

2. **Dashboard**
   ```
   https://siged.example.com/dashboard
   ```
   - Deve mostrar o dashboard do admin

3. **API**
   ```
   https://siged.example.com/api/auth/login
   ```
   - Testar autenticação via API

---

## 🔧 CONFIGURAÇÕES ADICIONAIS RECOMENDADAS

### 1. Cronjob para Limpeza de Logs

Via cPanel > Cron Jobs:

```
Comando: php /home/usuario/public_html/siged/artisan schedule:run >> /dev/null 2>&1
Frequência: A cada 1 minuto
```

### 2. Backup Automatizado

```bash
# Script de backup
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u siged_admin -p'senha' siged_landlord > /backups/siged_landlord_$DATE.sql
mysqldump -u siged_admin -p'senha' siged_tenant_1 > /backups/siged_tenant_1_$DATE.sql
tar -czf /backups/siged_$DATE.tar.gz /home/usuario/public_html/siged/
```

### 3. Monitoramento de Erros

Acessar logs em:
```bash
tail -f storage/logs/laravel.log
```

### 4. Limpeza de Cache

```bash
php artisan cache:clear
php artisan config:clear
php artisan view:clear
php artisan route:clear
```

---

## 🐛 RESOLUÇÃO DE PROBLEMAS COMUNS

### Erro: "SQLSTATE[HY000]: General error: 1030 Got error"

**Solução:**
```bash
# Aumentar limite MySQL via cPanel
# Editar /etc/my.cnf ou contatar hosting
max_connections=1000
max_allowed_packet=512M
```

### Erro: "Storage/app/public permission denied"

**Solução:**
```bash
chmod -R 777 storage/app/public
chown -R nobody:nobody storage/app/public
```

### Erro: "Class not found after composer install"

**Solução:**
```bash
composer dump-autoload
php artisan optimize:clear
```

### Erro: "Connection refused" ao conectar banco

**Solução:**
1. Verifique se MySQL está rodando
2. Verifique credenciais em .env
3. Teste via phpMyAdmin
4. Verifique firewall

---

## 📞 SUPORTE

### Contato
- Email: suporte@siged.com.br
- Documentação: https://docs.siged.com.br
- Issues: https://github.com/siged/laravel/issues

---

## 📅 PRÓXIMOS PASSOS

Após instalação bem-sucedida:

1. ✅ Criar nova instituição/tenant
2. ✅ Importar alunos (CSV)
3. ✅ Criar turmas e disciplinas
4. ✅ Atribuir professores
5. ✅ Configurar ano letivo
6. ✅ Treinar usuários

---

**Última atualização**: 2024
**Versão**: Laravel 11 Multi-tenant v1.0
