- API-POS.md: added sections 11-15 (BNPL, ERP, WhatsApp Cloud, Supplier Portal, Dashboard Stats) - ARCHITECTURE.md: added infra/monitoring section with systemd, Prometheus/Grafana, PWA, and integration stubs - INSTALACION.md: added systemd setup, monitoring docker compose, PWA install notes, and Playwright test commands - README.md: updated endpoint count, tech stack, infrastructure table
319 lines
7.2 KiB
Markdown
319 lines
7.2 KiB
Markdown
# 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
|
|
```
|