Guía de despliegue

Alojar LangFlow en un VPS: guía completa con Docker y HTTPS

Desplegar en un VPS Cloud →

Tutorial

Alojar LangFlow en un VPS: guía completa con Docker y HTTPS

Inteligencia Artificial13 min de lectura8 pasos

LangFlow es un editor visual de pipelines de IA — RAG, chatbots, agentes LangChain — que se ejecuta en su navegador y expone cada flujo como una API REST. Alojado en su VPS, se convierte en un taller privado y compartible: sus flujos, sus claves API y su historial de ejecución permanecen bajo su control, sin pasar por un SaaS externo. Esta guía cubre la instalación completa con Docker Compose, PostgreSQL, reverse proxy nginx y HTTPS — y va más allá: llamar a un flujo desde Python o curl, pipeline RAG sobre documentos, componentes personalizados y actualización sin pérdida de datos.

Contenido· Por qué alojar LangFlow en un VPS1/12
  1. 01Por qué alojar LangFlow en un VPS
  2. 02Lo que gana con una instancia autoalojada
  3. 03Requisitos previos antes de empezar
  4. 04Instalar LangFlow con Docker Compose y PostgreSQL
  5. 05Llamar a un flujo desde una aplicación: API REST
  6. 06Pipeline RAG: indexar sus documentos y consultarlos
  7. 07Componentes personalizados: ampliar LangFlow con Python
  8. 08Actualizar LangFlow sin perder sus datos
  9. 09Configuración avanzada: variables de entorno útiles
  10. 10Seguridad: no exponer LangFlow directamente en Internet
  11. 11Solución de errores ampliada: errores frecuentes
  12. 12Próximos pasos: ampliar su instancia LangFlow

Por qué alojar LangFlow en un VPS

LangFlow responde a un caso de uso preciso: diseñar pipelines de IA arrastrando y soltando componentes — modelos LLM, retrievers, prompts, memoria, agentes — y probarlos después sin escribir una sola línea de código. Es la alternativa visual a LangChain en modo solo código, pensada para los equipos que quieren iterar rápido antes de fijar una lógica en Python.

En un VPS obtiene una instancia estable y persistente, accesible para todo el equipo, a diferencia de una instalación local que desaparece al reiniciar. Sus flujos codifican a menudo una lógica de negocio sensible — cadenas de prompts, claves API, conectores hacia sus bases de datos. Estos datos no deben transitar por un SaaS cuya política de retención usted no controla.

LangFlow se apoya en FastAPI en el lado del servidor y expone cada flujo como un endpoint REST: sus aplicaciones pueden llamar directamente a sus pipelines de IA, sin código intermedio. Es esta combinación — interfaz visual para el diseño, API para la integración — la que lo convierte en una herramienta de prototipado seria para casos como el RAG documental, los chatbots de asistencia, los agentes multi-etapa o los pipelines de clasificación.

Lo que gana con una instancia autoalojada

  • Interfaz visual de pipelines — arrastre componentes LLM, retriever, memoria y prompt a un canvas, conéctelos y pruebe sin código.
  • Conectores LLM variados — OpenAI, Anthropic, Ollama (local), Hugging Face y cualquier proveedor compatible con la API de OpenAI.
  • RAG integrado — cargue documentos PDF o de texto, chunking, embedding y búsqueda vectorial en el mismo flujo.
  • API automática por flujo — cada pipeline se convierte en un endpoint REST invocable desde cualquier aplicación.
  • Variables globales cifradas — sus claves API se almacenan en el servidor, nunca quedan expuestas en el código del cliente.
  • Componentes Python personalizados — amplíe LangFlow con su propia lógica de negocio sin bifurcar el proyecto.
  • Control de versiones de los flujos — expórtelos en JSON y versiónelos en Git, con independencia del estado de la base de datos.

Requisitos previos antes de empezar

LangFlow consume más memoria que una herramienta web clásica: su motor de ejecución carga modelos y embeddings en RAM. Prevea como mínimo 2 vCPU y 4 GB de RAM para un uso cómodo. Si conecta un modelo Ollama local para la inferencia en el mismo VPS, suba a 8 GB como mínimo.

