Guía de despliegue

Desplegar Dify en un VPS: guía completa de instalación y plugins

Desplegar en un VPS Cloud →

Tutorial

Desplegar Dify en un VPS: guía completa de instalación y plugins

Inteligencia Artificial15 min de lectura10 pasos

Dify permite diseñar agentes de IA, chatflows y workflows multimodelo sin reconstruir todo el backend desde cero. Autoalojarlo en un VPS de ServOrbit mantiene tus claves API, tus prompts y tus bases de conocimiento dentro de un perímetro que administras tú. Esta guía cubre el recorrido completo: dimensionamiento, instalación con Docker Compose, primer acceso, plugins offline, límites conocidos de la instalación Docker (nodo Agent, herramientas MCP), copia de seguridad antes de actualizar y solución de errores habituales.

Contenido· ¿Por qué alojar Dify en un VPS?1/14
  1. 01¿Por qué alojar Dify en un VPS?
  2. 02Lo que puede hacer con Dify
  3. 03Requisitos previos: dimensiona bien tu VPS
  4. 04Instala Dify en tu VPS de ServOrbit
  5. 05Configuración post-instalación: modelos, API y espacio de trabajo
  6. 06Plugins offline: sortear el error 500/404 en instancias autoalojadas
  7. 07Límites conocidos de la instalación Docker: el nodo Agent
  8. 08Límites conocidos: editar un Chatflow con herramienta MCP en la 1.18.0
  9. 09Integración con Ollama y n8n
  10. 10Copia del volumen y de la base de datos antes de actualizar
  11. 11Actualizar con seguridad: ensayar primero en una copia
  12. 12Solución de errores: los más frecuentes
  13. 13Solución de errores: agentes, herramientas MCP y actualizaciones
  14. 14La documentación oficial

¿Por qué alojar Dify en un VPS?

Usar la versión cloud de Dify implica confiar sus prompts, sus datos de negocio y sus claves API a un servidor de terceros, con limitaciones en el número de aplicaciones y en los modelos accesibles. Al autoalojar Dify en un VPS, usted elimina esas restricciones: ninguna suscripción mensual ligada al uso, ningún dato sensible transmitido al exterior y la libertad de conectar cualquier proveedor de modelos (OpenAI, Anthropic, Ollama en local, etc.). Es la solución ideal para los equipos que quieren construir pipelines de IA robustos en un entorno bajo su control total.

Lo que puede hacer con Dify

  • Crear chatbots y agentes de IA personalizados conectados a sus propias fuentes de datos (RAG)
  • Orquestar workflows de varios pasos que combinan varios modelos de lenguaje y herramientas externas
  • Conectar Dify a OpenAI, Anthropic Claude, Mistral o un modelo local mediante Ollama
  • Exponer sus aplicaciones de IA mediante una API REST o un widget integrable en su sitio
  • Gestionar los accesos de su equipo con un sistema de roles y espacios de trabajo
  • Seguir los logs de uso, los costos por modelo y el rendimiento de sus pipelines

Requisitos previos: dimensiona bien tu VPS

Dify ejecuta en paralelo una flota de servicios Docker: un servidor API, un worker Celery para embeddings y tareas asíncronas, el frontend web, PostgreSQL (servicio db_postgres), Redis, Weaviate como base vectorial por defecto (VECTOR_STORE=weaviate), un sandbox de ejecución de código, el plugin_daemon, proxies SSRF (Squid) y nginx. Desde la 1.16.0 se suman agent_backend y local_sandbox, que sostienen las aplicaciones Agent.

Mínimo oficial: 2 núcleos de CPU y 4 GiB de RAM, con Docker Compose 2.24.0 o superior (documentación de Dify). Prevé 2 vCPU · 4 GB · 40 GB de SSD para probar las funciones básicas.

Uso real recomendado: 4 vCPU · 8 GB de RAM · 80 GB de almacenamiento. En cuanto indexas documentos voluminosos, varios usuarios consultan a la vez o activas las aplicaciones Agent, los embeddings, la base vectorial y los servicios del agente saturan 4 GB. El plan VPS Power de ServOrbit (4 vCPU, 8 GB) encaja con un uso de equipo sin modelo local.

Con un modelo local (Ollama): suma las necesidades del modelo. Un Llama 3 8B cuantizado (Q4) necesita ~6 GB de VRAM o de RAM dedicada; cuenta con 16 GB de RAM como mínimo para que Dify y Ollama convivan sin swap.

