Saltar a contenido

Tips

Python

Imágenes oficiales

Imágenes oficiales de Python disponibles en DockerHub:

DockerHub - Python Images

FastAPI

Basado en el tutorial oficial

Proxys

Si se usa un proxy como NGINX o Traefik hay que agregar la opción --proxy-headers al CMD del Dockerfile:

# If running behind a proxy like Nginx or Traefik add --proxy-headers
CMD ["fastapi", "run", "app/main.py", "--port", "80", "--proxy-headers"]

https://www.restack.io/p/fastapi-answer-docker-setup

Comandos en archivo compose

Si se usa el docker-compose, también se puede llamar al comando uvicorn:

version: '3'

services:
web:
    build: .
    command: sh -c "uvicorn main:app --reload --port=8000 --host=0.0.0.0"
    ports:
    - 8000:8000

https://dev.to/rajeshj3/dockerize-fastapi-project-like-a-pro-step-by-step-tutorial-7i8

Paralelización:

Multiples "workers" (contenedores) en Docker/Kubernetes corriendo fastapi o uvicorn

https://fastapi.tiangolo.com/deployment/server-workers/?h=dock#deployment-concepts

Lifespan events

Es código que se ejecuta solamente una vez antes de arrancar el servidor.

Se requiere que el Dockerfile use la instrucción CMD en la forma "exec":

CMD ["fastapi", "run", "app/main.py", "--port", "80"]
Yno en la forma "shell":

CMD fastapi run app/main.py --port 80

FastAPI - Lifespan events

Cliente Fastapi vs Uvicorn vs Gunicorn

????

[Ver sobre los servidores de Python](servidores.md)

Incompatibilidades

WARNING: de momento, FastAPI parece no ser compatible con Python 3.14

Algunas imágenes base compatibles:

python:3.13.1-bookworm

python:3.9
python:3.9.21-alpine3.21
python:3.9.21-slim-bullseye    
python:3.9.21-bullseye      

Conexion con SQL

- SQLAlchemy

Uno de los ORMs más conocidos escritos para Python.

Página oficial de SQLAlchemy

- SQLModel

Del creador de FastAPI, SQLModel es un conector de bases de datos basado en SQLAlchemy e incluye tipado heredado de Pydantic.

Está pensado para facilitar la conexión de bases de datos con los servidores implementados con FastAPI.

SQLModel - Página oficial

SQLModel - testing

Extras:

FLET

Fly.io

Instalación:

pip install flet        # minima
pip install flet[all]   # completa

Crear proyecto desde plantilla

Crea una app de un contador:

flet create
Incluye archivos de configuracion:

flet.dev - Create a new Flet app

Ejecución

Servidor web, puerto random:

flet run --web app.py

Servidor, puerto específico:

flet run --web --port 8000 app.py

Flet.dev - Host app as a dynamic website

Self-hosting (servidor dinámico):

  • App demo;

  • Como hacer un proxy con NGINX: configurar /etc/nginx/sites-available/*

Flet.dev - Self Hosting

Crear sitio estático:

Construir sitio web (descarga Flutter):

flet build web
flet publish
Este crea una subcarpeta build con necesarios:

  • La carpeta web con todos los contenidos del sitio web creado;
  • El intérprete de Flutter.

Puesta en funcionamiento:

python -m http.server --directory build/web

Flet.dev - Publish app to a static website

Crear apps con Flet

Las instrucciones exactas varían con el sistema operativo destino.

Flet.dev - Publishing Flet app to multiple platforms