# Manual de despliegue — StreamCore ERP Web (V5.0.0)

Guía paso a paso para publicar el sistema en un **hosting reseller con cPanel**
(el que administra AG Ingeniería) en el subdominio **erp.remaqagromecanica.cl**.

Tiempo estimado: 30–45 minutos la primera vez.

---

## 0. Qué vas a subir

El ZIP **`streamcore-web-deploy.zip`** contiene TODO lo necesario:

```
passenger_wsgi.py      <- arranque para cPanel (NO tocar)
run_local.py           <- solo para pruebas en tu PC
config.py
requirements.txt
.env.example           <- plantilla; se copia a .env en el servidor
core/                  <- lógica del sistema
app/                   <- rutas, plantillas HTML, CSS, imágenes, logos
README.md
MANUAL-DESPLIEGUE.md   <- este archivo
```

No hay nada más que instalar aparte de lo que dice `requirements.txt`.

---

## 1. Requisitos del hosting (verificar antes)

En **WHM** (o preguntando al proveedor mayorista), confirmar:

- [ ] **cPanel** tiene la sección **"Setup Python App"** (a veces "Aplicaciones Python").
- [ ] Python disponible **3.10 o superior**.
- [ ] Se pueden crear **bases de datos MySQL / MariaDB**.
- [ ] **AutoSSL** activo (para el candado HTTPS).

Ya validado: en este hosting corren aplicaciones Python puras sin problema.

---

## 2. Crear la base de datos MySQL

1. cPanel → **MySQL® Databases**.
2. En *Create New Database*: nombre `erp` → **Create Database**.
   cPanel lo guarda como `CUENTA_erp` (ej: `remaqag_erp`). **Anotarlo.**
3. En *Add New User*: usuario `erp`, contraseña larga (usar el generador).
   Queda como `CUENTA_erp`. **Anotar usuario y contraseña.**
4. En *Add User To Database*: elegir el usuario y la base → **Add** →
   marcar **ALL PRIVILEGES** → **Make Changes**.

Al final tenés 3 datos:
```
Base:      remaqag_erp
Usuario:   remaqag_erp
Password:  ********
```

---

## 3. Crear el subdominio

1. cPanel → **Domains** (o *Subdomains*).
2. Crear **`erp`** sobre `remaqagromecanica.cl`.
3. Como *Document Root* dejá el que propone cPanel, por ejemplo
   `/home/remaqag/erp.remaqagromecanica.cl`. **Anotar esa ruta.**

---

## 4. Subir y descomprimir el código

1. cPanel → **File Manager**.
2. Entrar a la carpeta del subdominio (paso 3), ej.
   `/home/remaqag/erp.remaqagromecanica.cl`.
3. **Upload** → subir `streamcore-web-deploy.zip`.
4. Clic derecho sobre el ZIP → **Extract**. Debe quedar así:
   ```
   erp.remaqagromecanica.cl/
   ├── passenger_wsgi.py
   ├── config.py
   ├── requirements.txt
   ├── .env.example
   ├── core/
   └── app/
   ```
   Si al extraer se creó una subcarpeta `streamcore-web/`, **mové el contenido
   un nivel arriba** para que `passenger_wsgi.py` quede en la raíz del subdominio.
5. Borrar el ZIP del servidor.

---

## 5. Crear la carpeta de datos (fuera de la web)

Los PDF, los logs y el archivo de base de datos **no deben ser públicos**.

1. File Manager → ir a `/home/remaqag/` (la raíz de tu cuenta).
2. **+ Folder** → crear **`streamcore-datos`**.
   Ruta final: `/home/remaqag/streamcore-datos`

---

## 6. Crear el archivo `.env`

1. File Manager → carpeta del subdominio → seleccionar **`.env.example`** →
   **Copy** → renombrar la copia a **`.env`**.
   (Si no ves los archivos que empiezan con punto: *Settings* arriba a la
   derecha → marcar *Show Hidden Files*.)
