Files
Autoparts-DB/INSTALL.md
consultoria-as 6b097614a0 docs: add complete installation guide (INSTALL.md)
Step-by-step guide covering: system setup, tenant creation, TecDoc catalog
import, inventory CSV import, peer-to-peer config, Gunicorn service,
WhatsApp bridge, troubleshooting, and useful commands.

Compatible with Raspberry Pi OS, Debian, and Ubuntu.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 05:23:09 +00:00

10 KiB

Nexus Autoparts — Guia de Instalacion

Guia paso a paso para instalar una instancia de Nexus Autoparts POS en un servidor nuevo.

Compatible con: Raspberry Pi OS, Debian, Ubuntu. Para Windows usar WSL.


Requisitos minimos

Componente Minimo Recomendado
RAM 2 GB 4 GB
Almacenamiento 16 GB 32 GB
SO Raspberry Pi OS / Debian 12+ / Ubuntu 22+ Debian 13
Python 3.11+ 3.13
PostgreSQL 14+ 16
Node.js 18+ 20

Paso 1 — Clonar el repositorio

sudo apt-get update && sudo apt-get install -y git
cd /home
sudo git clone https://git.consultoria-as.com/consultoria-as/Autoparts-DB.git Autopartes
sudo chown -R $(whoami):$(whoami) /home/Autopartes
cd /home/Autopartes

Si el certificado SSL da problemas:

GIT_SSL_VERIFY=false sudo git clone https://git.consultoria-as.com/consultoria-as/Autoparts-DB.git Autopartes

Paso 2 — Ejecutar el script de instalacion

El script instala automaticamente: PostgreSQL, Python, Node.js, ffmpeg, todas las dependencias de pip, crea la base de datos, el tenant, el empleado owner y configura Gunicorn como servicio del sistema.

sudo bash /home/Autopartes/scripts/setup_instance.sh "NOMBRE_NEGOCIO" "ID_INSTANCIA" "PIN"

Parametros:

Parametro Descripcion Ejemplo
NOMBRE_NEGOCIO Nombre de la refaccionaria "Refacciones El Toro"
ID_INSTANCIA Identificador unico (sin espacios ni acentos) "refac-eltoro"
PIN PIN de 4 digitos para el login del dueno "1234"

Ejemplo completo:

sudo bash /home/Autopartes/scripts/setup_instance.sh "Refacciones El Toro" "refac-eltoro" "1234"

Al terminar, el script muestra:

  • El tenant ID asignado
  • El PIN del owner
  • La IP local del servidor
  • Instrucciones para arrancar

Anota el tenant_id — lo necesitas para los siguientes pasos.


Paso 3 — Importar el catalogo TecDoc

El catalogo de partes (1.5M+ partes OEM, 304K aftermarket, 15.8M cross-references) vive en la base de datos nexus_autoparts. Si esta es tu primera instalacion, necesitas cargar los datos desde un dump.

Opcion A — Dump desde otra instancia

Desde la maquina que YA tiene el catalogo:

# Exportar (en la maquina origen)
pg_dump -U nexus -h localhost nexus_autoparts > /tmp/nexus_catalog.sql

# Copiar al nuevo servidor (via USB, SCP, o red)
scp /tmp/nexus_catalog.sql usuario@IP_NUEVA:/tmp/

En el nuevo servidor:

PGPASSWORD=nexus_autoparts_2026 psql -U nexus -h localhost -d nexus_autoparts < /tmp/nexus_catalog.sql

Opcion B — Sin catalogo (solo inventario local)

Si no necesitas el catalogo TecDoc (solo vas a cargar el inventario de la refaccionaria), salta este paso. El POS funciona sin el catalogo — simplemente el buscador de partes OEM no tendra datos.


Paso 4 — Importar inventario

Prepara un archivo CSV con el inventario de la refaccionaria. Columnas aceptadas (los nombres son flexibles):

numero_de_parte,nombre,marca,precio,existencia
FO-1234,Filtro de Aceite Tsuru,FRAM,185.50,12
BP-5678,Bujia NGK Sentra,NGK,45.00,50
BA-9012,Balata Delantera Jetta,WAGNER,320.00,8

Columnas requeridas: numero_de_parte (o codigo, clave, sku), nombre (o descripcion)

Columnas opcionales: marca, precio (o precio_1), existencia (o stock, cantidad), costo, precio_2, precio_3, categoria, ubicacion, codigo_barras

El importador acepta nombres en espanol, ingles, y formato SICAR.

Primero verificar (dry run):

cd /home/Autopartes/pos
python3 ../scripts/import_inventory.py --tenant=TENANT_ID --csv=ruta/al/inventario.csv --dry-run

Importar de verdad:

python3 ../scripts/import_inventory.py --tenant=TENANT_ID --csv=ruta/al/inventario.csv

Si el CSV tiene codificacion Latin-1 (comun en archivos de SICAR):

python3 ../scripts/import_inventory.py --tenant=TENANT_ID --csv=inventario.csv --encoding=latin-1

Paso 5 — Configurar peers (red de bodegas)

Para que esta instancia pueda ver el inventario de las otras refaccionarias en la red, edita el archivo de peers:

nano /home/Autopartes/pos/peers.json

Ejemplo con 2 peers:

{
  "instance_name": "Refacciones El Toro",
  "instance_id": "refac-eltoro",
  "tenant_id": 12,
  "peers": [
    {
      "name": "Refacciones La Esquina",
      "url": "http://192.168.10.20:5001",
      "enabled": true
    },
    {
      "name": "AutoPartes Central",
      "url": "http://192.168.10.30:5001",
      "enabled": true
    }
  ],
  "peer_timeout_seconds": 3
}

Importante: El tenant_id debe coincidir con el que te dio el script de instalacion en el Paso 2.


Paso 6 — Arrancar el servicio

# Arrancar
sudo systemctl start nexus-pos

# Verificar que esta corriendo
sudo systemctl status nexus-pos

# Ver logs en tiempo real
sudo journalctl -u nexus-pos -f

Para que arranque automaticamente al encender la maquina:

sudo systemctl enable nexus-pos

Arranque manual (sin Gunicorn):

cd /home/Autopartes/pos
python3 app.py

Paso 7 — Verificar

Desde cualquier dispositivo en la misma red (PC, tablet, celular), abre un navegador:

http://IP_DEL_SERVIDOR:5001/pos/login

Login con el PIN que configuraste en el Paso 2.

Verificar la salud del sistema:

curl http://localhost:5001/pos/health
# Debe responder: {"status": "ok"}

curl http://localhost:5001/pos/api/peer/health
# Debe responder con el nombre de la instancia y conteo de inventario

Paso 8 — WhatsApp (opcional)

Para vincular un numero de WhatsApp al chatbot IA:

  1. Arranca el bridge de WhatsApp:
cd /opt/whatsapp-bridge
npm install
nohup node server.js > /tmp/wa-bridge.log 2>&1 &
  1. Abre el POS en el navegador → seccion WhatsApp
  2. Click "Conectar WhatsApp"
  3. Escanea el QR con el telefono que quieres vincular

Configurar el bridge como servicio:

sudo cat > /etc/systemd/system/nexus-whatsapp.service << 'EOF'
[Unit]
Description=Nexus WhatsApp Bridge
After=network.target

[Service]
User=root
WorkingDirectory=/opt/whatsapp-bridge
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable nexus-whatsapp
sudo systemctl start nexus-whatsapp

Comandos utiles

Comando Descripcion
sudo systemctl start nexus-pos Arrancar el POS
sudo systemctl stop nexus-pos Detener el POS
sudo systemctl restart nexus-pos Reiniciar el POS
sudo systemctl status nexus-pos Ver estado
sudo journalctl -u nexus-pos -f Ver logs en vivo
sudo systemctl start nexus-whatsapp Arrancar WhatsApp bridge
curl localhost:5001/pos/health Verificar salud del POS
curl localhost:21465/status Verificar WhatsApp bridge

Estructura de archivos

/home/Autopartes/
├── pos/                    # Aplicacion Flask (POS)
│   ├── app.py              # Punto de entrada
│   ├── config.py            # Configuracion (DB, JWT, SMTP)
│   ├── peers.json           # Configuracion de peers (red)
│   ├── blueprints/          # Endpoints REST
│   ├── services/            # Logica de negocio
│   ├── templates/           # Paginas HTML
│   └── static/              # CSS, JS, imagenes
├── dashboard/              # Servidor web publico (puerto 5000)
│   ├── server.py
│   ├── landing.html
│   └── catalog-public.html
├── scripts/                # Scripts de utilidad
│   ├── setup_instance.sh    # Instalacion automatica
│   ├── import_inventory.py  # Importar inventario CSV
│   └── seed_marketplace.py  # Datos de prueba marketplace
├── sql/                    # Migraciones de base de datos
├── pitch/                  # Pitch deck para inversionistas
└── vehicle_database/       # Schema del catalogo de vehiculos

Solucion de problemas

El POS no arranca

# Ver el error exacto
sudo journalctl -u nexus-pos --no-pager -n 50

# Verificar que PostgreSQL esta corriendo
sudo systemctl status postgresql

# Verificar que el puerto no esta ocupado
sudo fuser 5001/tcp

No puedo acceder desde otro dispositivo

# Verificar el firewall
sudo ufw status
# Si esta activo, abrir el puerto:
sudo ufw allow 5001/tcp

# Verificar que el servicio escucha en todas las interfaces
ss -tlnp | grep 5001
# Debe mostrar 0.0.0.0:5001, NO 127.0.0.1:5001

El inventario no se importo correctamente

# Verificar cuantos items hay
cd /home/Autopartes/pos
python3 -c "
from tenant_db import get_tenant_conn
conn = get_tenant_conn(TENANT_ID)
cur = conn.cursor()
cur.execute('SELECT COUNT(*) FROM inventory WHERE is_active = TRUE')
print(cur.fetchone()[0], 'items en inventario')
conn.close()
"

WhatsApp no genera QR

# Limpiar sesion anterior y reiniciar
sudo rm -rf /opt/whatsapp-bridge/auth/
sudo systemctl restart nexus-whatsapp
# Esperar 10 segundos, luego revisar
curl localhost:21465/status

Los peers no se ven entre si

# Desde esta maquina, verificar que el peer responde
curl http://IP_DEL_PEER:5001/pos/api/peer/health

# Si no responde, verificar:
# 1. Que el POS del peer esta corriendo
# 2. Que estan en la misma red
# 3. Que el firewall permite puerto 5001
ping IP_DEL_PEER

Actualizaciones

Para actualizar el sistema a la ultima version:

cd /home/Autopartes
git pull origin main
sudo systemctl restart nexus-pos

Si hay migraciones de base de datos nuevas:

# Aplicar migraciones al master
PGPASSWORD=nexus_autoparts_2026 psql -U nexus -h localhost -d nexus_autoparts -f sql/marketplace_schema.sql

# Aplicar migraciones al tenant
PGPASSWORD=nexus_autoparts_2026 psql -U nexus -h localhost -d tenant_NOMBRE -f sql/marketplace_tenant_users.sql

Soporte