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
Dockerfilepara 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/
Recuerda que puedes acceder a tu contenedor mysql en cualquier momento haciendo uso del siguiente comando con el password 1234:
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