Runbook — PC Manager¶
Deploy¶
Dónde corre: host node1.local (checkout en /home/hquintero/pc-manager),
con Docker Compose: contenedor pc-manager (Django, puerto host 9000 →
contenedor 8000) y db_mariadb (MySQL 8, puerto host 3307). Host público:
pcm.compulandia.com.py (el proxy/exposición frente al contenedor no está
documentado en este repo — pendiente de confirmar).
No hay CI/CD activo: el .gitlab-ci.yml de la raíz es una plantilla sin
completar (rutas y servicio placeholder) y el repo vive en GitHub, así que
nunca se ejecuta. El deploy es manual:
cd /home/hquintero/pc-manager
git pull origin main
docker compose up -d --build backend # el arranque corre migrate + collectstatic
Cómo verificar que el deploy salió bien:
docker compose ps # backend y db "Up"
docker logs --tail 50 pc-manager # sin trazas de error; runserver escuchando en 0.0.0.0:8000
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:9000/pc-manager/login/ # → 200
Sincronización periódica¶
- El
Dockerfileinstala un cron (19:50 diario) que ejecuta/app/sync_components.sh, pero ese script hacecd /opt/pc-manager/...y activa un.venvque no existen dentro del contenedor: tal como está, ese cron no puede funcionar. Pendiente de confirmar cómo se dispara hoy la sincronización diaria; la ejecución manual documentada es:
docker exec pc-manager python3 manage.py sync_components # componentes + reevaluación de combos
docker exec pc-manager python3 manage.py sync_categories # categorías
- Ambas también existen como acciones masivas en el admin de categorías (incluida la importación completa de productos por categoría).
Logs¶
| Qué | Dónde | Cómo verlos |
|---|---|---|
Sincronización y negocio (logger product_sync) |
logs/product_sync.log en el checkout (volumen montado; rotación diaria a medianoche, 14 días) |
tail -f logs/product_sync.log |
| Salida del proceso Django (runserver, prints, requests) | stdout del contenedor | docker logs -f pc-manager |
| MySQL | stdout del contenedor | docker logs -f db_mariadb |
Rollback¶
No hay tags ni releases: el rollback es volver a un commit anterior.
cd /home/hquintero/pc-manager
git log --oneline -10 # elegir el commit estable
git checkout <commit>
docker compose up -d --build backend
Atención: el contenedor ejecuta migrate al arrancar. Si la versión a
revertir es anterior a una migración ya aplicada, la migración NO se revierte
sola; hay que bajarla explícitamente antes
(docker exec pc-manager python3 manage.py migrate PcManager <NNNN>) y
verificar que sea reversible. La base se conserva en el volumen db_data.
Fallas frecuentes¶
1. Un combo aparece "No disponible" / stock 0 en la tienda¶
- Síntoma en el log:
No hay componentes asignados en la categoría <id> para el producto <nombre>oEl componente <nombre> marcado como 'siempre incluir' no está asignadoono alcanza stock para un combo completo (stock calculado: 0). Es la falla más frecuente del log con diferencia. - Diagnóstico: abrir el combo en el admin (
/pc-manager/) y revisar el inline de componentes: alguna categoría quedó sin componente asignable (sin stock, componente inactivo en el Integrador, o unalways_includesin stock).grep "<nombre del combo>" logs/product_sync.logmuestra la categoría exacta. - Resolución: asignar/agregar un componente alternativo con stock en esa
categoría (o darle prioridad a uno de otro supplier), o desmarcar el
always_includesin stock. Guardar reevaluá y empuja el combo.
2. La receta del combo no se aplicó en el Integrador (warning sku_sap)¶
- Síntoma en el log:
Integrador — producto PCM-NNNNN: Componente 'CPI-NNNN': no tiene sku_sap (sin inventario en SAP)(también:no existe como ProductItem,el ProductItem está inactivo). En un combo ya confirmado, el Integrador conserva la receta anterior. - Diagnóstico:
grep "Integrador —" logs/product_sync.loglista los componentes rechazados por combo. - Resolución: corregir el componente del lado del Integrador/SAP (o sustituirlo en el combo por uno válido) y volver a guardar el combo para reenviar la receta completa.
3. Un cambio local no llegó a la tienda (push perdido)¶
- Síntoma: el combo se ve bien en PC Manager pero la tienda muestra
precio/stock viejo. En
docker logs pc-managerapareceFallida intento de conexion con el integradoro❌ HTTPError ... /api/supplier-products/sync(los fallos de conexión salen por stdout, no porproduct_sync.log). - Diagnóstico: los push no tienen reintentos: si el Integrador estaba
caído o las credenciales (
USER_*del.env) vencieron, ese POST se perdió. Verificar conectividad y credenciales. - Resolución: re-guardar el combo en el admin (cualquier guardado con
cambios re-encola el push) o correr
docker exec pc-manager python3 manage.py sync_components, que reevalúa y empuja los combos cuyos componentes cambiaron.