Files
Autoparts-DB/manager
consultoria-as 2af2389294 feat(manager): add remote VM support via NEXUS_SERVER_HOST
- config.py: add NEXUS_SERVER_HOST env var for cross-VM deployment
- health_service.py: graceful Redis failure when only localhost-bound
- systemd service: document remote VM configuration
- README: add dedicated 'VM separada' installation section
- .env.example: new file with remote connection examples
2026-05-17 21:37:00 +00:00
..

Nexus Instance Manager

Panel de control central para gestionar instancias multi-tenant de Nexus POS.

Qué hace

  • Crear demos en 1 clic con subdominio, PIN de acceso y fecha de expiración
  • Monitorear salud de todos los servicios (POS, DB, Redis, Quart, Systemd)
  • Gestionar tenants: activar/desactivar, resetear datos, eliminar
  • Ejecutar migraciones de schema en todos los tenants desde una UI
  • Dashboard con estadísticas globales y alertas de demos por expirar

Estructura

manager/
├── app.py                  # Flask app principal
├── config.py               # Variables de entorno
├── wsgi.py                 # Entry point para Gunicorn
├── requirements.txt        # Dependencias
├── services/               # Lógica de negocio
│   ├── health_service.py   # Health checks de infraestructura
│   ├── tenant_service.py   # CRUD tenants (usa tenant_manager del POS)
│   └── migration_service.py# Orquestación de migraciones
├── blueprints/             # API REST
│   ├── auth_bp.py          # Login/logout JWT
│   ├── tenants_bp.py       # Gestión de tenants
│   ├── demos_bp.py         # Creación de demos
│   ├── health_bp.py        # Health checks
│   └── admin_bp.py         # Dashboard stats y migraciones
├── static/                 # Frontend SPA
│   ├── css/manager.css
│   └── js/manager.js
├── templates/
│   └── index.html          # Single Page App
├── scripts/
│   └── init_manager.py     # Inicialización de DB + admin
├── systemd/
│   └── nexus-manager.service # Servicio systemd
└── README.md                 # Documentación completa

Instalación rápida (mismo servidor)

1. Dependencias

cd /home/Autopartes/manager
pip install -r requirements.txt

2. Inicializar base de datos y usuario admin

cd /home/Autopartes/manager
python scripts/init_manager.py --email admin@nexus.local --password nexus2026 --name "Super Admin"

Esto crea:

  • Tabla manager_users (login del panel)
  • Tabla manager_audit_log (registro de acciones)
  • Usuario admin por defecto

3. Configurar variables de entorno

Asegúrate de que estas variables estén disponibles (en systemd o .env):

MASTER_DB_URL=postgresql://postgres@localhost/nexus_autoparts
TENANT_DB_URL_TEMPLATE=postgresql://postgres@localhost/{db_name}
MANAGER_JWT_SECRET=genera-un-segredo-largo-aqui
POS_DIR=/home/Autopartes/pos
REDIS_URL=redis://localhost:6379/0

4. Registrar servicio systemd

cp systemd/nexus-manager.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable nexus-manager
systemctl start nexus-manager

Accede en: http://TU_IP:5003

5. (Opcional) Agregar a nginx

server {
    listen 80;
    server_name manager.nexusautoparts.com.mx;

    location / {
        proxy_pass http://127.0.0.1:5003;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300s;
    }
}

Instalación en Máquina Virtual separada (misma red local)

Si el manager corre en una VM diferente al servidor principal (donde está PostgreSQL + POS):

Requisitos de red

  • PostgreSQL del servidor principal debe escuchar en 0.0.0.0:5432 (verificar listen_addresses = '*' en postgresql.conf)
  • POS (5001), Dashboard (5000) y Quart (5002) ya escuchan en 0.0.0.0 por defecto
  • Redis puede estar solo en 127.0.0.1; en ese caso el health check mostrará advertencia pero no afecta el funcionamiento

1. Clonar el repo en la VM

git clone https://git.consultoria-as.com/consultoria-as/Autoparts-DB.git /home/Autopartes
cd /home/Autopartes/manager

2. Instalar dependencias

pip install -r requirements.txt

3. Configurar variables para conexión remota

Crea /home/Autopartes/manager/.env o edita el servicio systemd:

# IP del servidor principal donde corre PostgreSQL y POS
NEXUS_SERVER_HOST=192.168.10.91

# PostgreSQL remoto (cambiar localhost por la IP del servidor)
MASTER_DB_URL=postgresql://nexus:PASSWORD@192.168.10.91/nexus_autoparts
TENANT_DB_URL_TEMPLATE=postgresql://nexus:PASSWORD@192.168.10.91/{db_name}

# Redis remoto (puede no funcionar si Redis solo escucha en localhost)
REDIS_URL=redis://192.168.10.91:6379/0

# Seguridad
MANAGER_JWT_SECRET=genera-un-segredo-largo-aqui
POS_DIR=/home/Autopartes/pos

Nota importante: La VM manager no necesita una instalación completa del POS. Solo necesita:

  • Los archivos de manager/
  • Los archivos de pos/ (para reutilizar tenant_manager.py y migraciones)
  • Conectividad TCP al puerto 5432 del servidor principal

4. Inicializar DB y admin

cd /home/Autopartes/manager
python scripts/init_manager.py --email admin@nexus.local --password TU_PASSWORD

5. Systemd

cp systemd/nexus-manager.service /etc/systemd/system/
# Edita el archivo y cambia localhost por la IP del servidor en MASTER_DB_URL y NEXUS_SERVER_HOST
nano /etc/systemd/system/nexus-manager.service

systemctl daemon-reload
systemctl enable nexus-manager
systemctl start nexus-manager

Uso

Crear una demo

  1. Ve a la sección Crear Demos
  2. Llena nombre del negocio, email, días de vigencia
  3. El subdominio se genera automáticamente (puedes personalizarlo)
  4. Click en Crear Demo
  5. El panel muestra la URL de acceso y el PIN del owner

Resetear una demo

  • Presiona el ícono de 🔄 en la tabla de demos
  • Limpia TODO el inventario, ventas, clientes, facturas
  • Conserva empleados (incluyendo el owner) y configuración fiscal

Eliminar una demo

  • Presiona 🗑️ y confirma
  • Borra permanentemente la base de datos del tenant

Migraciones

  • Ve a Migraciones para ver la versión de schema de cada tenant
  • Ejecutar todas pendientes aplica migraciones en TODOS los tenants

Notas de seguridad

  • Cambia MANAGER_JWT_SECRET en producción
  • El panel expone acciones destructivas (delete/reset); protege el acceso con firewall o VPN
  • Usa HTTPS en producción
  • Si despliegas en VM separada, asegúrate de que el firewall del servidor principal permite conexiones desde la IP de la VM manager al puerto 5432 (PostgreSQL)