Tips
Python
Imágenes oficiales
Imágenes oficiales de Python disponibles en DockerHub:
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":
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.
- 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.
Extras:
FLET
Instalación:
Crear proyecto desde plantilla
Crea una app de un contador:
Incluye archivos de configuracion:flet.dev - Create a new Flet app
Ejecución
Servidor web, puerto random:
Servidor, puerto específico:
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/*
Crear sitio estático:
Construir sitio web (descarga Flutter):
Este crea una subcarpetabuild
con necesarios:
- La carpeta
web
con todos los contenidos del sitio web creado; - El intérprete de Flutter.
Puesta en funcionamiento:
Flet.dev - Publish app to a static website
Crear apps con Flet
Las instrucciones exactas varían con el sistema operativo destino.