2. Clic derecho en `.env` → **Edit** y dejarlo así (con TUS datos):

   ```
   SECRET_KEY=una-cadena-larga-y-aleatoria-de-40-o-mas-caracteres
   DATABASE_URL=mysql+pymysql://remaqag_erp:TU_PASSWORD@localhost/remaqag_erp
   COOKIE_SECURE=1
   STREAMCORE_DATA_DIR=/home/remaqag/streamcore-datos
   ```

   - `SECRET_KEY`: cualquier texto largo al azar (podés generarlo en
     https://randomkeygen.com — sección "CodeIgniter Encryption Keys").
   - `DATABASE_URL`: reemplazá `remaqag_erp`, `TU_PASSWORD` y el nombre de la
     base con lo que anotaste en el paso 2. **Ojo: sin espacios.**
   - `STREAMCORE_DATA_DIR`: la carpeta del paso 5.

3. **Save Changes.**

---

## 7. Configurar la aplicación Python en cPanel

1. cPanel → **Setup Python App** → **CREATE APPLICATION**.
2. Completar:

   | Campo | Valor |
   |---|---|
   | **Python version** | 3.10 o superior |
   | **Application root** | `erp.remaqagromecanica.cl` (la carpeta del paso 4) |
   | **Application URL** | `erp.remaqagromecanica.cl` |
   | **Application startup file** | `passenger_wsgi.py` |
   | **Application Entry point** | `application` |

3. **CREATE**. cPanel crea un entorno virtual para la app.

4. En la misma pantalla, más abajo:
   - En **"Configuration files"** agregar: `requirements.txt` → **Add**.
   - Botón **"Run Pip Install"**. Esperar a que termine (instala Flask,
     SQLAlchemy, PyMySQL, ReportLab, Pillow).

5. Botón **"Restart"** de la aplicación.

---

## 8. Activar HTTPS (AutoSSL)

1. cPanel → **SSL/TLS Status**.
2. Buscar `erp.remaqagromecanica.cl` → **Run AutoSSL**.
3. Esperar unos minutos hasta que aparezca el candado (✅ *AutoSSL Domain
   Validated*).

---

## 9. Primer ingreso

1. Abrir **https://erp.remaqagromecanica.cl**
2. Iniciar sesión:
   ```
   Usuario: Admin
   Clave:   Admin
   ```
3. **Ir a "Equipo y Permisos" → editar Admin → poner una contraseña nueva.**
4. Ir a **"Ajustes Generales"** y completar:
   - RUT de la empresa (número + dígito verificador)
   - Revisar razón social, giro, dirección, correos, teléfono
   - Folios iniciales si corresponde

> El sistema crea la base de datos y las tablas solo la primera vez que
> arranca. Los usuarios de fábrica son `Admin/Admin` y `Vendedor/Vendedor`.

### Panel Root (super admin)

Desde la misma pantalla de login:
```
Usuario: ?Streamcore
Clave:   Streamcore1010@
```
Abre el panel para cambiar el límite de licencia, el IVA, restablecer claves,
etc. **Recomendado:** cambiar esa clave root desde el propio panel.

---

## 10. Respaldo automático de la base de datos

1. cPanel → **Cron Jobs**.
2. *Common Settings*: **Once Per Day** (o el horario que prefieras).
3. *Command*:
   ```
   mysqldump -u remaqag_erp -p'TU_PASSWORD' remaqag_erp > /home/remaqag/streamcore-datos/backup_$(date +\%F).sql
   ```
   (reemplazá usuario, password y base).
4. **Add New Cron Job.**

Cada tanto, descargá esos `.sql` a tu PC (o usá el backup completo de cPanel).

---

## 11. Actualizaciones futuras

Cuando haya una versión nueva:

1. File Manager → carpeta del subdominio.
2. Subir el ZIP nuevo y **Extract** encima (sobrescribe `core/` y `app/`).
3. **NO** tocar `.env`.
4. Setup Python App → **"Run Pip Install"** (por si cambiaron dependencias) →
   **Restart**.

Los datos (clientes, cotizaciones, etc.) están en MySQL, no se pierden al
actualizar el código.

---

## Solución de problemas

| Síntoma | Qué revisar |
|---|---|
| **500 / "Internal Server Error"** | En Setup Python App, ver el log de la app. Casi siempre es el `.env`: `DATABASE_URL` mal escrito, o la carpeta `STREAMCORE_DATA_DIR` no existe / sin permisos. |
| **La página carga sin estilos (fea)** | Los archivos estáticos no se sirven. Verificá que la carpeta `app/estaticos/` subió completa (CSS, JS, imágenes). |
| **"Can't connect to MySQL" / "Access denied"** | Usuario/clave/base del `.env` no coinciden con el paso 2, o falta *ALL PRIVILEGES*. |
| **"No module named ..."** | Faltó **Run Pip Install** en Setup Python App, o no se agregó `requirements.txt` a *Configuration files*. |
| **Cambié el `.env` y no toma** | Botón **Restart** en Setup Python App. |
| **Los PDF no abren** | La carpeta `STREAMCORE_DATA_DIR/pdfs` no tiene permiso de escritura, o `STREAMCORE_DATA_DIR` apunta a un lugar que no existe. |
| **El log** | `STREAMCORE_DATA_DIR/logs/streamcore.log` — ahí queda el detalle de cualquier error. |

---

## Datos de contacto de la configuración

Guardá en un lugar seguro:

```
Subdominio:   https://erp.remaqagromecanica.cl
Carpeta app:  /home/________/erp.remaqagromecanica.cl
Carpeta datos:/home/________/streamcore-datos
Base MySQL:   ________  · usuario ________ · pass ********
SECRET_KEY:   (el del .env)
Admin:        Admin / (clave nueva)
Root:         ?Streamcore / (clave nueva)
```
