# Guia de Instalação - Portal Legislativo

## 📋 Pré-requisitos

### Servidor Web
- **Apache 2.4+** ou **Nginx 1.18+**
- **PHP 7.4+** (recomendado PHP 8.0+)
- **MySQL 5.7+** ou **MariaDB 10.3+**

### Extensões PHP Necessárias
```bash
# Ubuntu/Debian
sudo apt install php-mysql php-gd php-mbstring php-curl php-zip php-xml

# CentOS/RHEL
sudo yum install php-mysql php-gd php-mbstring php-curl php-zip php-xml
```

### Configurações PHP Recomendadas
```ini
upload_max_filesize = 10M
post_max_size = 10M
max_execution_time = 300
memory_limit = 256M
```

## 🚀 Instalação Passo a Passo

### 1. Preparação do Ambiente

#### 1.1 Baixar e Extrair o Portal
```bash
# Extrair o arquivo
tar -xzf portal_legislativo_completo.tar.gz

# Mover para o diretório web
sudo mv portal_legislativo /var/www/html/

# Definir permissões
sudo chown -R www-data:www-data /var/www/html/portal_legislativo
sudo chmod -R 755 /var/www/html/portal_legislativo
sudo chmod -R 777 /var/www/html/portal_legislativo/uploads
```

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

#### 2.1 Criar o Banco de Dados
```sql
-- Conectar ao MySQL como root
mysql -u root -p

-- Criar banco de dados
CREATE DATABASE portal_legislativo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Criar usuário específico (recomendado)
CREATE USER 'portal_user'@'localhost' IDENTIFIED BY 'senha_segura_aqui';
GRANT ALL PRIVILEGES ON portal_legislativo.* TO 'portal_user'@'localhost';
FLUSH PRIVILEGES;

-- Usar o banco criado
USE portal_legislativo;

-- Importar a estrutura
SOURCE /var/www/html/portal_legislativo/sql/database.sql;
```

#### 2.2 Inserir Dados Iniciais
```sql
-- Inserir usuário administrador inicial
INSERT INTO usuarios (nome, username, email, password, nivel, ativo, data_criacao) 
VALUES (
    'Administrador do Sistema', 
    'admin', 
    'admin@camara.gov.br', 
    '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 
    'admin', 
    1, 
    NOW()
);

-- Inserir categorias de notícias básicas
INSERT INTO categorias_noticias (nome, ativo) VALUES 
('Geral', 1),
('Sessões', 1),
('Eventos', 1),
('Comunicados', 1);

-- Inserir categorias de transparência
INSERT INTO categorias_transparencia (nome, descricao, ordem, ativo) VALUES 
('Receitas', 'Documentos relacionados às receitas municipais', 1, 1),
('Despesas', 'Documentos relacionados às despesas municipais', 2, 1),
('Licitações', 'Editais e resultados de licitações', 3, 1),
('Contratos', 'Contratos firmados pela Câmara Municipal', 4, 1),
('Folha de Pagamento', 'Informações sobre remuneração dos servidores', 5, 1);
```

### 3. Configuração da Aplicação

#### 3.1 Configurar Conexão com Banco
```bash
# Editar arquivo de configuração
sudo nano /var/www/html/portal_legislativo/config/db.php
```

Ajustar as configurações:
```php
<?php
// Configurações do banco de dados
define('DB_HOST', 'localhost');
define('DB_NAME', 'portal_legislativo');
define('DB_USER', 'portal_user');
define('DB_PASS', 'senha_segura_aqui');
define('DB_CHARSET', 'utf8mb4');

// URLs do sistema
define('BASE_URL', 'http://seu-dominio.com/portal_legislativo/public/');
define('ADMIN_URL', 'http://seu-dominio.com/portal_legislativo/admin/');
define('UPLOAD_URL', 'http://seu-dominio.com/portal_legislativo/uploads/');

// Configurações de upload
define('UPLOAD_PATH', '/var/www/html/portal_legislativo/uploads/');
define('MAX_FILE_SIZE', 10 * 1024 * 1024); // 10MB
?>
```

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

#### 4.1 Apache Virtual Host
```apache
<VirtualHost *:80>
    ServerName portal-legislativo.local
    DocumentRoot /var/www/html/portal_legislativo/public
    
    <Directory /var/www/html/portal_legislativo/public>
        AllowOverride All
        Require all granted
        
        # Rewrite rules para URLs amigáveis
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php [QSA,L]
    </Directory>
    
    # Proteger diretórios sensíveis
    <Directory /var/www/html/portal_legislativo/config>
        Require all denied
    </Directory>
    
    <Directory /var/www/html/portal_legislativo/includes>
        Require all denied
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/portal_legislativo_error.log
    CustomLog ${APACHE_LOG_DIR}/portal_legislativo_access.log combined
</VirtualHost>
```

#### 4.2 Nginx Configuration
```nginx
server {
    listen 80;
    server_name portal-legislativo.local;
    root /var/www/html/portal_legislativo/public;
    index index.php index.html;
    
    # Logs
    access_log /var/log/nginx/portal_legislativo_access.log;
    error_log /var/log/nginx/portal_legislativo_error.log;
    
    # PHP handling
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # Proteger arquivos sensíveis
    location ~ ^/(config|includes|sql)/ {
        deny all;
        return 404;
    }
    
    # URLs amigáveis
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    # Cache para arquivos estáticos
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
```

### 5. Configurações de Segurança

#### 5.1 Arquivo .htaccess (Apache)
```apache
# Proteger arquivos de configuração
<Files "*.sql">
    Require all denied
</Files>

<Files "*.log">
    Require all denied
</Files>

# Headers de segurança
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

# Prevenir acesso direto a arquivos PHP em uploads
<Directory "uploads">
    <Files "*.php">
        Require all denied
    </Files>
</Directory>
```

#### 5.2 Configurações PHP de Segurança
```ini
# php.ini
expose_php = Off
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
```

### 6. Configuração de Email (Opcional)

#### 6.1 SMTP Configuration
Editar `includes/functions.php`:
```php
// Configurações de email
define('SMTP_HOST', 'smtp.gmail.com');
define('SMTP_PORT', 587);
define('SMTP_USERNAME', 'seu-email@gmail.com');
define('SMTP_PASSWORD', 'sua-senha-app');
define('SMTP_ENCRYPTION', 'tls');
define('FROM_EMAIL', 'noreply@camara.gov.br');
define('FROM_NAME', 'Câmara Municipal');
```

### 7. Testes de Instalação

#### 7.1 Verificar Funcionalidades Básicas
```bash
# Testar conexão com banco
php -r "
require '/var/www/html/portal_legislativo/config/db.php';
try {
    \$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHARSET, DB_USER, DB_PASS);
    echo 'Conexão com banco: OK\n';
} catch(PDOException \$e) {
    echo 'Erro na conexão: ' . \$e->getMessage() . '\n';
}
"

# Verificar permissões de upload
ls -la /var/www/html/portal_legislativo/uploads/

# Testar acesso web
curl -I http://localhost/portal_legislativo/public/
```

#### 7.2 Login Inicial
1. Acesse: `http://seu-dominio.com/portal_legislativo/admin/`
2. **Usuário**: `admin`
3. **Senha**: `password`
4. **IMPORTANTE**: Altere a senha imediatamente após o primeiro login!

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

#### 8.1 Personalização Básica
1. **Logo e Identidade Visual**
   - Substitua os arquivos em `public/images/`
   - Edite as cores em `public/css/style.css`

2. **Informações da Câmara**
   - Acesse o painel administrativo
   - Configure dados básicos no menu Configurações

3. **Símbolos Municipais**
   - Adicione brasão, bandeira e hino
   - Edite a página `public/simbolos-municipais.php`

#### 8.2 Backup Automático
```bash
# Criar script de backup
sudo nano /usr/local/bin/backup_portal.sh
```

```bash
#!/bin/bash
BACKUP_DIR="/backup/portal_legislativo"
DATE=$(date +%Y%m%d_%H%M%S)

# Criar diretório de backup
mkdir -p $BACKUP_DIR

# Backup do banco de dados
mysqldump -u portal_user -p'senha_segura_aqui' portal_legislativo > $BACKUP_DIR/db_$DATE.sql

# Backup dos arquivos
tar -czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/html/portal_legislativo/uploads/

# Manter apenas os últimos 30 backups
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
```

```bash
# Tornar executável e agendar
sudo chmod +x /usr/local/bin/backup_portal.sh
sudo crontab -e

# Adicionar linha para backup diário às 2h
0 2 * * * /usr/local/bin/backup_portal.sh
```

### 9. Monitoramento e Logs

#### 9.1 Logs do Sistema
```bash
# Logs de erro do PHP
tail -f /var/log/php_errors.log

# Logs do Apache
tail -f /var/log/apache2/portal_legislativo_error.log

# Logs do Nginx
tail -f /var/log/nginx/portal_legislativo_error.log

# Logs personalizados do portal
tail -f /var/www/html/portal_legislativo/logs/system.log
```

#### 9.2 Monitoramento de Performance
```bash
# Instalar ferramentas de monitoramento
sudo apt install htop iotop nethogs

# Monitorar uso de recursos
htop
iotop
nethogs
```

### 10. Solução de Problemas Comuns

#### 10.1 Erro "Conexão com banco de dados falhou"
```bash
# Verificar se MySQL está rodando
sudo systemctl status mysql

# Verificar credenciais
mysql -u portal_user -p portal_legislativo

# Verificar configurações PHP
php -m | grep mysql
```

#### 10.2 Erro "Permissão negada" em uploads
```bash
# Corrigir permissões
sudo chown -R www-data:www-data /var/www/html/portal_legislativo/uploads/
sudo chmod -R 755 /var/www/html/portal_legislativo/uploads/
```

#### 10.3 Páginas em branco (erro 500)
```bash
# Verificar logs de erro
tail -f /var/log/apache2/error.log

# Verificar configurações PHP
php -l /var/www/html/portal_legislativo/public/index.php

# Verificar mod_rewrite (Apache)
sudo a2enmod rewrite
sudo systemctl restart apache2
```

### 11. Atualizações e Manutenção

#### 11.1 Processo de Atualização
1. **Backup completo** antes de qualquer atualização
2. **Testar em ambiente de desenvolvimento** primeiro
3. **Aplicar atualizações** em horário de menor movimento
4. **Verificar funcionalidades** após atualização

#### 11.2 Manutenção Regular
- **Backup diário** automático
- **Limpeza de logs** antigos
- **Atualização de dependências** PHP/MySQL
- **Monitoramento de segurança**
- **Otimização de banco de dados**

### 12. Suporte Técnico

Para suporte adicional:
- **Email**: suporte@portal-legislativo.com
- **Documentação**: README.md
- **Logs do sistema**: `/var/log/`

---

**Instalação concluída com sucesso!** 🎉

Acesse o portal público em: `http://seu-dominio.com/portal_legislativo/public/`
Acesse o painel administrativo em: `http://seu-dominio.com/portal_legislativo/admin/`

