Saltar al contenido

Ejecutar un Servidor Manualmente

Usa el Comando fastapi run

En resumen, usa fastapi run para servir tu aplicación FastAPI:

fast →fastapi run main.py
FastAPI Starting production server 🚀

Searching for package file structure from directories
with __init__.py files
Importing from /home/user/code/awesomeapp

module 🐍 main.py

code Importing the FastAPI app object from the module with
the following code:

from main import app

app Using import string: main:app

server Server started at http://0.0.0.0:8000
server Documentation at http://0.0.0.0:8000/docs

Logs:

INFO Started server process [2306215]
INFO Waiting for application startup.
INFO Application startup complete.
INFO Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C
to quit)

restart ↻

Eso funcionaría para la mayoría de los casos. 😎

Podrías usar ese comando por ejemplo para iniciar tu aplicación FastAPI en un contenedor, en un servidor, etc.

Servidores ASGI

Vamos a profundizar un poco más en los detalles.

FastAPI usa un estándar para construir frameworks y servidores web de Python llamado ASGI. FastAPI es un framework web ASGI.

Lo principal que necesitas para ejecutar una aplicación FastAPI (o cualquier otra aplicación ASGI) en una máquina servidora remota es un programa servidor ASGI como Uvicorn, este es el que viene por defecto en el comando fastapi.

Hay varias alternativas, incluyendo:

  • Uvicorn: un servidor ASGI de alto rendimiento.
  • Hypercorn: un servidor ASGI compatible con HTTP/2 y Trio entre otras características.
  • Daphne: el servidor ASGI construido para Django Channels.
  • Granian: Un servidor HTTP en Rust para aplicaciones Python.

Máquina Servidora y Programa Servidor

Hay un pequeño detalle sobre los nombres a tener en cuenta. 💡

La palabra "servidor" se usa comúnmente para referirse tanto a la computadora remota/en la nube (la máquina física o virtual) como también al programa que se ejecuta en esa máquina (ej. Uvicorn).

Solo ten en cuenta que cuando leas "servidor" en general, podría referirse a una de esas dos cosas.

Cuando se refiere a la máquina remota, es común llamarla servidor, pero también máquina, VM (máquina virtual), nodo. Todas esas se refieren a algún tipo de máquina remota, normalmente ejecutando Linux, donde ejecutas programas.

Instalar el Programa Servidor

Cuando instalas FastAPI, viene con un servidor de producción, Uvicorn, y puedes iniciarlo con el comando fastapi run.

Pero también puedes instalar un servidor ASGI manualmente.

Asegúrate de crear un entorno virtual, activarlo, y luego puedes instalar la aplicación servidora.

Por ejemplo, para instalar Uvicorn:

fast →pip install "uvicorn[standard]"

restart ↻

Un proceso similar aplicaría a cualquier otro programa servidor ASGI.

Consejo

Al agregar standard, Uvicorn instalará y usará algunas dependencias extra recomendadas.

Eso incluye uvloop, el reemplazo de alto rendimiento para asyncio, que proporciona el gran aumento de rendimiento en concurrencia.

Cuando instalas FastAPI con algo como pip install "fastapi[standard]" ya también obtienes uvicorn[standard].

Ejecutar el Programa Servidor

Si instalaste un servidor ASGI manualmente, normalmente necesitarías pasar un string de importación en un formato especial para que importe tu aplicación FastAPI:

fast →uvicorn main:app --host 0.0.0.0 --port 80
INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)

restart ↻

Nota

El comando uvicorn main:app se refiere a:

  • main: el archivo main.py (el "módulo" Python).
  • app: el objeto creado dentro de main.py con la línea app = FastAPI().

Es equivalente a:

from main import app

Cada programa servidor ASGI alternativo tendría un comando similar, puedes leer más en su respectiva documentación.

Aviso

Uvicorn y otros servidores soportan una opción --reload que es útil durante el desarrollo.

La opción --reload consume muchos más recursos, es más inestable, etc.

Ayuda mucho durante el desarrollo, pero no deberías usarla en producción.

Conceptos de Despliegue

Estos ejemplos ejecutan el programa servidor (ej. Uvicorn), iniciando un solo proceso, escuchando en todas las IPs (0.0.0.0) en un puerto predefinido (ej. 80).

Esta es la idea básica. Pero probablemente querrás encargarte de algunas cosas adicionales, como:

  • Seguridad - HTTPS
  • Ejecución al inicio
  • Reinicios
  • Replicación (el número de procesos en ejecución)
  • Memoria
  • Pasos previos antes de iniciar

Te contaré más sobre cada uno de estos conceptos, cómo pensar en ellos, y algunos ejemplos concretos con estrategias para manejarlos en los próximos capítulos. 🚀