En el plano del software, necesita Docker (versión 24 o superior) y Docker Compose v2, instalados y en funcionamiento. El puerto 7860 debe ser accesible en local (LangFlow escucha en ese puerto por defecto). No exponga este puerto directamente a Internet: el reverse proxy nginx se encarga de ello.

Prepare un subdominio que apunte a la IP de su VPS — por ejemplo langflow.su-dominio.com — con los registros DNS ya propagados antes de lanzar certbot. Por último, la base de datos PostgreSQL es muy recomendable en producción: el SQLite predeterminado se corrompe bajo carga concurrente y no soporta el acceso simultáneo de varios usuarios.

Instalar LangFlow con Docker Compose y PostgreSQL

  1. Crear el directorio de trabajo

    Conéctese por SSH a su VPS y cree la carpeta que alojará la stack:

    mkdir -p /opt/langflow && cd /opt/langflow
  2. Escribir el archivo docker-compose.yml

    Cree un archivo docker-compose.yml con dos servicios y un healthcheck en postgres para garantizar que LangFlow espere a que la base esté lista:

    services:
      postgres:
        image: postgres:16
        restart: unless-stopped
        environment:
          POSTGRES_USER: langflow
          POSTGRES_PASSWORD: contraseña-fuerte
          POSTGRES_DB: langflow
        volumes:
          - pgdata:/var/lib/postgresql/data
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U langflow"]
          interval: 10s
          retries: 5
    
      langflow:
        image: langflowai/langflow:latest
        restart: unless-stopped
        ports:
          - "127.0.0.1:7860:7860"
        environment:
          LANGFLOW_DATABASE_URL: postgresql://langflow:contraseña-fuerte@postgres:5432/langflow
          LANGFLOW_SECRET_KEY: cambie-este-valor-por-una-cadena-aleatoria
          LANGFLOW_AUTO_LOGIN: "false"
          LANGFLOW_SUPERUSER: admin
          LANGFLOW_SUPERUSER_PASSWORD: contraseña-admin-fuerte
        depends_on:
          postgres:
            condition: service_healthy
    
    volumes:
      pgdata:
  3. Lanzar la stack

    Arranque los dos contenedores en segundo plano:

    docker compose up -d

    Siga los logs de LangFlow durante la primera inicialización (creación del esquema en base de datos, aproximadamente de 30 segundos a 1 minuto):

    docker compose logs -f langflow

    Espere la línea que indica que el servidor escucha en el puerto 7860 antes de continuar.

  4. Comprobar que la interfaz responde

    Desde su VPS, compruebe que LangFlow responde localmente antes de configurar el proxy:

    curl -s http://127.0.0.1:7860/health

    La respuesta esperada es {"status":"ok"}. Si obtiene un error de conexión rechazada, los logs de inicio contienen la causa.

  5. Configurar el reverse proxy nginx con HTTPS

    Instale nginx y certbot si aún no lo ha hecho, y cree un archivo de configuración:

    server {
        listen 80;
        server_name langflow.su-dominio.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name langflow.su-dominio.com;
    
        ssl_certificate /etc/letsencrypt/live/langflow.votre-domaine.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/langflow.votre-domaine.com/privkey.pem;
    
        location / {
            proxy_pass http://127.0.0.1:7860;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    Obtenga el certificado con certbot:

    certbot --nginx -d langflow.votre-domaine.com
  6. Iniciar sesión y crear un primer flujo

    Abra https://langflow.su-dominio.com en su navegador. Inicie sesión con las credenciales definidas en LANGFLOW_SUPERUSER y LANGFLOW_SUPERUSER_PASSWORD. En la interfaz, haga clic en New Flow, elija una plantilla o parta de un canvas vacío. Añada un componente LLM, un prompt y un componente de salida, conéctelos y haga clic en Run para probar el pipeline.

  7. Guardar las claves API en las variables globales

    En lugar de introducir sus claves API en cada componente, utilice las Variables globales (icono en la parte superior derecha): la clave se cifra en base de datos y puede reutilizarse en todos sus flujos. Desde el menú API de un flujo, obtiene el código de llamada curl o Python para integrar ese pipeline en una aplicación externa.

  8. Hacer copia de seguridad de los flujos y de la base de datos

    Programe un pg_dump diario de la base de datos desde el host:

    docker exec langflow-postgres-1 pg_dump -U langflow langflow > /opt/backups/langflow-$(date +%F).sql

    Exporte también sus flujos en JSON desde el menú Export de cada flujo: es una red de seguridad versionable en Git, independiente del estado de la base de datos.

Llamar a un flujo desde una aplicación: API REST

Cada flujo LangFlow es accesible mediante el endpoint /api/v1/run/<flow-id>. Encuentre el identificador del flujo en la URL del editor o en el menú API del flujo. Dos ejemplos concretos.

Con curl:

curl -s -X POST \
  https://langflow.su-dominio.com/api/v1/run/SU-FLOW-ID \
  -H "Content-Type: application/json" \
  -H "x-api-key: SU-CLAVE-API" \
  -d '{
    "input_value": "¿Cuál es la capital de Francia?",
    "input_type": "chat",
    "output_type": "chat"
  }'

Con Python (biblioteca requests):

import requests

FLOW_ID = "SU-FLOW-ID"
BASE_URL = "https://langflow.su-dominio.com"
API_KEY = "SU-CLAVE-API"

response = requests.post(
    f"{BASE_URL}/api/v1/run/{FLOW_ID}",
    headers={
        "Content-Type": "application/json",
        "x-api-key": API_KEY,
    },
    json={
        "input_value": "¿Cuál es la capital de Francia?",
        "input_type": "chat",
        "output_type": "chat",
    },
    timeout=60,
)

result = response.json()
print(result["outputs"][0]["outputs"][0]["results"]["message"]["text"])

La clave API se genera en Settings → API Keys de la interfaz LangFlow. Autentifica cada llamada y puede revocarse en cualquier momento sin tocar el flujo. Para llamadas desde un servicio Node.js, la estructura es idéntica con fetch o axios — el endpoint REST es agnóstico al lenguaje.

Pipeline RAG: indexar sus documentos y consultarlos

El RAG (Retrieval-Augmented Generation) es el caso de uso central de LangFlow: carga documentos (PDF, texto, Markdown), los divide en fragmentos, los embebe en una base vectorial y un LLM responde preguntas usando ese contexto.

¿Qué VectorStore en un VPS? En un servidor con recursos limitados, Chroma (ChromaDB) es la opción más liviana: se ejecuta en el mismo contenedor LangFlow sin servicio adicional y persiste sus datos en un directorio local. Qdrant es adecuado si dispone de más RAM y quiere un servicio dedicado en un contenedor vecino.

Construir el pipeline de indexación en LangFlow:

En el editor, ensamble la siguiente cadena arrastrando los componentes:

1. File (o Directory) → carga el PDF o la carpeta de documentos.
2. Split Text → divide en fragmentos (tamaño recomendado: 500 a 800 tokens, superposición 50).
3. OpenAI Embeddings (u Ollama Embeddings para permanecer completamente local) → transforma cada fragmento en un vector.
4. Chroma DB → almacena los vectores. Apunte el campo Persist Directory hacia un volumen montado en Docker para que el índice sobreviva a los reinicios.

Para el volumen Chroma, añada en su docker-compose.yml:

  langflow:
    volumes:
      - chromadb:/data/chroma

volumes:
  pgdata:
  chromadb:

Y defina en LangFlow la variable global CHROMA_PERSIST_DIR con el valor /data/chroma.

Pipeline de consulta:

Una vez poblado el índice, cree un segundo flujo (o una rama del mismo): Text Input → Chroma DB (en modo búsqueda, con el mismo directorio) → Prompt (inyecte los fragmentos recuperados) → LLM → Chat Output. Cada pregunta desencadena una búsqueda vectorial, recupera los pasajes más cercanos y los envía al modelo con el contexto.

Componentes personalizados: ampliar LangFlow con Python

LangFlow permite crear componentes Python a medida sin bifurcar el proyecto. Un componente es una clase que hereda de Component y declara sus entradas, sus salidas y su lógica.

Ejemplo mínimo — un componente que limpia y convierte el texto a mayúsculas:

from langflow.custom import Component
from langflow.io import MessageTextInput, Output
from langflow.schema import Data

class UpperCaseComponent(Component):
    display_name = "Uppercase Text"
    description = "Convierte el texto a mayúsculas."

    inputs = [
        MessageTextInput(
            name="input_text",
            display_name="Texto de entrada",
        )
    ]

    outputs = [
        Output(
            display_name="Texto procesado",
            name="output_text",
            method="process_text",
        )
    ]

    def process_text(self) -> Data:
        result = self.input_text.strip().upper()
        return Data(text=result)

Para añadir este componente a su instancia: en la interfaz LangFlow, vaya a Settings → Custom Components, pegue el código y guarde. El componente aparece de inmediato en la barra lateral, listo para arrastrarlo a cualquier flujo. Puede encapsular así cualquier lógica de negocio — llamada a una API interna, transformación de datos, acceso a una base propia — y exponerla como un bloque reutilizable en todos sus flujos.

Actualizar LangFlow sin perder sus datos

LangFlow publica actualizaciones con regularidad (la rama 1.x es la rama estable activa en octubre de 2026). Antes de cualquier actualización, haga sistemáticamente una copia de seguridad de la base:

docker exec langflow-postgres-1 pg_dump -U langflow langflow \
  > /opt/backups/langflow-antes-actualizacion-$(date +%F).sql

Actualice la imagen y reinicie la stack:

cd /opt/langflow
docker compose pull
docker compose up -d

Siga los logs para detectar posibles migraciones automáticas del esquema:

docker compose logs -f langflow

Puntos de atención en las actualizaciones v1.x. Las versiones 1.x pueden incluir migraciones de base de datos (el contenedor las aplica al arrancar). Si un flujo deja de funcionar tras la actualización, consulte el CHANGELOG en GitHub (langflow-ai/langflow) para identificar los breaking changes: algunos componentes se renombran o refactorizan entre versiones menores. Exporte sus flujos en JSON antes de la actualización — es la forma más rápida de restaurarlos a un estado conocido si una migración causa problemas.

Si desea fijar una versión concreta (recomendado en producción), sustituya latest por el tag deseado en su docker-compose.yml:

image: langflowai/langflow:1.12.4

Configuración avanzada: variables de entorno útiles

LangFlow expone varias variables de entorno para adaptar la instancia a su contexto. LANGFLOW_SECRET_KEY cifra los datos sensibles almacenados en base de datos — cambie el valor por defecto antes del primer arranque, pues una rotación posterior invalida los datos cifrados existentes. LANGFLOW_AUTO_LOGIN en false obliga siempre a un inicio de sesión explícito, incluso desde localhost. LANGFLOW_WORKERS controla el número de procesos Uvicorn: el valor predeterminado (1) es adecuado para un uso moderado; auméntelo a 2 o 4 si varios usuarios ejecutan flujos simultáneamente.

Para los flujos que llaman a modelos locales mediante Ollama, defina OLLAMA_BASE_URL en las variables globales de LangFlow en lugar de en el entorno Docker: el valor se gestiona entonces desde la interfaz y puede cambiarse sin reinicio.

Si actualiza LangFlow, haga siempre un pg_dump antes de docker compose pull && docker compose up -d: algunas actualizaciones de versión modifican el esquema de la base de datos.

Seguridad: no exponer LangFlow directamente en Internet

LangFlow no incorpora rate limiting en sus endpoints API. Sin medidas complementarias, un flujo expuesto públicamente puede ser invocado sin límite por cualquiera que conozca la URL. Dos enfoques se complementan.

En primer lugar, deje LANGFLOW_AUTO_LOGIN=false de forma permanente y cree cuentas de usuario distintas para cada miembro del equipo. En segundo lugar, si sus flujos solo deben ser invocados por sus propias aplicaciones (y no por usuarios directos), añada un bloqueo auth_basic de nginx delante de la interfaz de gestión y exponga únicamente los endpoints /api/v1/run/<flow-id> con autenticación por token a sus aplicaciones.

Nunca deje LangFlow en producción con SQLite: la base de datos se corrompe bajo accesos concurrentes y pierde sus flujos sin mensaje de error explícito.

Solución de errores ampliada: errores frecuentes

Error OOM (Out of Memory). Si el contenedor LangFlow se reinicia espontáneamente, consulte docker compose logs langflow y busque Killed. La causa es la falta de RAM. Reduzca LANGFLOW_WORKERS a 1 y, si el problema persiste, aumente la RAM del VPS o evite ejecutar flujos pesados simultáneamente.

RuntimeError: CUDA out of memory. Este error ocurre cuando un componente intenta usar una GPU (vía PyTorch o un modelo Hugging Face) y el VPS no dispone de una, o la memoria GPU es insuficiente. Fuerce la ejecución en CPU añadiendo la variable de entorno CUDA_VISIBLE_DEVICES="" al servicio langflow en docker-compose.yml. Si el error proviene de un modelo Hugging Face, seleccione una variante CPU (sufijo -cpu o gguf) en el componente.

Puerto 7860 ya en uso. Si docker compose up -d falla con address already in use, otro proceso escucha en ese puerto. Identifíquelo con ss -tlnp | grep 7860 y deténgalo, o cambie el puerto host en docker-compose.yml (por ejemplo "127.0.0.1:7861:7860") y actualice la configuración nginx en consecuencia.

ImportError: No module named 'torch' o dependencia faltante. Algunos componentes avanzados (embeddings Hugging Face, modelos locales) requieren bibliotecas pesadas no incluidas en la imagen base. Cree un Dockerfile derivado que instale las dependencias faltantes, o utilice la imagen langflowai/langflow-backend con los extras necesarios.

Conexión rechazada a Ollama. Si LangFlow no puede contactar con Ollama en el mismo VPS, compruebe que Ollama escucha en 0.0.0.0 y no solo en 127.0.0.1. En docker-compose.yml, añada extra_hosts: ["host-gateway:host-gateway"] al servicio LangFlow y use la dirección http://host-gateway:11434 en los componentes Ollama.

Canvas en blanco o WebSocket cortado. Compruebe que las cabeceras Upgrade y Connection se transmiten correctamente por nginx. Un proxy intermedio (Cloudflare en modo Full Strict, balanceador de carga) puede interceptar los WebSockets: asegúrese de que el protocolo WebSocket esté correctamente configurado en el proxy.

Logs de flujo ausentes o incompletos. LangFlow almacena los logs de ejecución en base de datos. Si PostgreSQL no estaba listo cuando LangFlow arrancó, las primeras solicitudes fallan en silencio. El healthcheck del ejemplo de docker-compose.yml anterior resuelve este problema.

Próximos pasos: ampliar su instancia LangFlow

Una vez LangFlow operativo, varias integraciones amplían su ámbito de uso.

Si desea un modelo LLM completamente local (sin llamadas a una API externa), instale Ollama en el mismo VPS y conéctelo a LangFlow mediante el componente Ollama: sus pipelines dejan de enviar datos fuera de su infraestructura. Ollama expone una API compatible con OpenAI en el puerto 11434.

Para un RAG documental más robusto, pase de Chroma a Qdrant — una base vectorial de código abierto que despliega en un contenedor vecino y que ofrece buen rendimiento con grandes corpus (varios decenas de miles de documentos).

Por último, si varios equipos utilizan la instancia, plantéese aislar los flujos por espacio de trabajo (función disponible según la versión) o desplegar una instancia LangFlow por proyecto con la plantilla ServOrbit, que configura automáticamente Docker Compose, PostgreSQL y el reverse proxy.

Aloje LangFlow en un VPS dedicado

Despliegue su propia instancia de LangFlow en unos minutos en un VPS ServOrbit — confidencialidad total, sin límites de API, acceso HTTPS seguro con certificado TLS incluido.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva