# TRAZA — Guía de Instalación

## Requisitos del servidor

- PHP 8.3+ con extensiones: pdo_mysql, json, mbstring, fileinfo, openssl
- MariaDB 10.6+ o MySQL 8.0+
- Apache 2.4+ con mod_rewrite habilitado
- Node.js 20+ y npm (solo para compilar el frontend)

---

## 1. Clonar / subir el proyecto

```bash
scp -r traza.doxe.com.mx/ usuario@servidor:/home/doxe/public_html/
```

---

## 2. Configurar variables de entorno

```bash
cd backend
cp .env.example .env
nano .env   # Editar DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, APP_KEY
```

Para generar APP_KEY:
```bash
php -r "echo bin2hex(random_bytes(16)) . PHP_EOL;"
```

---

## 3. Crear base de datos y usuario MySQL

```sql
CREATE DATABASE traza_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'traza_user'@'localhost' IDENTIFIED BY 'PASSWORD_SEGURO';
GRANT ALL PRIVILEGES ON traza_db.* TO 'traza_user'@'localhost';
FLUSH PRIVILEGES;
```

---

## 4. Ejecutar migraciones y seeders

```bash
cd backend/database
php migrate.php migrate
php migrate.php seed
```

Verificar estado:
```bash
php migrate.php status
```

Para un ambiente fresco (borra todo y recrea):
```bash
php migrate.php fresh:seed
```

---

## 5. Permisos de directorios

```bash
chmod -R 755 backend/storage/
chmod -R 777 backend/storage/uploads/
chmod -R 777 backend/storage/logs/
chmod 640 backend/.env
```

---

## 6. Configurar Apache

Copiar la configuración del VirtualHost:
```bash
cp deploy/apache/traza.conf /etc/apache2/sites-available/traza.conf
a2ensite traza.conf
a2enmod rewrite headers
systemctl reload apache2
```

O en cPanel/hosting compartido: el .htaccess en la raíz del dominio ya maneja el routing.

---

## 7. Compilar y desplegar el frontend

```bash
cd frontend
npm install
npm run build   # Genera los archivos en ../public_html/
```

El build output va directo a la carpeta pública del dominio.

---

## 8. Primer acceso

- URL: https://traza.doxe.com.mx
- Usuario: admin@traza.edu
- Contraseña: Traza@2026!
- **El sistema pedirá cambiar la contraseña en el primer acceso.**

---

## 9. Estructura en producción

```
/home/doxe/public_html/traza.doxe.com.mx/
├── backend/
│   ├── public/          ← DocumentRoot de /api (alias en Apache)
│   ├── storage/         ← NUNCA exponer públicamente
│   └── .env             ← NUNCA en git
├── frontend/            ← Fuentes TypeScript (solo en desarrollo)
└── index.html           ← Build de React (generado por npm run build)
```

---

## 10. Cronjob para alertas automáticas (opcional)

```bash
# Cada hora, generar alertas del sistema
0 * * * * php /home/doxe/public_html/traza.doxe.com.mx/backend/artisan alerts:generate
```

---

## Troubleshooting

**Error 500 en la API:**
```bash
tail -f backend/storage/logs/php_errors.log
```

**Sin permisos de escritura:**
```bash
chown -R www-data:www-data backend/storage/
```

**Sesión expira inmediatamente:**
Verificar que `SESSION_SECURE=false` en desarrollo (sin HTTPS) o configurar SSL en producción.
