🚀 Guia de Hospedagem em Produção - Sistema Gabinete

📋 Índice

📋 Checklist de Arquivos para Alteração

OBRIGATÓRIO - Arquivo Principal

📁 src/config/config.php

Alterações necessárias:

<?php
// ❌ DESENVOLVIMENTO (REMOVER)
// define('DB_HOST', 'localhost');
// define('DB_USER', 'root');
// define('DB_PASS', 'root');
// define('BASE_URL', 'http://localhost:8888/gabinete');

// ✅ PRODUÇÃO (CONFIGURAR)
define('DB_HOST', 'SEU_HOST_BANCO');           // Ex: mysql.seudominio.com
define('DB_USER', 'SEU_USUARIO_BANCO');       // Ex: gabinete_user
define('DB_PASS', 'SUA_SENHA_SEGURA');        // Senha forte do banco
define('DB_NAME', 'gabinete_bd');             // Nome do banco (manter)
define('BASE_URL', 'https://seudominio.com'); // Sua URL de produção

// Fuso Horário (manter)
date_default_timezone_set('America/Belem');

// ❌ REMOVER CONFIGURAÇÕES DE DESENVOLVIMENTO
// error_reporting(E_ALL);
// ini_set('display_errors', 1);

// ✅ CONFIGURAÇÕES DE PRODUÇÃO
error_reporting(0);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/../logs/php_errors.log');
?>

⚠️ IMPORTANTE - Arquivos com URLs Hardcoded

📁 contas/db.php

Linha 9: Alterar configurações de conexão

// ❌ DESENVOLVIMENTO
$DB_HOST = defined('DB_HOST') ? DB_HOST : (getenv('DB_HOST') ?: 'localhost');
$DB_PORT = defined('DB_PORT') ? DB_PORT : (getenv('DB_PORT') !== false ? intval(getenv('DB_PORT')) : 8889);

// ✅ PRODUÇÃO
$DB_HOST = defined('DB_HOST') ? DB_HOST : (getenv('DB_HOST') ?: 'SEU_HOST_BANCO');
$DB_PORT = defined('DB_PORT') ? DB_PORT : (getenv('DB_PORT') !== false ? intval(getenv('DB_PORT')) : 3306);

📁 contas/index.php

Linha 310: Alterar link de navegação

<!-- ❌ DESENVOLVIMENTO -->
<a href="http://localhost:8888/gabinete/" class="nav-link nav-primary nav-push-right">

<!-- ✅ PRODUÇÃO -->
<a href="https://seudominio.com/" class="nav-link nav-primary nav-push-right">

📁 contas/relatorios.php

Linhas 223, 235: Alterar links de navegação

<!-- ❌ DESENVOLVIMENTO -->
<a href="http://localhost:8888/gabinete/" class="nav-link nav-primary nav-push-right">

<!-- ✅ PRODUÇÃO -->
<a href="https://seudominio.com/" class="nav-link nav-primary nav-push-right">

📁 contas/contas.php

Linha 234: Alterar link de navegação

<!-- ❌ DESENVOLVIMENTO -->
<a href="http://localhost:8888/gabinete/" class="nav-link nav-home nav-push-right">

<!-- ✅ PRODUÇÃO -->
<a href="https://seudominio.com/" class="nav-link nav-home nav-push-right">

🔧 Configurações Adicionais de Segurança

1. Arquivo .htaccess (Raiz do Projeto)

# Segurança Geral
ServerTokens Prod
ServerSignature Off

# Proteção contra ataques
<IfModule mod_headers.c>
    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"
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';"
</IfModule>

# Bloquear acesso a arquivos sensíveis
<Files ~ "\.(log|sql|md|txt)$">
    Order allow,deny
    Deny from all
</Files>

# Bloquear acesso a diretórios de configuração
<DirectoryMatch "/(config|logs|sql)/">
    Order allow,deny
    Deny from all
</DirectoryMatch>

# Redirecionar HTTP para HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

2. Proteção da Pasta uploads/

# uploads/.htaccess
<Files ~ "\.(php|php3|php4|php5|phtml|pl|py|jsp|asp|sh|cgi)$">
    Order allow,deny
    Deny from all
</Files>

3. Proteção da Pasta src/

# src/.htaccess
Order allow,deny
Deny from all

🗄️ Configuração do Banco de Dados

1. Criar Usuário Específico

-- Conectar como root e executar:
CREATE USER 'gabinete_user'@'%' IDENTIFIED BY 'SENHA_FORTE_AQUI';
GRANT SELECT, INSERT, UPDATE, DELETE ON gabinete_bd.* TO 'gabinete_user'@'%';
FLUSH PRIVILEGES;

2. Importar Estrutura

