Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Despliegue Python: Desarrollo web con Flask

En esta lección vamos a hablar de un tema muy importante si ya estás avanzando con Flask y quieres llevar tus proyectos a producción: se trata de WSGI y cómo usar un servidor profesional como Gunicorn para desplegar tu aplicación.


¿Qué es WSGI?

Empecemos con lo básico.

WSGI(Web Server Gateway Interface) es como un “acuerdo” entre dos componentes clave en las aplicaciones web de Python:

  • Tu aplicación Flask (u otro framework)
  • El servidor web que se encargará de recibir los pedidos desde Internet

Gracias a WSGI, tu aplicación Flask —que realmente es una función que recibe una solicitud (request) y devuelve una respuesta (response)— puede ejecutarse en cualquier servidor que entienda este estándar.

¿Y para qué sirve?

En tu computador, cuando pruebas una app Flask, seguramente usas el servidor que trae Flask por defecto. Es muy bueno para desarrollo, pero tiene varias limitaciones:

  • Solo puede manejar una petición a la vez
  • No está optimizado para rendimiento ni seguridad
  • No sirve para producción

Cuando migramos a un servidor real (con varios núcleos, muchos usuarios accediendo al mismo tiempo, etc), necesitamos un servidor que aproveche bien esos recursos y maneje múltiples procesos al tiempo. Ahí es donde entra un servidor WSGI como Gunicorn.


¿Qué es Gunicorn?

🦄 Gunicorn (Green Unicorn) es uno de los servidores WSGI más usados. Es ligero, rápido y fácil de configurar.

Paso 1: Instalar Gunicorn

Primero, instalamos gunicorn dentro de nuestro entorno virtual. Si estás usando la herramienta uvicorn (uv), puedes hacerlo así:

uv add gunicorn

Si usas pip directamente, sería:

pip install gunicorn

Paso 2: Ejecutar la aplicación con Gunicorn

Supongamos que tienes tu app Flask en un archivo llamado hello_world.py con una variable app que representa tu aplicación:

# hello_world.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hola, mundo"

Para lanzar Gunicorn:

uv run gunicorn --workers=4 --bind=127.0.0.1:8000 hello_world:app

Analicemos la línea:

Opción Qué hace
--workers=4 Ejecuta 4 copias del proceso de tu app
--bind=127.0.0.1:8000 Atiende peticiones en ese IP y puerto
hello_world:app Archivo sin la extensión .py, y el nombre del objeto app que es tu Flask application

💡 Nota: este comando no reinicia la app automáticamente como el dev-server, así que quizá quieras agregar herramientas como watchdog o reload si necesitas hot-reload en ambientes de prueba.


¿Cómo publicar tu página en internet?

Ahora sí, vamos a la parte de verdad: ¡sacar nuestro proyecto al mundo!

El proceso general tiene tres pasos:

1️⃣ Comprar un dominio

2️⃣ Contratar un servicio de hosting

3️⃣ Hacer el despliegue (deploy)


1. Comprar un dominio

El dominio es la dirección que las personas usarán para llegar a tu página, como miempresa.com.

Para conseguir uno, lo compras a través de un registrador de dominios. A veces estos mismos ofrecen hosting y ya te dan todo listo. Si no, después deberás configurar tu servidor para "ligarlo" al dominio.


2. Comprar y configurar un hosting

El hosting es el lugar donde va a vivir tu aplicación.

Hay muchas opciones:

Tipo Descripción
Virtual Hosting (Shared) Muy barato, fácil de usar, pero muy limitado. Ideal para sitios simples
VPS / VDS Una máquina virtual donde puedes instalar todo lo que quieras
Servidor dedicado Una máquina completa solo para ti. Mayor rendimiento, pero más compleja de administrar
IaaS (Infraestructura como Servicio) Por ejemplo Amazon EC2: tú decides qué instalar y cómo configurar
PaaS (Plataforma como Servicio) Heroku, Render, etc. Tú solo subes tu app y ellos se encargan del resto

3. Deploy

Deploy o despliegue es el proceso de subir una nueva versión de tu sitio al servidor.

Consta de varios pasos:

  1. Subir el código al servidor (normalmente vía Git)
  2. Instalar las dependencias (por ejemplo, Flask, Gunicorn)
  3. Ejecutar tareas previas (como compilar assets o correr scripts de bases de datos)
  4. Reiniciar tu aplicación

Idealmente, todo este proceso se automatiza para evitar errores humanos.

💡 En un deploy no se debe “retroceder”. Si algo falla, haces otro deploy con una versión corregida, no regresas versiones "a la fuerza", especialmente por temas en las bases de datos (migraciones).

Tipos de Deploy

Veamos diferentes enfoques:

Método ¿Cómo funciona?
Secuencial Se actualiza un servidor tras otro
Blue-Green Dos ambientes idénticos: el viejo y el nuevo. Solo cambias cuál está activo
Canary release Se prueba primero con pocos usuarios y se amplía poco a poco

Deploy en PaaS (más fácil)

Los PaaS como Heroku o Render te permiten publicar fácilmente.

Ventajas:

✅ Planes gratis para pruebas o proyectos personales

✅ Dominio gratuito (de tipo tuproyecto.herokuapp.com)

✅ No necesitas configurar servidores ni instalar nada manual

Puedes desplegar desde tu PC o directamente desde un repositorio en GitHub.


Deploy en VPS y otros servidores (más control)

Si necesitas más control o rendimiento (por ejemplo, usar Gunicorn directamente), necesitarás configurar todo el servidor de forma manual o automatizada.

Usamos herramientas de gestión de configuración, como:

  • Ansible (muy recomendado)
  • Puppet, Chef, etc.

¿Qué es Ansible?

Es una herramienta que te permite automatizar la configuración del servidor usando archivos llamados playbooks (en YAML).

Con Ansible puedes:

  • Instalar Python, pip, nginx, etc.
  • Crear usuarios, carpetas, permisos
  • Automatizar todo el proceso de deploy

Un ejemplo sencillo:

- hosts: all

  tasks:

    - lineinfile:
        create: yes
        regexp: ~/.local
        path: ~/.bash_profile
        line: "export PATH=$PATH:~/.local/bin"

    - name: install packages
      apt: pkg=python3-pip state=latest update_cache=yes
      tags: pip
      become: yes

    - pip:
        name: pip
        state: latest
      become: yes

¿Y si uso Docker y Kubernetes?

En entornos más avanzados (por ejemplo, varias apps distribuidas y microservicios), se utilizan:

  • Docker: para aislar procesos
  • Kubernetes: para orquestar cientos o miles de procesos distribuidos

Pero esto ya es un tema más avanzado para más adelante.


Resumen

  • WSGI es el estándar que permite que servidores web y aplicaciones Python trabajen juntos.
  • Gunicorn es un servidor WSGI para producción, capaz de usar varios procesos a la vez.
  • Para publicar tu app necesitas dominio, hosting y hacer deploy.
  • Heroku y Render (PaaS) permiten subir tus apps fácilmente, ideales para aprender.
  • Para mayor control, puedes usar un servidor VPS y herramientas como Ansible.
  • El deploy debe ser automatizado, con cuidado al manejar bases de datos.

¡Y listo! Ahora tienes una idea clara de cómo preparar y lanzar tu app Flask al mundo real.


Trabajo independiente

Sube a Render el código que escribiste durante este curso

Proyecto de referencia


Materiales adicionales

  1. Entrega continua 📚 Wikipedia
  2. Terraform
  3. Ansible

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY