# Despliegue paso a paso — VPS + cPanel

Orden real, en el orden en que conviene hacerlo. Cada paso depende del anterior.

## 1. Dominio o subdominio
En cPanel → **Domains** (o **Subdomains**): crea el dominio/subdominio
donde va a vivir el sistema (ej. `app.tudominio.cl`).

## 2. Base de datos — son 3 pasos, no uno
En cPanel → **MySQL Databases**:

1. **Create New Database** — ej. `usuario_barberia`
2. **MySQL Users → Add New User** — ej. `usuario_barberia_app`, con una
   contraseña larga y única (no reuses la de otro sistema tuyo)
3. **Add User To Database** — elige el usuario y la base que acabas de
   crear, márcale **ALL PRIVILEGES**

Sin el paso 3, tienes una base y un usuario, pero el usuario no puede
tocar esa base — es el paso que más se olvida.

**Anota estos 4 datos**, los vas a necesitar en el paso 5:
`DB_HOST` (normalmente `localhost`), `DB_NAME`, `DB_USER`, `DB_PASSWORD`.

## 3. Importar el schema
En cPanel → **phpMyAdmin** → selecciona la base que creaste → pestaña
**Importar** → sube `schema.sql`. Esto crea las 32 tablas y ya incluye
los datos iniciales (planes, complemento SII) — no hace falta cargar
nada más a mano.

## 4. Setup Node.js App
En cPanel → **Setup Node.js App** → **Create Application**:

- **Node.js version**: la más reciente disponible (18 o superior)
- **Application mode**: Production
- **Application root**: una carpeta FUERA de `public_html` (ej.
  `barberia-app`) — ver `DEPLOYMENT-SEGURIDAD.md` de por qué esto importa
- **Application URL**: el dominio/subdominio del paso 1
- **Application startup file**: `server.js`

Todavía no le des "Create" definitivo si te pide subir código — primero
sigue al paso 5.

## 5. Variables de entorno
En la misma pantalla de Setup Node.js App hay una sección
**Environment Variables** — úsala en vez de un archivo `.env` en el
servidor, es más seguro porque el archivo ni siquiera necesita existir:

```
DB_HOST=localhost
DB_USER=<el que creaste en el paso 2>
DB_PASSWORD=<la contraseña del paso 2>
DB_NAME=<la base del paso 2>
JWT_SECRET=<nuevo, generado ahora — ver abajo>
CRON_SECRET=<otro nuevo, distinto>
APP_URL=https://app.tudominio.cl
NODE_ENV=production
```

Para generar `JWT_SECRET` y `CRON_SECRET` (dos valores distintos), por
SSH:
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```
Corre ese comando dos veces, uno para cada variable — **nunca** los
valores que usamos en las pruebas de esta conversación.

## 6. Subir el código
Sube el contenido de `setec-barberia-saas/` al **Application Root** que
definiste en el paso 4 (vía File Manager, subiendo el zip y
extrayéndolo ahí, o por SFTP/git si tienes acceso). El `.htaccess`
también va en esa carpeta.

**Nunca en `public_html` directo** — ese es justo el error que
protegimos en la conversación anterior.

## 7. Instalar dependencias y arrancar
De vuelta en Setup Node.js App: botón **Run NPM Install**, y después
**Restart** (o Start, si es la primera vez). Ahí debería quedar
corriendo.

## 8. Crear tu propio usuario superadmin
No existe un registro público para esto — a propósito, es tu panel de
control de la plataforma. Se crea directo en la base, por phpMyAdmin o
SSH. Por SSH, dentro del Application Root:

```bash
node -e "
const bcrypt = require('bcrypt');
bcrypt.hash('TU_CONTRASEÑA_REAL_AQUÍ', 10).then(hash => console.log(hash));
"
```

Copia el hash que imprime, y en phpMyAdmin corre (reemplazando el hash
y tus datos):

```sql
INSERT INTO usuarios (tenant_id, nombre, apellido, telefono, email, password_hash, rol)
VALUES (NULL, 'Tu Nombre', 'Tu Apellido', '+56900000000', 'tu@email.cl', 'EL_HASH_QUE_COPIASTE', 'superadmin');
```

## 9. Configurar el cron de recordatorios (solo si vas a usarlos)
En cPanel → **Cron Jobs** → cada 15-30 minutos:

```
curl -X POST https://app.tudominio.cl/api/cron/recordatorios -H "x-cron-secret: EL_CRON_SECRET_DEL_PASO_5"
```

## 10. Verificar desde afuera
Los mismos `curl` de `DEPLOYMENT-SEGURIDAD.md` sección 7, desde tu
computador — confirman que nada quedó expuesto por URL. Y probar el
`/api/health` para confirmar que el sistema responde:

```bash
curl https://app.tudominio.cl/api/health
```

## Aparte: el microservicio de WhatsApp Web (si lo vas a usar)
`whatsapp-web-service/` es **otra app de Node distinta**, con su propio
proceso — no es parte de esta misma app. Necesita más recursos
(Chromium corriendo) y probablemente conviene revisarlo aparte una vez
que el sistema principal ya esté funcionando y probado — no es
necesario para arrancar. Si eliges el modo `manual` o `api` de
recordatorios (en vez de `web`), no necesitas este microservicio en
absoluto para empezar.