Sistema recomendado: Ubuntu 22.04 LTS.

Instala Dify en tu VPS de ServOrbit

  1. Contrata un VPS Cloud de ServOrbit

    Ve a la página /vps-cloud y elige un plan adecuado a tu uso (mínimo 2 vCPU / 4 GB de RAM, recomendado 4 vCPU / 8 GB). Selecciona Ubuntu 22.04 LTS como sistema operativo y finaliza el pedido. Tu VPS se aprovisiona en menos de un minuto.

  2. Clona una versión publicada y copia la configuración

    Conéctate por SSH y ejecuta git clone --branch 1.18.0 https://github.com/langgenius/dify.git, cd dify/docker y cp .env.example .env. Fija una etiqueta de release en lugar de la rama main, que cambia con cada fusión: la documentación oficial pide clonar la última release.

    El archivo .env concentra la configuración. Antes del primer arranque, sustituye los valores de desarrollo que incluye: DB_PASSWORD (por defecto difyai123456), REDIS_PASSWORD, SANDBOX_API_KEY, PLUGIN_DAEMON_KEY, DIFY_AGENT_API_TOKEN y DIFY_AGENT_SERVER_SECRET_KEY. Deja SECRET_KEY vacía para que se genere una clave persistente: cambiarla después desconecta a todos los usuarios y deja ilegibles las credenciales OAuth de los plugins. Por último, genera el token del sandbox del agente con openssl rand -base64 32 y colócalo en DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN: sin él, el Agent backend y su sandbox no arrancan.

  3. Arranca la pila Docker Compose

    Desde dify/docker, ejecuta docker compose up -d. Docker descarga las imágenes y arranca los contenedores: api, worker, worker_beat, web, db_postgres, redis, weaviate, sandbox, plugin_daemon, ssrf_proxy, agent_backend, local_sandbox y nginx. Comprueba con docker compose ps que los servicios estén Up o healthy; init_permissions aparece como Exited, lo cual es normal. La operación suele durar de 3 a 5 minutos según tu ancho de banda.

  4. Crea la cuenta de administrador

    Abre http://[IP-de-tu-VPS]/install en el navegador.

    Atención: hazlo de inmediato. Mientras no exista la cuenta de administrador, la página /install está abierta a cualquiera, y quien llegue primero se convierte en propietario de tu instancia. Si defines INIT_PASSWORD en el .env (30 caracteres como máximo), la página lo pide antes de crear la cuenta.

    Introduce tu correo electrónico y una contraseña robusta. Esta cuenta es la propietaria del espacio de trabajo por defecto.

  5. Apunta un dominio y activa HTTPS

    En producción, asocia un nombre de dominio a la IP del VPS y despliega un certificado TLS. El nginx interno de Dify escucha por defecto en el puerto 80 del host (EXPOSE_NGINX_PORT=80): si instalas un nginx en el host, ambos chocan. Define EXPOSE_NGINX_PORT=8080 en el .env, instala nginx y Certbot en el host (sudo apt install nginx certbot python3-certbot-nginx -y), crea un vhost que haga proxy a 127.0.0.1:8080 y ejecuta sudo certbot --nginx -d tu-dominio.com.

    Después asigna CONSOLE_API_URL, APP_WEB_URL, SERVICE_API_URL y FILES_URL a https://tu-dominio.com (vacías por defecto): CONSOLE_API_URL sirve a los accesos OAuth y a los plugins, APP_WEB_URL a los enlaces del nodo Human Input, y si FILES_URL y CONSOLE_API_URL siguen vacías, la vista previa de archivos no funciona. Reinicia con docker compose up -d.

Configuración post-instalación: modelos, API y espacio de trabajo

