52 lines
2.6 KiB
Markdown
52 lines
2.6 KiB
Markdown
# infra/provision — provisioning de instancias white-label
|
|
|
|
Levanta una clínica/spa nueva de SKEEN en la VPS con un comando, sin tocar las
|
|
instancias existentes (`skeen_odoo` y `clinica2_odoo`). Un solo código
|
|
(`/root/skeen-odoo/addons`), N bases de datos.
|
|
|
|
## Archivos
|
|
|
|
| Archivo | Para qué |
|
|
|---|---|
|
|
| `provision_clinica.py` | Script principal. Crea DB+rol, secretos, conf, unit, inicializa módulos, post-instala, renombra el menú raíz, arma el vhost nginx y despliega el frontend. |
|
|
| `postinstall_clinica.py` | Post-instalación vía ORM de Odoo: marca, empresa, admin del frontend y siembra de glosario/sucursal/settings **solo si existen**. Opcionalmente datos demo. |
|
|
| `demo_limpiar.py` | Borra los datos demo de una instancia (para no entregar basura a un cliente). |
|
|
| `templates/odoo.conf.tmpl` | Plantilla de `odoo.conf` con secretos/puerto/DB propios. |
|
|
| `templates/service.tmpl` | Plantilla del unit systemd `odoo-<slug>.service`. |
|
|
| `templates/nginx-vhost.tmpl` | Plantilla del vhost nginx (dominio + puerto LAN + bloqueo WACRM). |
|
|
|
|
## Uso rápido
|
|
|
|
```bash
|
|
cd /root/skeen-proyecto/infra/provision
|
|
|
|
# 1) Simular (no ejecuta nada) — SIEMPRE hacerlo primero
|
|
./provision_clinica.py --slug spa-bella --nombre "Spa Bella" \
|
|
--dominio spa.consultoria-as.com --puerto 8071 --db spa_bella_odoo \
|
|
--pack spa --demo --dry-run
|
|
|
|
# 2) Ejecutar de verdad (coordinado, en horario de bajo uso)
|
|
./provision_clinica.py --slug spa-bella --nombre "Spa Bella" \
|
|
--dominio spa.consultoria-as.com --puerto 8071 --db spa_bella_odoo \
|
|
--pack spa --demo
|
|
```
|
|
|
|
Guía completa: `../../docs/nueva-instancia.md`.
|
|
|
|
## Decisiones de diseño relevantes
|
|
|
|
- **Rol PostgreSQL propio por instancia.** El rol `skeen` es compartido y su
|
|
password (`skeen_dev_2026`) no se puede cambiar sin romper las dos instancias
|
|
existentes. Para cumplir "secretos propios" el script crea un rol nuevo
|
|
(`<slug>`) con password aleatoria y una DB cuyo owner es ese rol.
|
|
`--db-role skeen` reproduce el procedimiento manual anterior (rol compartido).
|
|
- **Dry-run por defecto recomendado.** `--dry-run` valida colisiones reales
|
|
(puerto, DB, unit, vhost, dirs) pero no escribe ni ejecuta nada.
|
|
- **Post-instalación tolerante.** Los modelos `skeen.sucursal`,
|
|
`skeen.service.category`, `skeen.clinic.settings` y el glosario están en
|
|
desarrollo por otro cambio; el post-install los detecta en runtime y deja
|
|
`TODO` en la salida para lo que aún no exista. Nunca aborta por eso.
|
|
- **Frontend compartido.** El bundle se compila una vez desde
|
|
`/root/skeen-frontend` y se copia con `rsync` a cada `/var/www/<slug>-frontend`;
|
|
la marca sale del API `/brand`, no del build.
|