Configuración Básica
A continuación te explicaré como configurar y ejecutar el proyecto, para que puedas tenerlo funcionando en tu entorno local de desarrollo.
Requisitos Previos
Antes de comenzar, revisa si tienes instalado lo siguiente:
- Node.js
- pnpm (se puede usar npm, pero el proyecto esta pensado para funcionar con pnpm, veras que ofrece mejores funcionalidades para manejar dependencias)
- Docker (opcional, pero recomendado para correr servicios como Kafka y Redis)
Clonar el Repositorio
Clona el repositorio del proyecto desde GitHub:
git clone git@github.com:Maur025/tracking-gps.git
Navega al directorio del proyecto:
cd tracking-gps
Instalar Dependencias
Instala las dependencias del proyecto usando pnpm:
pnpm install
Configurar Variables de Entorno
Veras que en la raíz del proyecto existe un archivo llamado .env.example, este archivo contiene las variable de entorno necesarias para que el proyecto funcione, duplica y renombra este archivo a .env para correr el servidor normalmente y a env.test para correr las pruebas de integración.
STATIC_PATH=public # ruta de archivos estáticos
HOST=localhost # dirección del host
PORT=3000 # puerto del servidor
BACKEND_URL=http://localhost:3001 # URL del servidor tracking-db
TRACK_URL=http://localhost:3002 # URL del servidor de tracking-capture
LOG_LEVEL=warn # nivel de logs (error, warn, info, debug, silly)
LOG_PATH=logs # ruta del archivo de logs
REDIS_HOST=localhost
REDIS_PORT=6379
KAFKA_BROKER=localhost:9092
KAFKA_CLIENT_ID=tracking-gps
KAFKA_LOG_LEVEL=INFO
CLICKHOUSE_HOST=http://localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_DB=your-db
CLICKHOUSE_USER=your-user
CLICKHOUSE_PASSWORD=your-password-here
NOTIFICATION_URL=http://localhost:7768 # URL del servidor de notificaciones
GPS_RADIUS=2.5 # radio en metros para ajustar la precision
MAX_METERS_PER_SECOND=100 # Limite de metros por cada segundo
OSRM_URL=http://localhost:5000 # URL del servidor OSRM
Te encontraras algo parecido a esto, te explico rápidamente para que sirven, las variables al inicio son para configurar el servidor, las siguientes son para conectar con db, capture, logging configuración, el 3er bloque es para configurar redis, el 4to es para configurar kafka, el 5to es para configurar clickhouse y el ultimo bloque es para configurar el servidor de notificaciones, servidor de OSRM y parámetros de tracking.
Iniciar servicios
Te indicaré como levantar los servicios para que el servidor funcione correctamente, si ya los tienes puedes saltarte este paso.
Servicios de terceros
Lamentablemente existe un factor que sale de mis manos al momento de levantar el proyecto, son los servidores de kafka y DB externos y parte de los micro-servicios, no están bajo mi control, y probablemente tampoco estarán bajo el tuyo, para que puedas correr el proyecto debes preguntar en que host y puerto están corriendo estos servicios, para que puedas consumir los datos correctamente.
Kafka
Te dejare un archivo docker-compose.yml en la carpeta containers/kafka para que lo puedas usar, pero en general el servicio de kafka lo tendrás corriendo en otra maquina o servidor, pregunta al equipo cual es el host, puerto y tópico correcto para que puedas recibir los datos desde capture, puedes levantar tu propia instancia de kafka, pero no recibirás datos, tendrías que publicarlos desde otra fuente, el archivo te servirá para configurar el entorno de pruebas de integración.
Puedes usar el archivo como lo encuentres o puedes modificar lo básico, como los puertos y lo que se te ocurra, luego ejecuta el comando:
cd containers/kafka
docker-compose up -d
Si todo va bien tendrás disponible kafka en localhost:9092, o el puerto que definiste.
Redis
Para correr redis usa el contenedor que te deje en containers/redis, con este notarás que también existe containers/redis-test, lo deje listo para las pruebas de integración, esto es mas sencillo, solo navega a la carpeta y ejecuta el comando:
cd containers/redis
docker-compose up -d
Redis si lo puedes levantar por tu cuenta, pero necesitarás datos para llenarlo.
Clickhouse
En la versión actual del proyecto, debes tener clickhouse corriendo, ya que forma parte del proceso de control de reglas, hacer que funcione será fácil, te deje 2 contenedores en containers/clickhouse y containers/clickhouse-test, debes hacer lo mismo que con los otros contenedores, navega a la carpeta y ejecuta:
cd containers/clickhouse
docker-compose up -d
Con estos simples pasos tendrás clickhouse corriendo en localhost:8123, o el puerto que definas.
Iniciar el Servidor
Inicia el servidor de desarrollo:
pnpm run dev
El servidor debería estar corriendo en http://localhost:7767 por defecto, si configuraste otro puerto, asegúrate de acceder a la URL correcta.
Otros comandos útiles
Para correr las pruebas unitarias:
pnpm test
Para correr las pruebas de integración:
pnpm test:integration
Para revisar el código con el linter:
pnpm lint
Para construir el proyecto para producción:
pnpm build
Para iniciar el servidor desde la versión construida:
pnpm start
Errores Comunes
-
Revisa las variables de entorno para que el proyecto pueda conectarse a los servicios externos.
-
Si vees lo siguiente en algún servicio:
Error: connect ECONNREFUSEDLo mas probable es que el servicio no este corriendo o no se pueda conectar, revisa que el host y puerto sean correctos.
-
Si usaste npm en lugar de pnpm, si todo va bien perfecto, pero si llegas a tener problemas con las versiones de las dependencias, intenta usar pnpm.
-
Si ejecutaste el test de integración y falla, revisa que tengas el archivo
.env.testcon los valores correctamente configurados. -
Si vees lo siguiente:
[2025-11-07 16:10:33] [ERROR]: [KAFKA] Connection error: connect ECONNREFUSEDEsto es el tipo de error que lanza el logger personalizado, revisa las causas... intenté que sea fácil rastrear el error, notarás que entre corchetes indica el módulo o componente al que pertenece el error, en algunos logs notarás que entre paréntesis te indica la función o método donde ocurrió el error, esto te ayudará a rastrear el problema más fácilmente.