Guía Docker — ArcorTruck BackOffice (demo)
Esta guía describe cómo levantar el entorno con tres contenedores (frontend, API .NET 8 y SQL Server 2022), qué URLs usar y cómo comprobar que el sistema funciona con datos de prueba precargados.
1. Requisitos
- Docker Desktop o Docker Engine + Docker Compose v2.
- Al menos 4 GB de RAM libres para SQL Server (recomendado 6 GB+ en el host).
- En Apple Silicon (ARM), la imagen oficial de SQL Server puede requerir emulación
linux/amd64; si el contenedordbno arranca, agregá endocker-compose.ymlbajo el serviciodb:
yaml
platform: linux/amd64
2. Cómo iniciar el stack
En la raíz del repositorio (donde está docker-compose.yml):
Stack completo (SQL en contenedor — demo):
docker compose -f docker-compose.yml -f docker-compose.dev.yml --profile dev up -d --build
Solo app (SQL en el host Windows — similar a IIS):
docker compose -f docker-compose.yml -f docker-compose.app.yml --profile app up -d --build
Ver instalacion_iis_windows.md para producción en IIS.
Script de reset / restore (scripts/docker-dev-reset.ps1)
| Comando | Efecto |
|---|---|
-BakPath "…\ArcorGev5Reparto.bak" |
Reset completo: down → up --build → restore → restart api |
-BakPath "…" -SkipDown |
No hace down; sube el stack si falta; solo restaura si I_CLIENTES está vacío |
-BakPath "…" -RestoreOnly |
Igual que -SkipDown + sin rebuild de imágenes |
-BakPath "…" -ForceRestore |
Restaura el .bak aunque ya haya datos (REPLACE) |
-DestroyOnly |
Solo docker compose down |
- La primera vez descarga imágenes base (SQL Server, .NET, Node, nginx) y puede tardar varios minutos.
- SQL Server expone un healthcheck; el servicio
apiespera a quedbesté healthy antes de arrancar.
3. Puertos y servicios
| Servicio | Contenedor | Puerto en tu máquina | Descripción |
|---|---|---|---|
| web | web |
3000 | Frontend estático (nginx) + proxy de /api hacia la API. |
| api | api |
5000 | ASP.NET Core 8 (Kestrel en el puerto 8080 interno). |
| db | db |
14333 → 1433 | SQL Server; usuario sa (solo entorno de demo). |
Credenciales de demo (no usar en producción):
- Usuario SQL:
sa - Contraseña:
Gotruck_Dev_2024! - Base creada por la API:
GotruckDemo
4. Cómo ingresar y ver el sistema funcionando
4.1 Abrir la aplicación web
- Abrí el navegador en: http://localhost:3000
- Deberías ver el panel “ArcorTruck · BackOffice (demo)” con:
- Indicador “API · SQL Server OK” (verde) si la API alcanzó la base.
- Tarjetas de resumen (hojas de reparto, visitas, entregas, montos).
- Tablas de repartidores, clientes y hojas de reparto con datos de prueba.
Si ves un mensaje de error de conexión, esperá unos segundos y recargá: la API aplica migraciones EF al iniciar y puede tardar un poco la primera vez.
4.2 Probar la API directamente
- Salud y conexión a BD: http://localhost:5000/api/health
- Swagger (documentación interactiva): http://localhost:5000/swagger
- Otros endpoints JSON:
GET http://localhost:5000/api/driversGET http://localhost:5000/api/customersGET http://localhost:5000/api/delivery-sheetsGET http://localhost:5000/api/dashboard/summary
El frontend llama a la misma API vía proxy en el mismo origen: http://localhost:3000/api/... (nginx reenvía al contenedor api).
4.3 Conectar un cliente SQL (opcional)
Desde tu host (con sqlcmd, Azure Data Studio, DBeaver, etc.):
- Servidor:
localhost,14333 - Usuario:
sa - Contraseña:
Gotruck_Dev_2024!
Bases disponibles en el mismo servidor:
| Base | Uso |
|---|---|
GotruckDemo |
Prototipo EF del repo (semilla demo: Repartidores, Clientes, HojasReparto, Usuarios) |
ArcorGev5Reparto |
Base operativa del cliente (restaurada desde .bak de producción) |
4.4 Base operativa ArcorGev5Reparto — regla de lectura
La base del cliente define dos conjuntos de tablas operativas además de los maestros I_*:
| Prefijo | Significado | Backoffice |
|---|---|---|
D_ |
Descarga desde equipos móviles; puede estar incompleta | No usar en reportes ni UI |
E_ |
Datos validados y completos | Sí — fuente para reportes, tableros y mapas |
I_ |
Maestros importados (ERP) | Sí — filtros y dimensiones |
Documentación completa: base_datos_arcor_gev5.html en esta carpeta; versión HTML en ../html/base_datos_arcor_gev5.html.
5. Datos de prueba incluidos (GotruckDemo)
Los datos se insertan con la migración EF InitialCreate (semilla en AppDbContext):
- 3 repartidores (
REP-001,REP-002,REP-003; uno inactivo). - 4 clientes con razón social y localidad argentina de ejemplo.
- 3 hojas de reparto con métricas (visitas planificadas/realizadas, entregas OK/rechazadas, montos cobrado/pendiente).
El endpoint GET /api/dashboard/summary agrega todas las hojas para mostrar totales en el panel.
6. Desarrollo local sin Docker (opcional)
- Levantá solo SQL Server:
docker compose up -d dby esperá estado healthy. - API: en
src/GoTruckBackoffice.Api,appsettings.jsonya apunta alocalhost,14333con la misma contraseña. dotnet runen la carpeta de la API (puerto segúnlaunchSettings.json, típicamente 5xxx).- Frontend: en
src/Web,npm installynpm run dev(Vite en 5173 con proxy a 5000 envite.config.ts). Ajustá el proxy si tu API usa otro puerto.
7. Detener y limpiar
docker compose down
Para borrar también los datos persistentes del volumen de SQL Server (si en el futuro agregás un volumen nombrado), usá docker volume ls / docker volume rm según corresponda. En la configuración actual, los datos viven en la capa del contenedor db; al eliminar el contenedor sin volumen externo, se pierden al hacer docker compose down seguido de prune de contenedores.
8. Estructura relevante
| Ruta | Rol |
|---|---|
docker-compose.yml |
Orquestación db, api, web. |
src/GoTruckBackoffice.Api/ |
API .NET 8, EF Core, migraciones y Dockerfile. |
src/Web/ |
Frontend Vite + TypeScript, nginx en producción. |
docs/html/base_datos_arcor_gev5.html |
Convención D_ / E_ / I_ y reglas para la API. |
9. Solución de problemas
dbunhealthy: revisá RAM del host y logs condocker compose logs db.- Puerto ocupado: cambiá el mapeo en
docker-compose.yml(por ejemplo5001:8080para la API) y actualizá el proxy ensrc/Web/vite.config.tssi desarrollás sin nginx. - Error de migración en la API: consultá
docker compose logs api; suele deberse a que SQL aún no terminó de inicializar (reintentá condocker compose restart api).
Entorno pensado únicamente para demostración y desarrollo; no exponer la contraseña sa ni estos puertos en redes públicas.