fase 1 productizacion: capa de configuracion (glosario multi-giro, sucursales y categorias configurables, ajustes de clinica por instancia, colores de marca, horarios, URLs de pago dinamicas) + script de provisioning de instancia nueva con datos demo + frontend consumiendo la config
This commit is contained in:
51
infra/provision/README.md
Normal file
51
infra/provision/README.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user