# Guia de Instalação - Portal de Denúncias

## 📋 Pré-requisitos

### Requisitos do Servidor

#### Obrigatórios
- **PHP**: 7.4 ou superior (8.0+ recomendado)
- **MySQL**: 5.7 ou superior (8.0+ recomendado)
- **Apache/Nginx**: Com mod_rewrite habilitado
- **Memória PHP**: 128MB mínimo (256MB+ recomendado)
- **Espaço em Disco**: 500MB mínimo (1GB+ recomendado)

#### Extensões PHP Obrigatórias
- `pdo` - Acesso ao banco de dados
- `pdo_mysql` - Driver MySQL para PDO
- `openssl` - Criptografia e JWT
- `json` - Manipulação de JSON
- `fileinfo` - Detecção de tipos de arquivo
- `mbstring` - Manipulação de strings multibyte

#### Extensões PHP Recomendadas
- `opcache` - Cache de opcode para performance
- `zip` - Compressão de arquivos
- `curl` - Requisições HTTP
- `gd` ou `imagick` - Manipulação de imagens

### Verificação de Requisitos

Execute o seguinte comando para verificar sua versão do PHP:

```bash
php -v
```

Para verificar extensões instaladas:

```bash
php -m | grep -E "(pdo|mysql|openssl|json|fileinfo)"
```

## 🚀 Processo de Instalação

### 1. Download e Preparação

#### Via Git (Recomendado)
```bash
git clone https://github.com/MaximoAlexandreDev/reportingchannel.git
cd reportingchannel
```

#### Via Download Direto
1. Baixe o arquivo ZIP do GitHub
2. Extraia para o diretório do seu servidor web
3. Navegue para o diretório extraído

### 2. Configuração do Servidor Web

#### Apache

1. **Configure o Document Root** para apontar para o diretório `public/`

```apache
<VirtualHost *:80>
    ServerName seudominio.com
    DocumentRoot /caminho/para/reportingchannel/public
    
    <Directory /caminho/para/reportingchannel/public>
        AllowOverride All
        Require all granted
    </Directory>
    
    # Logs
    ErrorLog ${APACHE_LOG_DIR}/reportingchannel_error.log
    CustomLog ${APACHE_LOG_DIR}/reportingchannel_access.log combined
</VirtualHost>
```

2. **Habilite mod_rewrite**
```bash
sudo a2enmod rewrite
sudo systemctl restart apache2
```

#### Nginx

```nginx
server {
    listen 80;
    server_name seudominio.com;
    root /caminho/para/reportingchannel/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
    
    # Block access to uploads
    location ^~ /uploads/ {
        deny all;
        return 403;
    }
}
```

### 3. Configuração de Permissões

```bash
# Torne o proprietário correto
sudo chown -R www-data:www-data /caminho/para/reportingchannel

# Configure permissões de diretórios
sudo chmod 755 /caminho/para/reportingchannel
sudo chmod 755 /caminho/para/reportingchannel/config
sudo chmod 755 /caminho/para/reportingchannel/uploads
sudo chmod 755 /caminho/para/reportingchannel/storage
sudo chmod -R 755 /caminho/para/reportingchannel/storage/logs

# Configure permissões de arquivos
sudo chmod 644 /caminho/para/reportingchannel/config/config.php
sudo find /caminho/para/reportingchannel/public -type f -exec chmod 644 {} \;
```

### 4. Configuração do Banco de Dados

#### Criar Base de Dados e Usuário

```sql
-- Conecte como root no MySQL
mysql -u root -p

-- Crie o banco de dados
CREATE DATABASE reporting_portal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Crie um usuário dedicado
CREATE USER 'reporting_user'@'localhost' IDENTIFIED BY 'senha_segura_aqui';

-- Conceda permissões
GRANT ALL PRIVILEGES ON reporting_portal.* TO 'reporting_user'@'localhost';
FLUSH PRIVILEGES;

-- Saia do MySQL
EXIT;
```

### 5. Executar o Wizard de Instalação

1. **Acesse o instalador** em seu navegador:
   ```
   http://seudominio.com/install.php
   ```

2. **Passo 1: Verificação de Requisitos**
   - O sistema verificará automaticamente todos os requisitos
   - Corrija quaisquer problemas antes de continuar

3. **Passo 2: Configuração do Banco**
   - **Servidor**: `localhost` (ou seu servidor MySQL)
   - **Nome do Banco**: `reporting_portal`
   - **Usuário**: `reporting_user`
   - **Senha**: A senha que você definiu

4. **Passo 3: Usuário Administrador**
   - Crie o primeiro usuário administrador
   - Use uma senha forte (mínimo 8 caracteres)
   - Anote as credenciais com segurança

5. **Passo 4: Finalização**
   - O sistema criará a estrutura de segurança
   - Configurará diretórios protegidos
   - Gerará chaves de criptografia

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

#### 6.1 Configuração de E-mail (Opcional)

Edite o arquivo `config/config.php`:

```php
// Email configuration
define('SMTP_HOST', 'smtp.seuservidor.com');
define('SMTP_PORT', 587);
define('SMTP_USERNAME', 'usuario@seudominio.com');
define('SMTP_PASSWORD', 'sua_senha_smtp');
define('FROM_EMAIL', 'noreply@seudominio.com');
define('FROM_NAME', 'Portal de Denúncias');
```

