# Manual de instalacion CXP

Este manual es para el equipo de instalacion. No necesita PHP local ni Composer en el servidor. Solo Docker, Apache y acceso MySQL.

## 1. Requisitos del servidor

```bash
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo a2enmod proxy proxy_http headers rewrite
sudo systemctl restart apache2
```

Volver a iniciar sesion y validar:

```bash
docker --version
docker compose version
apachectl -M | egrep 'proxy|headers|rewrite'
```

## 2. Obtener el repositorio y la imagen

```bash
git clone <REPO_CXP> /opt/cxp-source
cd /opt/cxp-source
docker pull docker.io/sistemasmb/cxp-app:v1.0.0
```

## 3. Generar plantillas de base

Se hace una sola vez por version base o cuando se redefina la instalacion.

```bash
cd /opt/cxp-source
bash deploy/scripts/generate-templates.sh <HOST_MYSQL_ORIGEN> <PORT_MYSQL_ORIGEN> <USUARIO_MYSQL_ORIGEN>
```

Archivos generados:

- `sql/cxpEstructura.sql`
- `sql/cxpInstalacion.sql`

## 4. Crear un cliente nuevo

Caso normal: la base y el usuario ya existen.

```bash
cd /opt/cxp-source
export CXP_IMAGE_DEFAULT=docker.io/sistemasmb/cxp-app:v1.0.0
sudo -E bash deploy/scripts/new-client.sh manuales 8081 manuales-cxp.sistemasmb.com
```

Importante:

- usa `sudo -E` para no perder `CXP_IMAGE_DEFAULT`
- por defecto el script asume que la base y el usuario ya existen
- si la base ya existe, el script reutiliza el mismo `DB Pass` para validar e importar la plantilla
- solo si respondes `n` en `La base y el usuario ya existen?` intentara crear base y usuario

El script pedira:

- MySQL Host
- MySQL Port
- DB User
- DB Name
- DB Pass
- confirmacion si la base ya existe
- ERP Host
- ERP Port
- ERP DB Name
- ERP User
- password admin MySQL solo si vas a crear base y usuario
- password ERP

## 5. Verificacion

```bash
curl http://127.0.0.1:8081/health
cd /var/www/html/manuales/mbcxp
docker compose ps
docker compose logs --tail=100
cat .env
```

## 6. SSL

```bash
sudo certbot --apache -d manuales-cxp.sistemasmb.com
```

## 7. Actualizacion de clientes

```bash
docker pull docker.io/sistemasmb/cxp-app:v1.0.1
sudo bash /opt/cxp-source/deploy/scripts/update-all.sh docker.io/sistemasmb/cxp-app:v1.0.1
```

## 8. Rollback rapido

```bash
cd /var/www/html/manuales/mbcxp
sed -i 's|^CXP_IMAGE=.*|CXP_IMAGE=docker.io/sistemasmb/cxp-app:v1.0.0|' .env
docker compose up -d --force-recreate
```

## 9. No hacer

- No volver a escribir una segunda clave distinta para la BD cuando ya existe y ya ingresaste `DB Pass`.
- No usar un usuario sin permisos sobre la base si ya decidiste no crearla desde el script.
- No usar `sudo` sin `-E` si quieres respetar `CXP_IMAGE_DEFAULT`.
- No dejar IPs o puertos hardcodeados del servidor viejo.
- No montar CXP con PHP 5.6 del host.
- No publicar primero bajo `/mbcxp` si todavia no fue validado en ese modo.
- No usar `latest` como unica referencia de produccion.
- No clonar una base de un cliente real para crear otro cliente.
