¿Por qué autoalojar FastAPI en un VPS?
FastAPI obtiene todo su rendimiento del modelo ASGI asíncrono: conexiones WebSocket persistentes, streaming de respuestas y llamadas concurrentes a otros servicios. Las plataformas serverless suelen cortar las conexiones largas y facturan cada petición, lo que penaliza a una API de alto caudal o en tiempo real. En un VPS, usted lanza Uvicorn gobernado por Gunicorn con tantos workers como núcleos, mantiene las conexiones abiertas todo el tiempo que haga falta y coloca Nginx al frente para el TLS y el buffering. También controla el pool de conexiones hacia PostgreSQL y la caché Redis, dos palancas esenciales cuando sube la carga — el caudal realmente sostenido se mide sobre su propio tráfico.
Beneficios concretos de un FastAPI autoalojado
- WebSockets y Server-Sent Events sin cortes de conexión ni timeout impuesto.
- Ajuste fino de los workers Uvicorn/Gunicorn según el número de núcleos del VPS.
- Ningún arranque en frío (cold start): el proceso permanece activo entre dos peticiones.
- Documentación Swagger y ReDoc servida internamente, accesible o protegida a su conveniencia.
- Integración directa con un pool asíncrono de PostgreSQL (asyncpg) y Redis.
- Coste fijo sea cual sea el número de llamadas a la API, ideal para un backend de producción.
Requisitos de hardware y software
Una API FastAPI es ligera: 1 vCPU y 1 GB de RAM bastan para empezar, pero apunte a 2 vCPU y 2 GB en cuanto añada una base de datos y una caché en el mismo VPS. Instale Python 3.11+ o utilice Docker con una imagen python:3.11-slim. Prevea Uvicorn con el worker uvicorn.workers.UvicornWorker, Gunicorn como gestor de procesos y Nginx para el reverse proxy. Se requiere un dominio apuntado al VPS para el certificado TLS. Ubuntu 22.04/24.04 LTS es la base recomendada.
Desplegar FastAPI paso a paso
Inicializar el VPS y la aplicación
Conéctese por SSH, instale Docker, clone su repositorio y cree un
.envcon las variables de entorno (URL de la base de datos, claves de API, origen CORS). Compruebe que su punto de entrada expone efectivamenteapp = FastAPI().Contenerizar con Uvicorn y Gunicorn
En el Dockerfile, instale las dependencias y después lance
gunicorn main:app -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 --workers 4. El número ideal de workers suele ser(2 × cœurs) + 1.Orquestar los servicios
En
docker-compose.yml, declare el servicioapi, un serviciodbPostgreSQL y un servicioredis. Utilicedepends_ony un healthcheck para que la API espere a que la base de datos esté lista antes de arrancar.Colocar Nginx como reverse proxy
Configure un bloque de servidor con
proxy_pass http://api:8000y, para los WebSockets, añadaproxy_set_header Upgrade $http_upgradeyproxy_set_header Connection "upgrade". Desactive el buffering para el streaming si es necesario.Asegurar con un certificado TLS
Obtenga un certificado Let's Encrypt mediante Certbot o un contenedor companion, fuerce el HTTPS y redirija el HTTP. Recuerde restringir el acceso a
/docsy/openapi.jsonen producción si la API no es pública.Lanzar y probar
Arranque con
docker compose up -d, compruebe el estado mediante el endpoint/healthque habrá añadido, y pruebe la documentación interactiva. Vigile los registros de Uvicorn para ajustar el número de workers bajo carga real.
Para las tareas largas (envío de correos, procesamiento de imágenes, llamadas externas lentas), no bloquee el event loop: derívelas a un worker en segundo plano con BackgroundTasks para los casos sencillos, o a Celery/ARQ con Redis para los procesamientos pesados. Una API que responde rápido y delega el trabajo asíncrono se mantiene reactiva incluso con alta concurrencia.
Desplegar FastAPI con un clic desde el Marketplace ServOrbit
El Marketplace ServOrbit ofrece una plantilla FastAPI Stack preconfigurada: Python 3.12, Uvicorn, Gunicorn, Nginx y PostgreSQL 16 se instalan automáticamente en su VPS desde el pedido. Sin sesión SSH para la instalación de base — llega directamente al paso de clonar su repositorio y de lanzar Uvicorn. La ficha del marketplace contiene las especificaciones exactas, los casos de uso y una guía de primera conexión.