2.6 KiB
2.6 KiB
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
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
skeenes 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 skeenreproduce el procedimiento manual anterior (rol compartido). - Dry-run por defecto recomendado.
--dry-runvalida 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.settingsy el glosario están en desarrollo por otro cambio; el post-install los detecta en runtime y dejaTODOen la salida para lo que aún no exista. Nunca aborta por eso. - Frontend compartido. El bundle se compila una vez desde
/root/skeen-frontendy se copia conrsynca cada/var/www/<slug>-frontend; la marca sale del API/brand, no del build.