# Despliegue en cPanel (Node.js Application Manager)

Esta guía explica cómo desplegar esta API híbrida (MySQL primero, CEDAH como respaldo) en cPanel usando el Administrador de aplicaciones Node.js.

## Requisitos

- cPanel con “Setup Node.js App” habilitado (Passenger/Apache).
- MySQL en tu hosting (phpMyAdmin disponible).
- Node 18 o 20 (recomendado: 18+ por Express 5.x).

## Variables de entorno a configurar en cPanel

- PORT: no es necesario definirla; cPanel la inyecta. La app ya usa `process.env.PORT`.
- DB_HOST: host de MySQL (ej. `localhost` o `127.0.0.1` o el host que te dé cPanel).
- DB_USER: usuario de MySQL (recuerda que cPanel antepone el prefijo, p. ej. `cpuser_cedah_user`).
- DB_PASSWORD: contraseña del usuario de MySQL.
- DB_NAME: nombre de la base (con prefijo de cPanel), p. ej. `cpuser_cedah_placas`.
- NODE_ENV: `production`.
- PUBLIC_URL: `https://energiagob.mx` (o tu dominio/subruta pública donde sirve la app).

La app ya usa estas vars en `database/connection.js` y `api-server-hibrido.js`.

## Pasos de despliegue

1) Subir el proyecto
- Sube la carpeta del proyecto (con `package.json`) al servidor (vía Administrador de archivos o Git/FTP). Recuerda la ruta, por ejemplo `/home/cpuser/apps/transporte`.

2) Crear la base de datos y usuario
- En cPanel > MySQL Databases crea:
  - Base de datos: `cpuser_cedah_placas`
  - Usuario: `cpuser_cedah_user` con su contraseña
  - Asigna privilegios (SELECT/INSERT/UPDATE son suficientes para este proyecto)
- En cPanel > phpMyAdmin selecciona `cpuser_cedah_placas` e importa `database/setup.sql`.
  - Esto crea la tabla `placas` e inserta datos de ejemplo.

3) Crear la app Node.js en cPanel
- cPanel > Setup Node.js App > Create Application
  - Node.js version: 18 o 20
  - Application mode: Production
  - Application root: ruta a tu proyecto (ej. `apps/transporte`)
  - Application URL: `https://energiagob.mx` (o la ruta donde la publicarás)
  - Application startup file: `app.js` (shim que carga `api-server-hibrido.js`)
- Guarda la app.

4) Instalar dependencias
- En la página de la app Node, pulsa “Run NPM Install”.

5) Configurar variables de entorno
- En la sección de Environment Variables agrega:
  - `DB_HOST`, `DB_USER`, `DB_PASSWORD`, `DB_NAME`, `NODE_ENV=production`.
- Guarda y “Restart Application”.

6) Probar
- Abre `https://energiagob.mx/health` para verificar estado.
  - Debes ver JSON con `status: ok` y `mode: 'hybrid'`.
- Prueba un endpoint: `https://energiagob.mx/api/consultar-placa/914WZ8`.
  - Si existe en tu MySQL, source = `mysql_local`.
  - Si no existe, intentará CEDAH y, si encuentra, lo guarda en MySQL.

## Notas y buenas prácticas

- Prefijos de cPanel: tu DB y usuario llevan prefijos (`cpuser_...`). Usa esos valores exactos en las vars de entorno.
- Puerto/URL: no abras puertos. Passenger enruta el tráfico al `PORT` interno automáticamente.
- MySQL host: si `localhost` falla, prueba `127.0.0.1` o el hostname que te muestre cPanel.
- Migraciones: `database/setup.sql` ya crea la tabla y datos de ejemplo. Si necesitas más datos, puedes usar `migrate-data.js` pero normalmente en cPanel no hay terminal. Lo más simple es importar SQL por phpMyAdmin.
- Dependencias livianas: este proyecto no usa Puppeteer, por lo que no es necesario configurarlo.
- Logs: revisa los logs de la app en la página de la app Node.js en cPanel para diagnosticar errores.

## Solución de problemas

- Error ER_ACCESS_DENIED_ERROR: credenciales incorrectas o usuario sin permisos.
- ER_BAD_DB_ERROR/tabla no existe: importa `database/setup.sql` y confirma `DB_NAME` correcto.
- ECONNREFUSED a MySQL: confirma host/puerto y que MySQL esté accesible (usa `127.0.0.1` si socket de `localhost` falla).
- 500 al iniciar: revisa logs. Si falla al conectar MySQL, la API aún arranca y funcionará solo con CEDAH (modo híbrido con DB desconectada), pero lo ideal es arreglar la DB.
- Problemas al instalar deps: revisa el log de npm; al no usar Puppeteer, la instalación es más simple.

## ¿Tiene todo lo necesario?

Sí. Este repo ya trae:
- Servidor Express (`api-server-hibrido.js`) que respeta `process.env.PORT` (compatible con cPanel/Passenger).
- Capa de acceso a MySQL con soporte por variables de entorno.
- SQL de inicialización (`database/setup.sql`).
- Cliente CEDAH basado en Axios (sin navegador).

Con la configuración de variables y la importación del SQL, deberías poder ejecutarlo en cPanel sin cambios de código.