Una vez conectado, el primer paso es registrar un proveedor de modelos. En ajustes (icono superior derecho) → Proveedores de modelos, añada su clave API de OpenAI, Anthropic, Mistral o cualquier otro proveedor compatible. Para un modelo local, indique la URL de su instancia Ollama (http://[host-IP]:11434).

Dify también expone su propia API REST para integrar sus aplicaciones en pipelines externos. Las claves de API se encuentran en Ajustes → Claves de API. Estas claves permiten consultar sus apps de Dify desde n8n, Zapier o cualquier script Python sin pasar por la interfaz gráfica.

El espacio de trabajo por defecto es el creado en el primer acceso. Invite miembros en Ajustes → Miembros y asígneles los roles Admin, Normal u Operador de dataset.

Plugins offline: sortear el error 500/404 en instancias autoalojadas

Desde noviembre de 2025 (issue de GitHub #27720, abierta con Dify 1.9.2), usuarios autoalojados ven fallar la instalación de plugins desde el marketplace: HTTP 500 para langgenius/perplexity, HTTP 404 para langgenius/anthropic y después Reached maximum retries (3) para langgenius/azure_openai. Los mismos plugins se instalan en Dify Cloud. La issue se cerró como «not planned» el 18 de diciembre de 2025 con la etiqueta cant-reproduce, sin corrección: las soluciones de abajo proceden de un bot del hilo y los mantenedores no las confirmaron.

Solución 1: archivo .difypkg local. Descarga el .difypkg del plugin en una máquina conectada e instálalo con «Instalar desde archivo local». Para un servidor sin acceso saliente, la herramienta dify-plugin-repackaging incluye las dependencias en el paquete. Si el archivo se rechaza por tamaño, sube PLUGIN_MAX_PACKAGE_SIZE (52428800 bytes por defecto) y NGINX_CLIENT_MAX_BODY_SIZE (100M por defecto).

Solución 2: desactivar la verificación de firma. Para instalar plugins sin firmar o desarrollar los tuyos, define FORCE_VERIFYING_SIGNATURE=false (valor por defecto: true) en el .env y ejecuta docker compose restart plugin_daemon.

Atención: desactivar la firma elimina una protección. Reserva este ajuste para desarrollo o plugins cuyo origen controlas; en producción con usuarios externos, prefiere un .difypkg verificado.

Límites conocidos de la instalación Docker: el nodo Agent

Nodo Agent de Chatflow y Workflow en la 1.15.0. En la instalación Docker estándar de la 1.15.0, el nodo «Agent» falla antes de cualquier llamada al modelo con ValueError: base_url is required when creating a real Agent backend client. Exige un servicio «Agent backend» indicado por AGENT_BACKEND_BASE_URL, que el docker-compose.yaml oficial de esa versión no incluía. Las issues #38283 (cerrada como «not planned» el 17 de agosto de 2026) y #39161 (cerrada como duplicada el 23 de octubre de 2026) de langgenius/dify no produjeron corrección alguna; una mejora del mensaje de error sigue en revisión (PR #39878). Circulan dos soluciones y ninguna conviene: AGENT_BACKEND_USE_FAKE=true conecta un cliente falso que devuelve una respuesta fija sin llamar nunca al LLM ni a las herramientas MCP, y desplegar a mano un servicio dify-agent ni está documentado ni es compatible.

Desde la 1.16. El compose oficial incluye ahora agent_backend y local_sandbox, con AGENT_BACKEND_BASE_URL=http://agent_backend:5050 en .env.example, y debes definir DIFY_AGENT_API_TOKEN (que desde la 1.16.1 ha de ser igual a AGENT_BACKEND_API_TOKEN) y DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN. Pero Agent V2 se ocultó en Chatflow ya en la 1.16.1, por falta de contexto multiturno; la petición de restaurarlo (#41269, abierta el 26 de agosto de 2026) no tiene versión objetivo. En Chatflow solo está disponible el nodo Agent heredado. El tipo de aplicación Agent independiente es la alternativa que, según quien abrió #39161, funcionó en la 1.15.0.

Límites conocidos: editar un Chatflow con herramienta MCP en la 1.18.0

La issue #44742 (abierta el 25 de octubre de 2026) informa de que, tras quitar y volver a añadir una herramienta MCP en un nodo Agent de la 1.18.0, el Chatflow deja de ejecutarse: TypeError: object of type 'NoneType' has no len(), lanzado en build_parameters. El YAML exportado muestra allowed_tools, context y files guardados como type: variable con value: null. Otra herramienta MCP intacta en el mismo flujo sigue funcionando. Volver a la 1.17.x no repara un flujo ya dañado, y importar la exportación rota en otra instancia también falla.

Soluciones comunicadas. Editar el YAML para pasar esos tres campos a type: constant con value: [] e importarlo tal cual (reempaquetarlo como .difypkg falla en el control de integridad), o recrear el flujo.

Estado del hilo. La issue se cerró el 26 de octubre de 2026 con la PR #44748, fusionada en main: ya no escribe en el grafo guardado los campos opcionales vaciados. Resuelve #44579 (AgentVariableNotFoundError), pero precisa que los parámetros manuales anidados y la secuencia completa de quitar y volver a añadir una herramienta MCP quedan fuera de su alcance. Ninguna release posterior a la 1.18.0 figuraba en la página de releases el 28 de octubre de 2026. Mientras tanto, exporta el YAML antes de cada edición de un Chatflow con herramienta MCP.

Integración con Ollama y n8n

Dify se vuelve especialmente potente combinado con otras herramientas self-hosted.

Ollama le permite ejecutar un LLM directamente en su VPS o en un servidor de la misma red, sin depender de una API externa. Tras desplegar Ollama, regístrelo en Dify como proveedor de modelos con la URL http://[Ollama-IP]:11434. Toda la generación permanece entonces en su infraestructura — sin filtración de prompts al exterior.

n8n es un orquestador de workflows que puede pilotar Dify mediante su API REST. Cree un nodo HTTP Request en n8n apuntando a https://your-domain.com/v1/chat-messages con su clave de API de Dify en la cabecera Authorization. Puede así activar una conversación Dify desde un formulario web, un correo entrante o un webhook de Slack, y enviar la respuesta de IA a cualquier destino.

Copia del volumen y de la base de datos antes de actualizar

Actualizar Dify afecta al esquema de PostgreSQL (las migraciones se ejecutan al arrancar la API mientras MIGRATION_ENABLED=true), a los datos vectoriales y a las imágenes de la pila del agente. Las notas de la 1.18.0 empiezan por «Back up first»: base de datos, datos del almacén vectorial, archivos subidos, almacenamiento de Agent, secretos y archivos de entorno.

En Docker Compose, casi todo vive en docker/volumes/ (db/data para PostgreSQL, weaviate, redis/data), como montajes de carpeta y no como volúmenes con nombre. Para una copia coherente: docker compose stop, luego tar czf ../dify-backup.tar.gz volumes .env docker-compose.yaml y copia el archivo fuera del VPS. Sin parada completa, sigue siendo posible una exportación lógica: docker compose exec -T db_postgres pg_dump -U postgres dify > dify-dump.sql.

Conserva también, fuera del repositorio, SECRET_KEY y PASSWORD_PEPPER si lo defines: perder la primera deja ilegibles las credenciales cifradas, y modificar el segundo invalida los hashes de contraseña existentes (notas de la 1.18.0). Por último, prevé los pasos: si tu pila aún incluye Weaviate 1.27, las notas de la 1.17.1 exigen una subida por etapas hasta la 1.39, sin saltarse versiones menores.

Actualizar con seguridad: ensayar primero en una copia

  1. Congela el estado actual

    Anota la versión en uso (docker compose images), detén la pila con docker compose stop y haz la copia descrita arriba. Comprueba que el archivo se abre (tar tzf) antes de seguir: una copia que nunca se ha releído no es una copia.

  2. Duplica la instancia

    Desde la carpeta superior, ejecuta cp -a dify dify-test. En dify-test/docker/.env, cambia EXPOSE_NGINX_PORT y EXPOSE_NGINX_SSL_PORT (por ejemplo 8081 y 8444) para no chocar con producción, y deja disco y RAM para una segunda pila. El nombre del proyecto Compose sigue el nombre de la carpeta, lo que separa ambas pilas.

  3. Lleva la copia a la versión objetivo

    En dify-test, ejecuta git fetch --tags y luego git checkout <etiqueta>. Compara cada .env.example con tu .env para detectar variables nuevas o renombradas, y si modificaste docker-compose.yaml, reaplica tus cambios sobre el archivo de la nueva release en lugar de conservar el antiguo. Ejecuta docker compose pull y docker compose up -d, y sigue docker compose logs -f api hasta que terminen las migraciones. De la 1.17.1 a la 1.18.0, las notas cuentan 22: API, workers, Agent Backend e imágenes de runtime suben juntos.

  4. Repite tus flujos sensibles

    En la copia, abre cada Chatflow que use un nodo Agent o una herramienta MCP, ejecútalo, edítalo y guárdalo una vez: la edición fue lo que rompió flujos en la 1.18.0. Prueba también una consulta a una base de conocimiento, la llamada a un plugin y una exportación YAML. Después destruye la copia: docker compose down y borra la carpeta dify-test.

  5. Cambia producción, o vuelve atrás

    Repite los mismos pasos en producción durante una ventana de mantenimiento. Para volver atrás, no basta con cambiar la etiqueta: las migraciones modificaron la base. Ejecuta docker compose down, restaura el archivo de volúmenes y vuelve a la etiqueta anterior.

Solución de errores: los más frecuentes

Contenedor worker que se reinicia en bucle. El worker Celery depende de Redis y PostgreSQL. Comprueba su estado con docker compose ps db_postgres redis y lee docker compose logs worker --tail=50. Si Redis no estaba listo al arrancar, basta un docker compose restart worker.

plugin_daemon en bucle con la conexión a PostgreSQL. El informe dify-plugin-daemon #729 (Dify 1.14.0) muestra failed to connect to host=db_postgres … lookup db_postgres on 127.0.0.11:53: no such host y después panic: failed to init dify plugin db. El nombre de host debe corresponder a un servicio en marcha: comprueba que db_postgres esté healthy, que DB_HOST del .env lleve ese nombre y que COMPOSE_PROFILES contenga postgresql; luego ejecuta docker compose down y docker compose up -d. Esa issue se cerró sin causa confirmada.

Un servicio no arranca por vm.max_map_count. Este ajuste del kernel afecta a Elasticsearch (perfil elasticsearch), no a Weaviate. Si lo elegiste, la documentación de Elastic pide 1048576 cuando el valor por defecto es menor: sudo sysctl -w vm.max_map_count=1048576, y la misma línea en /etc/sysctl.conf más sudo sysctl --system para hacerlo permanente.

Plugins del marketplace: error 500/404. Consulta la sección «Plugins offline». Si hay un bloqueo de red, prueba la salida 443 desde un contenedor: docker compose exec api curl -I https://marketplace.dify.ai.

WebSocket desconectado tras un proxy inverso. Si el streaming de las respuestas se interrumpe, tu nginx externo no reenvía las cabeceras de upgrade. Añade en location /: proxy_set_header Upgrade $http_upgrade; y proxy_set_header Connection "upgrade";.

Solución de errores: agentes, herramientas MCP y actualizaciones

base_url is required when creating a real Agent backend client. Consulta «Límites conocidos de la instalación Docker: el nodo Agent». En una versión reciente, comprueba que agent_backend esté en marcha y que AGENT_BACKEND_BASE_URL apunte a http://agent_backend:5050.

agent_backend o local_sandbox no arrancan. El valor DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN está vacío: la documentación indica que el Agent backend y su sandbox no arrancan sin él. Genéralo con openssl rand -base64 32, ponlo en docker/.env y reinicia.

TypeError: object of type 'NoneType' has no len(). Chatflow dañado tras editar una herramienta MCP en la 1.18.0 (#44742): consulta la sección dedicada y corrige el YAML antes de importar.

AgentVariableNotFoundError: Variable '' does not exist. Un campo opcional vaciado en el nodo Agent deja un selector vacío en el grafo guardado (#44579, visto en la 1.17.1). Vuelve a poner un valor en el campo o espera una release que incluya la PR #44748.

IP real perdida tras Cloudflare o un balanceador. Desde la 1.18.0, el nginx incluido sustituye X-Forwarded-For: configura la gestión de IP real de confianza.

No puedes iniciar sesión tras una actualización. Un PASSWORD_PEPPER añadido, cambiado o retirado invalida las contraseñas existentes: restaura el valor original.

Haz una instantánea de ServOrbit a demanda desde el área de cliente antes de cada actualización: cubre la carpeta docker/volumes/ (PostgreSQL, Weaviate, Redis) y tus archivos .env. Detén antes la pila con docker compose stop para que la base se copie en un estado coherente. Si una actualización sale mal, el rollback se hace en pocos minutos desde el área de cliente. La instantánea complementa la copia de prueba, no la sustituye.

La documentación oficial

Para la configuración avanzada, la lista completa de variables de entorno y las notas de versión, consulte la documentación oficial de Dify. El docker-compose.yaml del repositorio oficial sigue siendo la fuente de verdad para las versiones de imágenes y las dependencias entre servicios.

Despliegue Dify en unos minutos en un VPS Cloud ServOrbit

Lance su propia instancia de Dify en un VPS de alto rendimiento y tome el control total de sus aplicaciones de IA, sin límites de uso y sin renunciar a la confidencialidad de sus datos.

¿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