# Upload do arquivo gabinete_bd.sql via phpMyAdmin ou linha de comando
mysql -u gabinete_user -p gabinete_bd < gabinete_bd.sql

📂 Permissões de Arquivos e Pastas

# Permissões recomendadas
chmod 755 /caminho/para/gabinete/
chmod 644 /caminho/para/gabinete/*.php
chmod 755 /caminho/para/gabinete/uploads/
chmod 755 /caminho/para/gabinete/src/logs/
chmod 600 /caminho/para/gabinete/src/config/config.php

🔐 Variáveis de Ambiente (Recomendado)

Criar arquivo .env (não versionar)

# .env
DB_HOST=seu_host_banco
DB_USER=gabinete_user
DB_PASS=sua_senha_forte
DB_NAME=gabinete_bd
BASE_URL=https://seudominio.com
ENVIRONMENT=production

Modificar config.php para usar .env

<?php
// Carregar variáveis de ambiente
if (file_exists(__DIR__ . '/../../.env')) {
    $env = parse_ini_file(__DIR__ . '/../../.env');
    foreach ($env as $key => $value) {
        $_ENV[$key] = $value;
    }
}

// Configurações usando variáveis de ambiente
define('DB_HOST', $_ENV['DB_HOST'] ?? 'localhost');
define('DB_USER', $_ENV['DB_USER'] ?? 'root');
define('DB_PASS', $_ENV['DB_PASS'] ?? '');
define('DB_NAME', $_ENV['DB_NAME'] ?? 'gabinete_bd');
define('BASE_URL', $_ENV['BASE_URL'] ?? 'http://localhost');

// Configurações baseadas no ambiente
if (($_ENV['ENVIRONMENT'] ?? 'development') === 'production') {
    error_reporting(0);
    ini_set('display_errors', 0);
} else {
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
}
?>

🚨 Arquivos a Remover em Produção

✅ Já Removidos (Limpeza Realizada)

  • ✅ debug_ajax.php
  • ✅ debug_login.php
  • ✅ test_*.php (todos os arquivos de teste)
  • ✅ simple_*.php (arquivos de debug simples)
  • ✅ reset_*.php (scripts de reset)
  • ✅ generate_hash.php
  • ✅ check_users_table.php
  • ✅ create_test_user.php

⚠️ Verificar se Existem

  • ☐ phpinfo.php
  • ☐ info.php
  • ☐ test.php
  • ☐ Arquivos .bak ou .backup
  • ☐ Arquivos temporários (~, .tmp)

📊 Monitoramento e Logs

1. Configurar Logs de Erro

// Adicionar ao config.php
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/../logs/php_errors.log');

2. Rotação de Logs

# Adicionar ao crontab do servidor
0 0 * * 0 find /caminho/para/gabinete/src/logs/ -name "*.log" -mtime +30 -delete

🔄 Backup Automático

Script de Backup do Banco

#!/bin/bash
# backup_gabinete.sh
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="/caminho/para/backups"
mysqldump -u gabinete_user -p'SENHA' gabinete_bd > $BACKUP_DIR/gabinete_$DATE.sql
gzip $BACKUP_DIR/gabinete_$DATE.sql

# Manter apenas backups dos últimos 30 dias
find $BACKUP_DIR -name "gabinete_*.sql.gz" -mtime +30 -delete

✅ Checklist Final de Deploy

  • ☐ ✅ Alterar src/config/config.php
  • ☐ ⚠️ Alterar URLs nos arquivos do módulo contas/
  • ☐ 🔐 Configurar .htaccess de segurança
  • ☐ 🗄️ Criar usuário específico do banco
  • ☐ 📂 Configurar permissões de arquivos
  • ☐ 🚨 Remover arquivos de desenvolvimento
  • ☐ 📊 Configurar logs de erro
  • ☐ 🔄 Configurar backup automático
  • ☐ 🧪 Testar todas as funcionalidades
  • ☐ 🔒 Configurar SSL/HTTPS
  • ☐ 📧 Configurar notificações de erro

🆘 Suporte e Troubleshooting

Problemas Comuns:

1. Erro de Conexão com Banco

  • Verificar credenciais em config.php
  • Confirmar se usuário tem permissões
  • Testar conexão via phpMyAdmin

2. Páginas em Branco

  • Ativar logs de erro temporariamente
  • Verificar permissões de arquivos
  • Confirmar se todas as extensões PHP estão instaladas

3. Upload de Arquivos Não Funciona

  • Verificar permissões da pasta uploads/
  • Confirmar configurações de upload_max_filesize no PHP

4. Links Quebrados

  • Verificar BASE_URL no config.php
  • Confirmar se .htaccess está configurado