Ejemplo 3: Implementación de servidor con Nginx, Flask y mySQL

El objetivo de esta práctica es configurar y desplegar una aplicación web basada en una pila Nginx + Flask + MySQL utilizando Docker.

Nuestra práctica tendrá la siguiente estructura de carpetas:

  • docker-compose.yaml

  • /python

    • app.py

    • requirements.txt

    • Dockerfile

    • /templates

      • form.html

  • /nginx

    • nginx.conf

    • Dockerfile

  • /initdb

    • script.sql


1. Creamos un servidor web con Flask

  • Realizaremos esta práctica con una pequeña aplicación web en Flask que tenga un endpoint básico de flask (/) que muestre un formulario de HTML donde te pida nombre y email y al pulsar "enviar" te muestre todos los resultados de la base de datos.

  • El código podría ser para app.py:

Y el documento siguiente de html guárdalo como form.html en una carpeta /templates :

Ahora crea un archivo requirements.txt con el siguiente contenido:


2. Creamos una imagen de docker personalizada de Flask

Escribe un Dockerfile para el servidor Flask:

Y construye la imagen de Flask ejecutando el comando:


3. Configurar un proxy inverso con Nginx

Para ello primero debemos configurar un archivo nginx.conf:

  • Este archivo manejará las solicitudes entrantes y las redirigirá al servidor Flask:

  • Creamos ahora un Dockerfile para Nginx:

  • Construir la imagen de Nginx:


4. Preparación del contenedor de mysql

Para el contenedor de MySQL utilizaremos la imagen oficial de MySQL configurando las variables de entorno (ten en cuenta que esto es un comando entero y que deberá ser lo mismo que en la app de python) y añadiendo un script de iniciación de la base de datos.

Recuerda que nuestra bariables de entorno para el docker-compose serán las siguientes:

Creamos una carpeta ./initdb en la carpeta de docker-compose con el siguiente script script.sql para crear una tabla, dar privilegios y agregar unos datos simples:

Esto veremos que lo añadiremos a la carpeta de iniciación del contenedor (/docker-entrypoint-initdb.d), más info: https://tecadmin.net/using-mysql-with-docker-compose/


5. Orquestar los contenedores con Docker Compose

El último paso es ya crear el archivo de docker compose agregando todas las imágenes creadas. Para ello creamos un archivo docker-compose.yml:

Vamos ahora a iniciar todos los servicios:

Probemos ahora la aplicación abriendo un navegador y accediendo a:

  • http://localhost/ → Deberías ver el formulario HTML.


Mas ideas para añadir/modificar:

  • Añade persistencia de datos configurando volúmenes para Nginx y MySQL.

  • Integra una herramienta de monitoreo como Prometheus o Grafana.

  • Implementa SSL en el proxy Nginx con Let's Encrypt.

Última actualización