Servidor de seguimiento de precios bursátiles en tiempo real con WebSocket y Redis en Docker Compose

Servidor de Seguimiento de Precios Bursátiles en Tiempo Real con Node.js, WebSocket y Redis usando Docker Compose

¿Alguna vez has querido monitorizar los precios de tus acciones favoritas en tiempo real desde tu propio servidor? Hoy te traigo un proyecto súper útil y de moda: un seguimiento en tiempo real de precios bursátiles usando Node.js y WebSocket, optimizado con Redis y desplegado con Docker Compose. Apto para usuarios intermedios y avanzados que quieran adentrarse en la creación de servicios multi-contenedor, con visos de eficiencia y velocidad.

¿Por qué desplegar un tracker bursátil propio?

  • Permite recibir precios de acciones en tiempo real (actualización instantánea) gracias a WebSocket.
  • Redis se usa como caché, evitando peticiones excesivas al proveedor externo y acelerando la respuesta para usuarios concurrentes.
  • Desplegable fácilmente en cualquier VPS usando Docker Compose y con potencial para ampliarlo con gráficos, alertas, o integración con bots de trading.
  • Ideal para aprender sobre APIs, conectividad en tiempo real, y la gestión eficiente de recursos con cachés distribuidas.

Servicios y arquitectura del proyecto

  • Node.js: Servidor web que conecta a la API de precios (requiere que configures la tuya, por ejemplo Alpha Vantage) y sirve el cliente por WebSocket.
  • WebSocket: Comunicación bidireccional con el navegador. Cada vez que hay un cambio, llega al usuario sin refrescar la página.
  • Redis: Almacena las últimas cotizaciones. Mejora el rendimiento y reduce uso de la API externa.

La gracia de este setup es que Node.js y Redis van en contenedores separados, comunicándose mediante la red interna de Docker. Así, el sistema es escalable y fácil de mantener.

Fichero docker-compose.yml completo

A continuación tienes el docker-compose.yml necesario para desplegar el servidor. Notarás que la app Node.js se comunica con Redis para almacenar y recuperar datos de precios en tiempo real:


version: '3.8'
services:
  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"
    restart: always

  stock-app:
    build: ./stock-app
    container_name: stock-app
    ports:
      - "3000:3000"
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - API_KEY=# tu clave para la API de cotizaciones
    depends_on:
      - redis
    restart: unless-stopped
    volumes:
      - ./stock-app:/usr/src/app
    # Si tu app requiere instalar dependencias extra, agrega un Dockerfile en ./stock-app

networks:
  default:
    name: stock-network
    driver: bridge
    

Nota: La carpeta ./stock-app debe contener tu app Node.js y el Dockerfile para construir el contenedor. Un ejemplo mínimo del Dockerfile sería:


FROM node:20-alpine
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["node", "index.js"]
    

¿Cómo funciona el sistema?

  1. El usuario entra al frontend en localhost:3000.
  2. Node.js se conecta por WebSocket y realiza consultas periódicas (o bajo demanda) a la API bursátil.
  3. Redis almacena los precios más recientes y permite responder de forma ultra-rápida a muchos clientes.
  4. Los cambios se envían en tiempo real al navegador vía WebSocket.

¡Con esto tendrás tu propio servicio para seguir acciones, con potencial para alertas, dashboard gráfico o integración móvil!

Consejos extra para el despliegue y troubleshooting

  • Si la API bursátil tiene límites, ajusta la frecuencia de consultas y utiliza Redis para evitar excesos.
  • En producción, protege Redis usando contraseñas y redes privadas Docker.
  • Si Node.js falla al conectar a Redis, revisa las variables REDIS_HOST y REDIS_PORT.
  • Consulta los logs de ambos servicios usando docker-compose logs stock-app y docker-compose logs redis para detectar errores.
  • No olvides gestionar tus claves de API: nunca las subas a repos públicos.
  • Para desarrollo, puedes usar una API bursátil gratuita como Alpha Vantage; en producción busca proveedores profesionales.

¿Tienes dudas sobre cómo adaptar el sistema a tus necesidades o cómo extenderlo con gráficos? ¡Déjalas en los comentarios! 😉

Avatar

Por Mid