Recientemente llevé mi aplicación Tideman desde mi portátil a la nube y ponerla en producción en AWS EC2 con Docker fue más sencillo de lo que esperaba. En este artículo explico el proceso paso a paso y cómo combinar un algoritmo en C++ con una interfaz Flask en Python para obtener un despliegue eficiente y seguro.

Preparar la instancia EC2: primero lancé una instancia EC2 con Ubuntu como sistema operativo, escogiendo un tamaño pequeño elegible para free tier ya que la aplicación no es muy pesada. Tras el lanzamiento configuré el Security Group para abrir los puertos necesarios: puerto 22 para SSH y puerto 80 para HTTP. En la instancia instalé Docker y git, por ejemplo ejecutando en la terminal sudo apt-get update; sudo apt-get install -y docker.io git; y cloné el repositorio con git clone seguido de la URL del repo.

Dockerfile multi etapa: para mantener la imagen final ligera usé una build multi-stage que compila el componente C++ en una etapa y prepara el entorno Python en otra. En la primera etapa utilicé una imagen con compilador GCC y compilé my_algorithm.cpp produciendo el ejecutable my_algorithm con g++. En la segunda etapa cambié a una imagen python:3.10-slim, copié el binario compilado desde la etapa builder al contenedor final, añadí el código Flask, el archivo index.html y requirements.txt, instalé dependencias con pip install -r requirements.txt y configuré Gunicorn para servir la aplicación en el puerto 5000. El enfoque multi-stage evita llevar herramientas de compilación al contenedor final, lo que reduce tamaño y la superficie de ataque.

Ejemplo de pasos en texto plano: FROM gcc:latest AS builder; WORKDIR /app; COPY my_algorithm.cpp /app/my_algorithm.cpp; RUN g++ my_algorithm.cpp -o my_algorithm; FROM python:3.10-slim AS final; WORKDIR /app; COPY --from=builder /app/my_algorithm /app/my_algorithm; COPY app.py /app/app.py; COPY index.html /app/index.html; COPY requirements.txt /app/requirements.txt; RUN pip install -r requirements.txt; EXPOSE 5000; CMD gunicorn -b 0.0.0.0:5000 app:app.

Construir y ejecutar el contenedor: en la EC2 ejecuté sudo docker build -t myflaskcpp . para crear la imagen. Para lanzar el contenedor mapeando el puerto 80 del host al puerto 5000 del contenedor usé sudo docker run -d -p 80:5000 myflaskcpp. De este modo las peticiones al IP público de la EC2 en el puerto 80 se redirigen al servidor Flask servido por Gunicorn dentro del contenedor. Recuerda verificar que el Security Group tiene el puerto 80 abierto para tráfico entrante.

Por qué usar Gunicorn y no el servidor de desarrollo de Flask: el servidor integrado de Flask es para desarrollo, mono hilo y no está optimizado para producción. Gunicorn es un servidor WSGI de producción que permite múltiples workers y manejo concurrente de peticiones, mejorando estabilidad y rendimiento bajo carga real.

Repositorio Tideman y funcionalidades: el proyecto Tideman implementa el método Ranked Pairs para votación por orden de preferencia, con una implementación en C++17 orientada a objetos y envuelta por una API Flask y una interfaz HTML mínima para demos interactivas. Entre sus características destacan entrada CSV capaz de manejar desde miles hasta millones de votos, benchmarking de alto rendimiento con chrono, diseño modular con clases como TidemanElection y VoteParser, manejo robusto de errores y capacidad para procesar millones de votos con pocos candidatos en milisegundos. Un ejemplo de entrada CSV con 3 candidatos sería VoterID,Alice,Bob,Charlie; 1,1,2,3; 2,2,1,3; 3,1,3,2.

Buenas prácticas y recomendaciones: usar Security Groups para abrir solo los puertos necesarios; aprovechar builds multi-stage de Docker para mezclar lenguajes y mantener imágenes ligeras; mapear correctamente puertos del host y del contenedor; usar Gunicorn para producción; automatizar despliegues con pipelines y considerar balanceo y escalado según demanda.

Sobre Q2BSTUDIO: en Q2BSTUDIO somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida, con experiencia en inteligencia artificial, ciberseguridad y servicios cloud. Ofrecemos soluciones integrales que incluyen consultoría en servicios cloud, despliegues en AWS y Azure, integración de agentes IA, y análisis con Power BI para inteligencia de negocio. Si necesitas migrar y desplegar aplicaciones en la nube podemos ayudarte con arquitectura, seguridad y optimización de costes, consulta nuestros servicios cloud en servicios cloud AWS y Azure y descubre cómo desarrollamos aplicaciones a medida que integran inteligencia artificial, ciberseguridad y herramientas de business intelligence.

Palabras clave integradas: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi. Si quieres que migrémos tu proyecto Tideman o te ayudemos a diseñar una solución a medida con despliegue en la nube, contáctanos y diseñaremos la arquitectura, la seguridad y la automatización de despliegue necesaria para tu caso.

Resumen final: desplegar una aplicación que combina C++ y Flask en AWS EC2 con Docker es posible y eficiente mediante builds multi-stage y servidores WSGI como Gunicorn. Abre los puertos adecuados, construye la imagen en la instancia, ejecuta el contenedor con el mapeo de puertos correcto y verifica el acceso desde el navegador usando la IP pública de la EC2. Con Q2BSTUDIO puedes convertir esta guía en un proyecto profesional y escalable adaptado a tus necesidades.