#### 6.2 Configuração de Debug (Desenvolvimento)

Para ambiente de desenvolvimento:

```php
// Debug mode (enable for development/debugging)
define('DEBUG_MODE', true);

// Enhanced database logging (enable for audit)
define('DB_AUDIT_LOG', true);
```

Para produção, mantenha sempre:

```php
define('DEBUG_MODE', false);
define('DB_AUDIT_LOG', false);
```

#### 6.3 Configuração de Upload

Ajuste se necessário no `config/config.php`:

```php
// File upload settings
define('MAX_FILE_SIZE', 10 * 1024 * 1024); // 10MB
define('MAX_FILES', 3);
define('ALLOWED_EXTENSIONS', [
    'txt', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 
    'pdf', 'rtf', 'jpg', 'jpeg', 'png', 'zip', 'rar'
]);
```

## ✅ Verificação da Instalação

### 1. Teste Básico

1. **Portal Público**: Acesse `http://seudominio.com`
   - Deve exibir a página inicial
   - Link "Fazer Denúncia" deve funcionar

2. **Área Administrativa**: Acesse `http://seudominio.com/admin`
   - Faça login com as credenciais criadas
   - Dashboard deve carregar corretamente

3. **API**: Acesse `http://seudominio.com/api/v1`
   - Deve retornar informações da API em JSON

### 2. Teste de Funcionalidades

#### Teste de Submissão
1. No portal público, clique em "Fazer Denúncia"
2. Preencha o formulário
3. Envie a denúncia
4. Verifique se um protocolo foi gerado

#### Teste Administrativo
1. Acesse a área administrativa
2. Navegue para "Denúncias"
3. Verifique se a denúncia aparece na lista

#### Teste da API
```bash
# Teste de autenticação
curl -X POST http://seudominio.com/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"sua_senha"}'

# Teste de endpoints públicos
curl http://seudominio.com/api/v1/form-types
```

### 3. Verificação de Logs

Verifique se os logs estão sendo gerados:

```bash
# Logs da aplicação
ls -la storage/logs/

# Logs do servidor web
tail -f /var/log/apache2/reportingchannel_error.log
# ou para Nginx
tail -f /var/log/nginx/error.log
```

## 🔧 Solução de Problemas Comuns

### Erro 500 - Internal Server Error

1. **Verifique os logs** do servidor web
2. **Permissões**: Certifique-se de que www-data tem acesso
3. **mod_rewrite**: Verifique se está habilitado
4. **PHP Extensions**: Confirme que todas estão instaladas

```bash
# Verificar logs do PHP
tail -f /var/log/php/error.log

# Verificar status do Apache
sudo systemctl status apache2

# Testar configuração do Apache
sudo apache2ctl configtest
```

### Erro de Conexão com Banco

1. **Credenciais**: Verifique em `config/config.php`
2. **Servidor MySQL**: Confirme que está rodando
3. **Firewall**: Verifique se a porta 3306 está aberta

```bash
# Testar conexão manual
mysql -h localhost -u reporting_user -p reporting_portal

# Verificar status do MySQL
sudo systemctl status mysql
```

### Uploads Não Funcionam

1. **Permissões**: Diretório `uploads/` deve ser gravável
2. **PHP Settings**: Verifique `upload_max_filesize` e `post_max_size`
3. **Espaço em Disco**: Certifique-se de que há espaço suficiente

```bash
# Verificar permissões
ls -la uploads/

# Verificar configurações PHP
php -i | grep -E "(upload_max_filesize|post_max_size|max_execution_time)"
```

### Problemas de Performance

1. **OPcache**: Habilite se ainda não estiver
2. **Memória**: Aumente `memory_limit` se necessário
3. **Logs**: Desabilite debug em produção

```ini
; php.ini
opcache.enable=1
memory_limit=256M
max_execution_time=300
```

## 🔄 Atualizações

### Backup Antes de Atualizar

```bash
# Backup do banco de dados
mysqldump -u reporting_user -p reporting_portal > backup_$(date +%Y%m%d).sql

# Backup dos arquivos
tar -czf backup_files_$(date +%Y%m%d).tar.gz \
  config/ uploads/ storage/logs/
```

### Processo de Atualização

1. **Fazer backup** (conforme acima)
2. **Download** da nova versão
3. **Substituir arquivos** (exceto config/ e uploads/)
4. **Executar migrações** se houver
5. **Testar funcionalidades**

## 📞 Suporte

### Informações para Suporte

Sempre inclua as seguintes informações ao solicitar suporte:

- **Versão do Sistema**: Encontrada em `config/config.php`
- **Versão do PHP**: `php -v`
- **Versão do MySQL**: `mysql --version`
- **Sistema Operacional**: `uname -a`
- **Logs de Erro**: Últimas entradas relevantes

### Contatos

- **E-mail Técnico**: maximo.alexandre@maximotecnologia.com.br
- **Documentação**: Esta pasta `/docs`
- **Issues**: GitHub Issues (se aplicável)