Conceptos básicos de despliegue
10 ejemplos para empezar con Contenedores y Despliegue: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con Contenedores y Despliegue: 7 básicos y 3 intermedios.
uv venv && source .venv/bin/activate
uv pip install "fastapi>=0.115" "uvicorn[standard]>=0.34" "gunicorn>=23.0" "flask>=3.1"Flask expone una llamada WSGI consumida por Gunicorn.
from flask import Flask
app = Flask(__name__)
@app.get("/health")
def health():
return {"status": "ok"}gunicorn -w 2 -b 0.0.0.0:8000 'app:app'app:app significa módulo app, variable app-w manejan solicitudes concurrentes (síncronas)Relacionado: Gunicorn y Uvicorn - ajuste de trabajadores
Las aplicaciones FastAPI son ASGI; se ejecutan con Uvicorn o un trabajador Gunicorn+Uvicorn.
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
async def health():
return {"status": "ok"}uvicorn app:app --host 0.0.0.0 --port 80000.0.0.0 en contenedores, no a 127.0.0.1Relacionado: Gunicorn y Uvicorn - ASGI en producción
Lee el puerto del entorno para despliegues 12-factor.
import os
PORT = int(os.environ.get("PORT", "8000"))PORTuvicorn local sin la variable de entornoint() y falla rápidamente ante valores inválidosRelacionado: Configuración y secretos en producción - configuración de entorno
Comprende quién acepta las conexiones TCP.
Cliente -> Balanceador de carga -> Maestro de Gunicorn -> procesos trabajadores -> tu aplicación
Relacionado: Dockerizar Python - punto de entrada del contenedor
Nunca uses los servidores de desarrollo integrados de Flask/FastAPI en producción.
# solo desarrollo
flask --app app run --debug
# producción
gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 app:app--reload es solo para iteración localRelacionado: Mejores prácticas de despliegue - lista de verificación de producción
Procesa las solicitudes en curso al recibir SIGTERM de los orquestadores.
import signal
def handle_sigterm(signum, frame):
print("apagando con gracia")
signal.signal(signal.SIGTERM, handle_sigterm)--graceful-timeoutRelacionado: Despliegues sin tiempo de inactividad - actualizaciones continuas
Sirve activos estáticos desde CDN o proxy inverso, no desde trabajadores Python.
location /static/ { alias /var/www/static/; }
location / { proxy_pass http://app:8000; }Relacionado: Kubernetes para aplicaciones Python - ingress
Gestiona conexiones con el contexto de ciclo de vida ASGI.
from contextlib import asynccontextmanager
from fastapi import FastAPI
@asynccontextmanager
async def lifespan(app: FastAPI):
# inicio
yield
# limpieza de apagado
app = FastAPI(lifespan=lifespan)@app.on_event obsoleto con lifespanlifespan para aislamientoRelacionado: Salud y preparación - diseño de sondas
Cada trabajador carga una copia completa de tu aplicación y modelos.
gunicorn -w 4 app:app
# 4x coste de importación, 4x RAM de modelo ML si se carga en la importaciónRelacionado: Monitorización de rendimiento (APM) - ajuste de producción
Documenta el comando exacto de producción en el CMD del Dockerfile.
CMD ["gunicorn", "-w", "2", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "app.main:app"]docker-composeRelacionado: Dockerizar Python - diseño de la imagen
Versiones de la pila: Esta página se escribió para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026