# Guia de Instalacion -- Nexus Autoparts Instrucciones para instalar y poner en marcha el sistema Nexus Autoparts POS. --- ## Requisitos del sistema | Componente | Minimo | Recomendado | |------------|--------|-------------| | OS | Linux (Debian 12 / Ubuntu 22.04 / Raspberry Pi OS) | Debian 13 o Ubuntu 24.04 | | Python | 3.11+ | 3.12+ | | PostgreSQL | 15+ | 16+ | | RAM | 2 GB | 4 GB | | Disco | 20 GB (SSD recomendado) | 50 GB SSD | | Red | LAN | LAN + acceso a internet para TecDoc y timbrado CFDI | --- ## Instalacion paso a paso ### 1. Instalar dependencias del sistema ```bash sudo apt update && sudo apt install -y \ python3 python3-pip python3-venv \ postgresql postgresql-client \ git ``` ### 2. Configurar PostgreSQL ```bash # Crear usuario y base de datos maestra (catalogo TecDoc) sudo -u postgres createuser nexus -P # Cuando pida password: nexus_autoparts_2026 sudo -u postgres createdb nexus_autoparts -O nexus sudo -u postgres psql -c "ALTER ROLE nexus CREATEDB;" ``` El permiso `CREATEDB` es necesario porque el sistema crea una base de datos separada por cada tenant (cliente). ### 3. Clonar el repositorio ```bash git clone https://git.consultoria-as.com/consultoria-as/Autoparts-DB.git /home/Autopartes ``` ### 4. Instalar dependencias Python ```bash pip install -r /home/Autopartes/pos/requirements.txt --break-system-packages ``` O con un entorno virtual: ```bash python3 -m venv /home/Autopartes/venv source /home/Autopartes/venv/bin/activate pip install -r /home/Autopartes/pos/requirements.txt ``` ### 5. Cargar schema de la base maestra (catalogo) ```bash sudo -u postgres psql nexus_autoparts < /home/Autopartes/vehicle_database/sql/schema.sql ``` ### 6. Crear el primer tenant ```bash cd /home/Autopartes/pos python3 -c " from services.tenant_manager import provision_tenant result = provision_tenant( 'Mi Refaccionaria', rfc='RFC000000AAA', owner_name='Admin', owner_pin='1234' ) print(result) " ``` Esto crea: - Una entrada en la tabla maestra de tenants - Una base de datos `tenant_mi_refaccionaria` con todas las tablas del POS - Un empleado "Admin" con rol "owner" y PIN 1234 ### 7. Aplicar migraciones ```bash cd /home/Autopartes/pos python3 -c " from tenant_db import get_tenant_conn_by_dbname conn = get_tenant_conn_by_dbname('tenant_mi_refaccionaria') cur = conn.cursor() with open('migrations/v1.1_pos_tables.sql') as f: cur.execute(f.read()) conn.commit() print('Migraciones aplicadas correctamente') " ``` ### 8. Iniciar el POS **Desarrollo:** ```bash cd /home/Autopartes/pos python3 app.py ``` **Produccion (Gunicorn):** ```bash pip install gunicorn --break-system-packages sudo mkdir -p /var/log/nexus-pos cd /home/Autopartes/pos ./run.sh ``` Acceder desde el navegador: ``` http://[IP-del-servidor]:5001/pos/login PIN: 1234 ``` ### 9. (Opcional) Iniciar la web publica ```bash cd /home/Autopartes/dashboard python3 server.py ``` Acceder: `http://[IP-del-servidor]:5000` --- ## Importar datos TecDoc Para tener el catalogo de partes OEM y aftermarket: ```bash cd /home/Autopartes # Fase 1: descargar datos de TecDoc API a archivos JSON python3 scripts/import_tecdoc.py download # Fase 2: importar JSON a PostgreSQL python3 scripts/import_tecdoc.py import # Ver progreso python3 scripts/import_tecdoc.py status ``` El script es **resumible**: si se interrumpe, al volver a ejecutar salta los archivos ya descargados. --- ## Instalacion como servicio (systemd) ### POS (puerto 5001) Crear el archivo `/etc/systemd/system/nexus-pos.service`: ```ini [Unit] Description=Nexus Autoparts POS After=postgresql.service Wants=postgresql.service [Service] Type=notify WorkingDirectory=/home/Autopartes/pos ExecStartPre=/bin/mkdir -p /var/log/nexus-pos ExecStart=/usr/local/bin/gunicorn -c gunicorn.conf.py "app:create_app()" Restart=always RestartSec=5 User=root Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target ``` ### Web publica (puerto 5000) Crear el archivo `/etc/systemd/system/nexus-web.service`: ```ini [Unit] Description=Nexus Autoparts Web Publica After=postgresql.service Wants=postgresql.service [Service] Type=simple WorkingDirectory=/home/Autopartes/dashboard ExecStart=/usr/bin/python3 server.py Restart=always RestartSec=5 User=root Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target ``` ### Activar los servicios ```bash sudo systemctl daemon-reload sudo systemctl enable nexus-pos nexus-web sudo systemctl start nexus-pos nexus-web # Verificar estado sudo systemctl status nexus-pos sudo systemctl status nexus-web ``` --- ## Instalacion en Raspberry Pi 5 El POS esta optimizado para correr en Raspberry Pi 5. ### Hardware recomendado | Componente | Especificacion | Precio aprox. | |------------|---------------|---------------| | Raspberry Pi 5 | 8 GB RAM | $80 USD | | SSD NVMe | 256 GB (via HAT M.2) | $30 USD | | Case con ventilador | Oficial o Argon | $15 USD | | Fuente USB-C | 5V 5A oficial | $12 USD | | MicroSD | 32 GB (solo para boot) | $5 USD | | **Total** | | **~$142 USD** | ### Pasos adicionales para RPi 5 1. Instalar Raspberry Pi OS (64-bit, Debian Bookworm) 2. Configurar boot desde SSD NVMe (no usar MicroSD como disco principal) 3. Seguir los mismos pasos de instalacion de arriba 4. Para acceso desde tablets/celulares en la misma red LAN, usar la IP local del RPi ### Rendimiento esperado - Consultas de catalogo: < 200ms - Busqueda de partes: < 500ms - Transacciones POS: < 100ms - Soporte simultaneo: 3-5 terminales sin degradacion --- ## Verificacion post-instalacion ```bash # Verificar que PostgreSQL esta corriendo sudo systemctl status postgresql # Verificar que el POS responde curl http://localhost:5001/pos/health # Debe responder: {"status":"ok"} # Verificar la base maestra sudo -u postgres psql nexus_autoparts -c "SELECT count(*) FROM parts;" # Verificar tenant sudo -u postgres psql tenant_mi_refaccionaria -c "SELECT name, role FROM employees;" ``` --- ## Troubleshooting | Problema | Solucion | |----------|----------| | `psycopg2` no instala | `sudo apt install libpq-dev python3-dev` y reinstalar | | Puerto 5001 ocupado | `sudo lsof -i :5001` para ver que proceso lo usa | | "Tenant not found" | Verificar que `provision_tenant` se ejecuto correctamente | | PIN bloqueado | Esperar 15 minutos o reiniciar el servicio POS | | Base de datos no conecta | Verificar credenciales en `pos/config.py` | --- ## Servicios Systemd (Produccion) Despues de la instalacion, copiar los servicios y habilitarlos: ```bash sudo cp systemd/*.service systemd/*.timer /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now nexus-pos.service nexus.service nexus-celery.service nexus-quart.service sudo systemctl enable --now nexus-mv-refresh.timer nexus-cache-warm.timer ``` ## Monitoreo (Opcional) Levantar Prometheus + Grafana: ```bash cd docker docker compose -f docker-compose.monitoring.yml up -d ``` - Grafana: http://servidor:3001 (admin / nexus2026) - Prometheus: http://servidor:9090 ## PWA (Instalable) El POS ya incluye Service Worker y manifest. Al abrir cualquier pagina del POS en Chrome/Edge, aparecera un banner para instalar la app. Requiere HTTPS en produccion para el prompt automatico. ## Tests E2E (Playwright) ```bash npm install npx playwright test ```