Як розгорнути Dify на VPS через Docker Compose
Інструкція з інсталяції Dify за допомогою Docker Compose. Для стабільної роботи шести контейнерів потрібно мінімум 4 GB RAM та налаштування .env файлу.
Що таке Dify та до чого ви готуєтеся
Dify — це платформа для самостійного хостингу, призначена для створення застосунків на базі великих мовних моделей. Ви отримуєте веб-інтерфейс для проектування чат-ботів, агентів та конвеєрів пошуку (retrieval pipelines), API для виклику функцій з власного коду, а також єдине місце для керування промптами, наборами даних та ключами моделей. Це інструмент для невеликих команд, щоб кожен розробник працював на спільній приватній базі, а не розкидав API-ключі у скриптах.
Самостійне розгортання означає запуск кількох компонентів. Dify постачається як набір Docker-контейнерів: API-сервер, фоновий воркер, веб-фронтенд, база даних Postgres, кеш Redis та векторна база даних; усі вони з'єднані за допомогою Docker Compose. Це складніше за один бінарний файл, але Compose бере на себе налаштування зв'язків. Для стабільної роботи достатньо VPS з наявним об'ємом RAM у кілька гігабайт.
Оскільки Dify зберігає ваші API-ключі моделей та часто приватні документи для пошуку, ставтеся до сервера як до критично важливого об'єкта з першої хвилини. Цей посібник інсталює систему, а потім налаштовує її захист так само, як будь-який інший сервіс, що зберігає конфіденційні дані.
Prerequisites
Вам потрібен VPS під керуванням Ubuntu 24.04 з встановленими Docker та плагіном Docker Compose, а також користувач з правами sudo або в групі docker. Якщо ви вперше працюєте з Docker, основи Docker Compose на VPS пояснюють встановлення та основні команди, які використовуються в цьому посібнику. Бажано мати доменне ім'я, спрямоване на сервер, оскільки вам знадобиться TLS перед Dify замість простої IP-адреси.
Step 1: Get Dify and its Compose files
Dify зберігає свої Docker-налаштування в основному репозиторії. Клонуйте його та перейдіть у директорію docker:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .envФайл .env містить усі конфігурації. Прочитайте його перед початком роботи. Найважливіші значення — це паролі та секрети: SECRET_KEY, пароль Postgres та пароль Redis. Приклади файлів містять заглушки; використання стандартних значень — найпоширеніша причина компрометації самостійно розгорнутого Dify. Згенеруйте справжній секретний ключ:
openssl rand -base64 42Вставте його в SECRET_KEY та встановіть складні унікальні значення для кожного поля пароля у файлі.
Step 2: Start it
Запустіть стек:
docker compose up -dПід час першого запуску завантажуються кілька образів та ініціалізується база даних, тому зачекайте хвилину. Перевірте стан контейнерів:
docker compose psКожен сервіс має відображатися в running. За замовчуванням Dify надає веб-інтерфейс через вбудований контейнер nginx на порту 80. При першому переході на http://YOUR_SERVER/install ви створите обліковий запис адміністратора. Зробіть це негайно, поки ніхто інший не отримав доступ до порту, оскільки до створення цього акаунта будь-хто зможе перехопити контроль над вашим екземпляром.
Step 3: Do not expose it raw. Put TLS and a firewall in front
Саме на цьому етапі більшість швидких інсталяцій завершуються помилками та починаються інциденти безпеки. Вбудований nginx у Dify прослуховує порт 80 без шифрування на всіх інтерфейсах. Ви не повинні передавати логін адміністратора та ключі моделей через незашифрований HTTP, і внутрішні сервіси не мають бути доступні ззовні.
Заблокуйте доступ за допомогою фаєрвола з політикою "заборонено все, що не дозволено", залишивши доступ лише для SSH та веб-трафіку:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableПам'ятайте, що фаєрвол, який налаштований лише для IPv4, може залишати ті самі порти відкритими для IPv6 — це прогалина у фаєрволі IPv6, на які потрапляє багато користувачів. Переконайтеся, що обидва стеки фільтруються.
Для TLS найкращий шлях — прив'язати веб-порт Dify до loopback і запустити реверс-проксі з сертифікатом Let's Encrypt попереду. Таким чином, у відкритому інтернеті буде лише проксі, що працює через HTTPS. Параметр .env у Dify дозволяє змінити відкритий порт; встановіть його на 127.0.0.1 і спрямуйте ваш проксі на цей порт. Ідеї щодо захисту агентів з безпечного запуску AI-агента на VPS також застосовні тут: тримайте компоненти на loopback, відкривайте лише необхідне для публічного доступу та використовуйте один захищений шлюз для TLS.
Step 4: Keep it patched
Dify швидко розвивається, і оновлення включають виправлення безпеки. Оновлення виконується шляхом завантаження нових файлів та перезапуску з директорії docker:
git pull
docker compose pull
docker compose up -dЧитайте примітки до релізу перед переходом на нову мажорну версію, оскільки Dify іноді змінює схему .env між релізами, і нова змінна, яку ви не налаштували, може завадити запуску контейнера.
Step 5: Back up what you cannot regenerate
Є дві речі в Dify, які неможливо відновити: база даних Postgres (ваші застосунки, користувачі та налаштування) та volume, де зберігаються завантажені документи та векторний індекс. Обидва знаходяться у Docker volumes у директорії docker. Створюйте знімки (snapshots) за розкладом і копіюйте їх на інший сервер. API-ключ моделі можна перевипустити, а застосунок, на створення якого витрачено тиждень, — ні.
Для створення автономних агентів, що виконують код, див. self-hosting Agent Zero, а building your own AI agent on a VPS описує основи для всіх подібних систем.
FAQ
What are the system requirements to self-host Dify?
Dify працює як стек Docker Compose з приблизно шістьма контейнерами. Плануйте VPS з мінімум 2 GB вільної RAM (бажано 4 GB), кількома ядрами CPU та достатнім дисковим простором для документів та векторного індексу. Основне навантаження на пам'ять створюють база даних та векторне сховище, а не сам Dify.
Is it safe to expose Dify directly on port 80?
Ні. Вбудований веб-сервер Dify працює через незашифрований HTTP, через який проходять ваші дані адміністратора та API-ключі моделей. Використовуйте реверс-проксі з сертифікатом Let's Encrypt, прив'яжіть порт Dify до loopback і залиште в інтернеті лише проксі з HTTPS. Додайте це до фаєрвола з політикою "заборонено все, що не дозволено" для IPv4 та IPv6.
How do I update a self-hosted Dify?
З директорії docker виконайте git pull, потім docker compose pull та docker compose up -d, щоб завантажити нові образи та перезапустити систему. Спочатку прочитайте примітки до релізу, оскільки Dify іноді додає нові змінні .env між версіями, і відсутність такої змінної може завадити запуску контейнера.
What is the first thing to do after installing Dify?
Негайно перейдіть на /install і створіть обліковий запис адміністратора. Поки цей акаунт не створено, будь-хто, хто має доступ до сторінки, може його захопити. Налаштуйте його одразу після того, як контейнери перейдуть у стан healthy, і до того, як ви відкриєте фаєрвол для зовнішнього світу.