# Correção do Erro 413 (Content Too Large) no Upload de Backup

## Problema
Erro **413 Content Too Large** ao tentar fazer upload de backup para o novo servidor.

## Causa
O arquivo de backup excede os limites configurados em:
1. **PHP** (`upload_max_filesize`, `post_max_size`)
2. **Nginx** (`client_max_body_size`)
3. **Timeouts** do proxy Nginx

## Solução

### 1. Execute o Script de Correção

No servidor, execute:

```bash
cd /var/www/gestorstream
chmod +x corrigir-limites-upload-backup.sh
sudo ./corrigir-limites-upload-backup.sh
```

Este script irá:
- ✅ Aumentar `upload_max_filesize` para **10240M (10GB)**
- ✅ Aumentar `post_max_size` para **10240M (10GB)**
- ✅ Aumentar `client_max_body_size` no Nginx para **10240M (10GB)**
- ✅ Aumentar timeouts do proxy para **3600s (1 hora)**
- ✅ Aumentar `max_execution_time` para **3600s (1 hora)**
- ✅ Reiniciar PHP-FPM e recarregar Nginx

### 2. Verificar Configurações Aplicadas

```bash
# Verificar limites do PHP
php -i | grep -E "upload_max_filesize|post_max_size|max_execution_time"

# Verificar configuração do Nginx
grep "client_max_body_size" /etc/nginx/sites-available/gestorstream
```

### 3. Verificar Limites Atuais

```bash
cd /var/www/gestorstream/backend
php artisan tinker --execute="
echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . PHP_EOL;
echo 'post_max_size: ' . ini_get('post_max_size') . PHP_EOL;
echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;
echo 'memory_limit: ' . ini_get('memory_limit') . PHP_EOL;
"
```

### 4. Se o Script Não Funcionar (Configuração Manual)

#### A. PHP

Edite o arquivo PHP-FPM:

```bash
sudo nano /etc/php/8.2/fpm/php.ini
```

Adicione/altere:
```ini
upload_max_filesize = 10240M
post_max_size = 10240M
max_execution_time = 3600
max_input_time = 3600
memory_limit = 512M
```

Reinicie PHP-FPM:
```bash
sudo systemctl restart php8.2-fpm
```

#### B. Nginx

Edite o arquivo de configuração:

```bash
sudo nano /etc/nginx/sites-available/gestorstream
```

Adicione/altere no bloco `server`:
```nginx
client_max_body_size 10240M;
```

No bloco `location /api` (se existir), adicione:
```nginx
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
```

Teste e recarregue:
```bash
sudo nginx -t
sudo systemctl reload nginx
```

## Melhorias Aplicadas no Código

### 1. Controller (`DatabaseBackupController.php`)
- ✅ Removida validação de tamanho no Laravel (limitado pelo PHP/Nginx)
- ✅ Melhor tratamento de erro 413
- ✅ Logs detalhados do processo de upload
- ✅ Mensagens de erro mais informativas
- ✅ Tratamento específico para `PostTooLargeException`

### 2. Script de Correção
- ✅ Script automatizado para aplicar todas as configurações
- ✅ Backup automático das configurações
- ✅ Verificação das configurações aplicadas

## Teste

1. Execute o script de correção
2. Verifique os logs: `tail -f /var/www/gestorstream/backend/storage/logs/laravel.log`
3. Tente fazer upload do backup novamente

## Troubleshooting

### Se o erro 413 persistir:

1. **Verificar qual serviço está bloqueando:**
   ```bash
   # Ver logs do Nginx
   tail -f /var/log/nginx/error.log
   
   # Ver logs do PHP-FPM
   tail -f /var/log/php8.2-fpm.log
   ```

2. **Verificar se as configurações foram aplicadas:**
   ```bash
   # PHP-FPM (via web)
   php -i | grep upload_max_filesize
   
   # Nginx
   nginx -T | grep client_max_body_size
   ```

3. **Se usar proxy reverso, verificar também:**
   - Cloudflare (Plan Free tem limite de 100MB)
   - Outros proxies/Load Balancers

### Se o arquivo for muito grande (>10GB):

1. Considere usar o storage remoto (MinIO/S3) ao invés de upload direto
2. Ou dividir o backup em partes menores
3. Ou usar `scp`/`rsync` diretamente no servidor

## Limites Configurados

Após executar o script:
- **upload_max_filesize**: 10240M (10GB)
- **post_max_size**: 10240M (10GB)
- **client_max_body_size**: 10240M (10GB)
- **max_execution_time**: 3600s (1 hora)
- **proxy timeouts**: 3600s (1 hora)

## Próximos Passos

1. ✅ Execute o script `corrigir-limites-upload-backup.sh`
2. ✅ Verifique as configurações aplicadas
3. ✅ Tente fazer upload novamente
4. ✅ Se funcionar, o backup será salvo em `storage/app/backups/`
