Cómo instalar Dify en un VPS con Docker Compose
Dify usa seis contenedores: reserva 4 GB de RAM, cambia todos los secretos de .env y crea la cuenta admin en /install antes de exponerlo.
Qué es Dify y qué está configurando para ejecutar
Dify es una plataforma autoalojable para crear aplicaciones basadas en modelos de lenguaje grandes. Incluye una interfaz web para diseñar aplicaciones de chat, agentes y pipelines de recuperación, una API para invocarlos desde su propio código y un único lugar para administrar prompts, datasets y claves de modelos. Es el tipo de herramienta que un equipo pequeño instala para que todos trabajen sobre una misma base privada, en lugar de repartir claves de API entre distintos scripts. Si términos como agente, llamada a herramientas y pipeline de recuperación todavía no están claros, repasar esos conceptos desde cero hará que las pantallas del constructor de Dify resulten familiares, en lugar de parecer un conjunto de interruptores sin etiquetas.
Ejecutarlo usted mismo implica administrar varios componentes. Dify se distribuye como un conjunto de contenedores Docker: un servidor API, un worker en segundo plano, un frontend web, una base de datos Postgres, una caché Redis y una base de datos vectorial, todos conectados mediante Docker Compose. Es más que un único binario, pero Compose gestiona las conexiones y un VPS con un par de gigabytes de RAM disponibles lo ejecuta sin problemas. Si ese VPS también va a ejecutar otros servicios, dimensionelo a partir de mediciones reales y no de las cifras anunciadas, porque los requisitos reales de RAM de PhotoPrism e Immich están muy por encima de sus mínimos publicados, y un servidor de fotos que comparte el equipo agotará primero los recursos de la base de datos y del almacenamiento vectorial de Dify. La contención de CPU produce el mismo efecto: una biblioteca de Jellyfin con la apariencia de un videoclub de los años 90 apenas consume recursos mientras sólo se consultan las carátulas, pero en cuanto alguien inicia una transcodificación, las colas de workers de Dify quedan detrás de ella. La ventaja es que el número de contenedores de Dify permanece fijo, independientemente del número de aplicaciones que cree, lo que hace que el coste crezca de forma más gradual que en OpenBot, donde cada compañero de trabajo de IA tiene su propio contenedor y su propio navegador y cada nueva incorporación vuelve a elevar el mínimo de memoria.
Como Dify almacena sus claves de API de modelos y, a menudo, documentos privados cargados para la recuperación, trate el sistema donde se ejecuta como sensible desde el primer momento. Esta guía lo instala y después lo protege como protegería cualquier servicio que almacene secretos.
Requisitos previos
Necesita un VPS con Ubuntu 24.04, Docker y el complemento Docker Compose instalados, además de un usuario con sudo o que pertenezca al grupo docker. Si Docker es nuevo para usted, los conceptos básicos de Docker Compose en un VPS explican la instalación y los comandos principales que da por supuestos esta guía. Conviene disponer de un nombre de dominio que apunte al servidor, porque necesitará TLS delante de Dify en lugar de una dirección IP sin protección.
Paso 1: Obtener Dify y sus archivos de Compose
Dify mantiene su configuración de Docker en el repositorio principal. Clone el repositorio y acceda al directorio docker:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .envEl archivo .env contiene toda la configuración. Léalo antes de iniciar cualquier servicio. Los primeros valores que debe cambiar son los que establecen contraseñas y secretos: SECRET_KEY, la contraseña de Postgres y la contraseña de Redis. El archivo de ejemplo incluye valores de marcador de posición. Dejarlos sin modificar es la forma más habitual de que una instalación de Dify autohospedada termine comprometida. Genere una clave secreta real:
openssl rand -base64 42Pegue el resultado en SECRET_KEY y establezca un valor seguro y único para cada campo de contraseña del archivo.
Paso 2: Inícielo
Inicie la pila:
docker compose up -dLa primera ejecución descarga varias imágenes e inicializa la base de datos, así que espere un minuto. Compruebe que los contenedores estén en estado saludable:
docker compose psTodos los servicios deben leer running. De forma predeterminada, Dify sirve su interfaz web mediante un contenedor nginx incluido que escucha en el puerto 80. En la primera visita a http://YOUR_SERVER/install, cree la cuenta de administrador. Hágalo inmediatamente, antes de que cualquier otra persona pueda acceder al puerto, porque hasta que exista esa cuenta, cualquiera que cargue la página puede registrarla y hacerse con el control de la instancia.
Paso 3: No lo exponga directamente. Coloque TLS y un firewall delante
Aquí es donde terminan la mayoría de las instalaciones rápidas y donde comienzan la mayoría de los incidentes. El propio nginx de Dify escucha en el puerto 80, sin cifrado y en todas las interfaces. No debe enviar las credenciales de administración ni las claves de los modelos mediante HTTP sin cifrar. Tampoco debe permitir que los servicios internos sean accesibles desde el exterior.
Proteja el servidor con un firewall de denegación predeterminada que permita sólo SSH y el tráfico web:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableRecuerde que un firewall que sólo cubre IPv4 puede dejar esos mismos puertos abiertos en IPv6: es la brecha del firewall de IPv6 que afecta a muchos administradores de servidores propios. Confirme que ambas pilas de red estén filtradas.
Para TLS, la opción más limpia es vincular el puerto web de Dify a loopback y ejecutar delante un reverse proxy con un certificado de Let's Encrypt. Así, el único servicio expuesto a Internet es el proxy mediante HTTPS. .env de Dify permite cambiar el puerto expuesto; configúrelo para que se vincule a 127.0.0.1 y apunte el proxy a esa dirección. Las prácticas para reforzar un agente de ejecutar un agente de IA de forma segura en un VPS también se aplican aquí: mantenga los componentes en loopback, exponga sólo lo que deba ser público y haga que una única entrada reforzada gestione TLS. Si la interfaz de una herramienta es sólo para usted y no necesita ningún certificado, omita el proxy y acceda mediante un túnel SSH, como en alojar el escáner de seguridad open-kritt, cuyo panel queda vinculado a loopback y se reenvía a su portátil en lugar de publicarse. Si todo un equipo necesita Dify, pero no debe estar disponible desde Internet, una red superpuesta amplía este enfoque más allá de un solo portátil: anunciar la subred privada del servidor a su tailnet permite que todos los dispositivos autorizados accedan al builder mediante una dirección privada, mientras el firewall permanece cerrado para todo excepto SSH. Si administra este servidor mediante un agente de programación en lugar de hacerlo manualmente, determine cuánto puede hacer sin supervisión antes de entregarle las claves, porque el modo de permisos en que deja Claude Code decide si se detiene para solicitar confirmación antes de reescribir .env o reiniciar la pila. Si termina con una sesión siguiendo los registros de los contenedores y otra editando la configuración del proxy, esas dos sesiones pueden intercambiar texto en el mismo servidor, lo que evita copiar la salida entre terminales cada vez que reinicia la pila.
Paso 4: Manténgalo actualizado
Dify evoluciona rápidamente y las actualizaciones incluyen correcciones de seguridad. Actualizarlo consiste en hacer un pull y reiniciar desde el directorio docker:
git pull
docker compose pull
docker compose up -dLea las notas de la versión antes de saltar a una versión principal, porque Dify cambia ocasionalmente el esquema .env entre versiones y una variable nueva que no haya configurado puede impedir que un contenedor se inicie.
Paso 5: Haga copias de seguridad de lo que no puede regenerar
Hay dos elementos irremplazables en un servidor Dify: la base de datos Postgres, que contiene sus aplicaciones, usuarios y ajustes, y el volumen que almacena los documentos cargados y el índice vectorial. Ambos se encuentran en volúmenes de Docker dentro del directorio docker. Cree snapshots según un calendario y copie esos snapshots fuera del servidor. Esos snapshots contienen todas las claves de modelo y los documentos cargados en un solo archivo, por lo que debe cifrarlos antes de sacarlos del servidor, por la misma razón que una copia de seguridad de Vaultwarden resulta ser el punto débil de un servidor de contraseñas sólido. Una clave de API de un modelo se puede volver a emitir; la aplicación que tardó una semana en crear no. El mismo criterio se aplica a cualquier agente cuyo estado deba sobrevivir a la máquina donde se ejecuta: mantener KiroCrew en ejecución como contenedor permanente consiste en crear snapshots de la memoria y de las programaciones que, de otro modo, desaparecerían en el siguiente reinicio.
Cuando quiera que los agentes creados aquí accedan a algo más que sus propios conjuntos de datos y busquen en la web en tiempo real, dirigirlos a una instancia de SearXNG autohospedada mantiene el flujo de consultas en hardware bajo su control, aunque conviene informarse sobre la superficie de ataque de prompt injection que se abre antes de activarla. Para un agente más autónomo que ejecute código, consulte autohospedar Agent Zero, y crear su propio agente de IA en un VPS cubre los fundamentos en los que se basan todos ellos.
FAQ
¿Cuáles son los requisitos del sistema para alojar Dify por cuenta propia?
Dify se ejecuta como una pila de Docker Compose de aproximadamente media docena de contenedores. Por eso, planifique un VPS con al menos 2 GB de RAM libres, idealmente 4 GB, además de un par de núcleos de CPU y suficiente espacio en disco para los documentos cargados y el índice vectorial. La presión de memoria procede de la base de datos y del almacén vectorial, no de Dify.
¿Es seguro exponer Dify directamente en el puerto 80?
No. El servidor web incluido con Dify escucha en HTTP sin cifrar y expone el inicio de sesión de administración y las claves de API de los modelos. Coloque un reverse proxy con un certificado de Let's Encrypt delante, vincule el puerto propio de Dify a loopback y permita que sólo el proxy HTTPS quede expuesto a Internet. Combine esto con un firewall con denegación predeterminada que cubra IPv4 e IPv6.
¿Cómo actualizo una instalación de Dify alojada por cuenta propia?
Desde el directorio docker, ejecute git pull y, después, docker compose pull y docker compose up -d para descargar las imágenes nuevas y reiniciar. Lea primero las notas de la versión, porque Dify a veces añade nuevas variables .env entre versiones y la ausencia de una de ellas puede impedir que un contenedor se inicie.
¿Qué es lo primero que debo hacer después de instalar Dify?
Visite /install y cree inmediatamente la cuenta de administración. Hasta que exista esa cuenta, cualquiera que pueda acceder a la página puede reclamarla. Configúrela en cuanto los contenedores estén funcionando correctamente y antes de abrir el firewall a Internet.