# Despliegue en cPanel (Colombia Hosting) — Medical Sanus Web

Guía orientada a tu entorno: **usuario `medicals`**, dominio **`medicalsanus.com`**, home **`/home/medicals`**, **Apache 2.4**, **MySQL 8.0**, SSL activo.

Arquitectura del proyecto:

- **Frontend:** Angular (build estático).
- **Backend:** FastAPI (Python, proceso largo con `uvicorn`).
- **Base de datos:** MySQL.

---

## 1. Resumen de rutas en el servidor

| Qué | Dónde suele ir en cPanel |
|-----|---------------------------|
| Sitio web principal | `public_html/` → `https://medicalsanus.com` |
| Subdominio (ej. API) | `public_html/api/` o carpeta del subdominio en **Dominios → Subdominios** |
| MySQL | **Bases de datos MySQL** (host suele ser `localhost` desde PHP/Python en el mismo servidor) |

---

## 2. Base de datos MySQL

1. En cPanel: **Bases de datos MySQL** → crear base de datos y usuario; asociar usuario con todos los privilegios.
2. En **phpMyAdmin** (o importando SQL): crear tablas o importar el script que uses en desarrollo (p. ej. migraciones / `create_db.sql` + modelos).
3. Anota: **usuario**, **contraseña**, **nombre de BD**, **host** (casi siempre `localhost`).

En el servidor, en la carpeta del backend, crea **`backend/.env`** (no subir a Git) con al menos:

```env
MYSQL_USER=tu_usuario_cpanel
MYSQL_PASSWORD=tu_password
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_DATABASE=tu_base

SECRET_KEY=una-cadena-larga-aleatoria-unica

CORS_ORIGINS=https://medicalsanus.com,https://www.medicalsanus.com
```

Si pruebas en un subdominio temporal, añádelo a `CORS_ORIGINS` separado por comas.

---

## 3. Frontend Angular (sitio público)

### 3.1 URL de la API en producción

Edita **`frontend/src/environments/environment.production.ts`** y pon la URL real donde responderá la API (debe terminar en `/api` como en local):

- Si usas **proxy** en el mismo dominio: `https://medicalsanus.com/api`
- Si usas **subdominio**: `https://api.medicalsanus.com/api` (ejemplo)

### 3.2 Compilar

En tu PC, en la carpeta `frontend`:

```bash
npm ci
npm run build
```

Con la configuración actual del proyecto, la salida útil está en:

**`frontend/dist/medical-sanus-web/browser/`**

Sube **todo el contenido** de esa carpeta a `public_html/` (o a la carpeta del subdominio si el front va en otro host).

### 3.3 SPA (evitar 404 al recargar rutas)

En la raíz del sitio (donde está `index.html`), crea o edita **`.htaccess`**:

```apache
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>
```

Si el sitio está en un subdirectorio, cambia `RewriteBase` y la última regla (p. ej. `/subcarpeta/index.html`).

---

## 4. Backend FastAPI en hosting compartido

En muchos planes cPanel **no** puedes dejar un proceso Python escuchando como en tu PC; depende del proveedor.

1. Busca en cPanel: **“Python App”**, **“Setup Python App”**, **“Passenger”** o similar.
2. Si existe: crea una app apuntando al directorio del backend, versión de Python compatible (3.10+ recomendable), archivo de entrada tipo `passenger_wsgi.py` o el que indique el panel, y variables de entorno equivalentes a tu `.env`.
3. **Si no hay Python de aplicación:** opciones habituales:
   - **VPS** o plan que permita systemd/supervisor + `uvicorn`.
   - **Servicio aparte** (Railway, Render, Fly.io, etc.) y entonces `apiUrl` en Angular apunta a esa URL HTTPS.

Comando típico de arranque (en el servidor o en el panel):

```bash
uvicorn app.main:app --host 0.0.0.0 --port 8000
```

La URL pública debe coincidir con lo configurado en `environment.production.ts` y en **CORS**.

### Proxy Apache (mismo dominio)

Si tu hosting permite configurar **proxy inverso** hacia el puerto donde corre uvicorn, se puede exponer la API como `https://medicalsanus.com/api`. Eso requiere reglas en Apache (a veces solo vía ticket al soporte). Sin proxy, suele usarse un **subdominio** con la app Python.

---

## 5. CORS y comprobaciones

- El backend lee **`CORS_ORIGINS`** desde `.env` o valores por defecto en `config.py` (lista separada por comas).
- El origen del navegador debe coincidir exactamente (incluido `https` y `www` o no).
- Prueba: abre `https://tudominio/api/health` (o la ruta que expongas) y comprueba JSON `status` / `database`.

---

## 6. Checklist rápido

- [ ] MySQL creada y datos importados.
- [ ] `backend/.env` en el servidor con credenciales y `SECRET_KEY` fuerte.
- [ ] `CORS_ORIGINS` incluye el dominio desde el que sirves el Angular.
- [ ] `environment.production.ts` → `apiUrl` correcto.
- [ ] `npm run build` y subida del contenido de **`dist/medical-sanus-web/browser/`**.
- [ ] `.htaccess` para rutas del SPA.
- [ ] API accesible por HTTPS y correo/SMTP configurado si usas envío de emails (`SMTP_*` en `.env`).

---

## 7. Soporte Colombia Hosting

Si no ves **Python App** o **Passenger**, pregunta al soporte si tu plan **colhost2** permite aplicaciones Python persistentes o si deben configurar un proxy hacia tu API.
