Jak zainstalować Dify na VPS przez Docker Compose
Uruchomienie Dify wymaga 4 GB RAM dla sześciu kontenerów. Przed startem zmień domyślne hasła w pliku .env i skonfiguruj konto administratora pod adresem /install przed innymi.
Czym jest Dify i co uruchamiasz
Dify to platforma z możliwością samodzielnego hostowania, służąca do budowania aplikacji w oparciu o duże modele językowe. Otrzymujesz interfejs WWW do projektowania aplikacji czatowych, agentów i potoków pobierania danych (retrieval pipelines), API do wywoływania ich z własnego kodu oraz centralne miejsce do zarządzania promptami, zbiorami danych i kluczami modeli. Jest to narzędzie, które mały zespół wdraża, aby wszyscy pracowali na jednej, współdzielonej i prywatnej bazie, zamiast rozpraszać klucze API w różnych skryptach. Jeśli pojęcia takie jak agent, wywołanie narzędzia (tool call) czy potok pobierania danych są jeszcze niejasne, przeanalizowanie tych koncepcji od podstaw sprawi, że ekrany kreatora Dify staną się zrozumiałe, zamiast przypominać ścianę nieoznaczonych przełączników.
Samodzielne uruchomienie oznacza obsługę kilku współpracujących elementów. Dify jest dostarczane jako zestaw kontenerów Docker: serwer API, proces działający w tle (worker), frontend WWW, baza danych Postgres, pamięć podręczna Redis oraz baza wektorowa – wszystko połączone za pomocą Docker Compose. To więcej niż pojedynczy plik binarny, ale Docker Compose zarządza powiązaniami, a VPS z kilkoma gigabajtami wolnej pamięci RAM obsłuży to bez problemu. Jeśli ten sam VPS ma uruchamiać również inne usługi, dobierz jego rozmiar na podstawie rzeczywistego zużycia, a nie danych marketingowych, ponieważ rzeczywiste minimalne wymagania RAM dla PhotoPrism i Immich znacznie przewyższają wartości publikowane, a serwer zdjęć współdzielący zasoby najpierw doprowadzi do braku pamięci dla bazy danych i magazynu wektorowego Dify. Rywalizacja o zasoby CPU działa podobnie: biblioteka Jellyfin wyglądająca jak wypożyczalnia wideo z lat 90. prawie nie zużywa zasobów podczas przeglądania grafik, ale w momencie rozpoczęcia transkodowania, procesy Dify ustawiają się w kolejce za nim. Pocieszeniem jest fakt, że liczba kontenerów Dify pozostaje stała niezależnie od liczby zbudowanych na nim aplikacji, co jest bardziej przewidywalnym obciążeniem niż w przypadku OpenBot, gdzie każdy współpracownik AI otrzymuje własny kontener i własną przeglądarkę, a każdy nowy użytkownik podnosi bazowe zużycie pamięci.
Ponieważ Dify przechowuje Twoje klucze API do modeli oraz często prywatne dokumenty załadowane w celu pobierania danych, traktuj serwer, na którym działa, jako wrażliwy od pierwszej minuty. Ten przewodnik przeprowadzi instalację, a następnie zabezpieczy usługę w sposób, w jaki należy zabezpieczać każdy system przechowujący sekrety.
Wymagania wstępne
Wymagany jest serwer VPS z systemem Ubuntu 24.04, zainstalowanym środowiskiem Docker oraz wtyczką Docker Compose, a także użytkownik z uprawnieniami sudo lub członkostwem w grupie docker. Jeśli Docker jest nowym zagadnieniem, podstawy Docker Compose na VPS opisują proces instalacji oraz kluczowe polecenia, na których opiera się ten przewodnik. Warto posiadać domenę skierowaną na serwer, ponieważ zaleca się stosowanie TLS przed usługą Dify zamiast bezpośredniego adresu IP.
Krok 1: Pobranie Dify i plików Compose
Dify przechowuje konfigurację Docker w głównym repozytorium. Należy sklonować repozytorium i przejść do katalogu docker:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .envPlik .env zawiera pełną konfigurację. Należy zapoznać się z jego treścią przed rozpoczęciem jakichkolwiek działań. Najważniejsze wartości na początku to te, które definiują hasła i sekrety: SECRET_KEY, hasło do Postgres oraz hasło do Redis. Przykładowy plik jest dostarczany z wartościami zastępczymi, a pozostawienie ich w domyślnej postaci jest najczęstszą przyczyną przejęcia instancji Dify hostowanej samodzielnie. Należy wygenerować rzeczywisty klucz tajny:
openssl rand -base64 42Wklej wygenerowaną wartość do SECRET_KEY i ustaw silne, unikalne wartości dla każdego pola z hasłem w tym pliku.
Krok 2: Uruchomienie
Uruchom stos poleceniem:
docker compose up -dPierwsze uruchomienie pobiera obrazy i inicjuje bazę danych, dlatego należy odczekać około minuty. Sprawdź, czy kontenery działają poprawnie:
docker compose psKażda usługa powinna mieć status running. Dify udostępnia interfejs webowy przez wbudowany kontener nginx, domyślnie na porcie 80. Podczas pierwszej wizyty pod adresem http://YOUR_SERVER/install należy utworzyć konto administratora. Wykonaj tę czynność niezwłocznie, zanim ktokolwiek inny uzyska dostęp do portu, ponieważ do momentu utworzenia konta każda osoba, która załaduje stronę, może przejąć uprawnienia administratora i zawłaszczyć instancję.
Krok 3: Nie wystawiaj usługi bezpośrednio. Zastosuj TLS i firewall
W tym miejscu kończy się większość szybkich instalacji i zaczyna większość incydentów. Wbudowany serwer Nginx w Dify nasłuchuje na porcie 80, przesyłając dane otwartym tekstem na każdym interfejsie. Dane logowania administratora oraz klucze modeli nie powinny być przesyłane przez nieszyfrowany protokół HTTP, a usługi wewnętrzne nie powinny być dostępne z zewnątrz.
Zabezpiecz serwer za pomocą firewalla z domyślną polityką blokowania (default-deny), zezwalając jedynie na ruch SSH oraz HTTP/HTTPS:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enablePamiętaj, że firewall obsługujący tylko IPv4 może pozostawić te same porty otwarte dla IPv6. Jest to luka w firewallu IPv6, na której wpada wielu użytkowników hostujących własne usługi. Upewnij się, że oba stosy sieciowe są filtrowane.
W przypadku TLS najczystszym rozwiązaniem jest powiązanie portu webowego Dify z interfejsem loopback i uruchomienie przed nim reverse proxy z certyfikatem Let’s Encrypt. Dzięki temu jedynym elementem widocznym w publicznym Internecie jest proxy obsługujące HTTPS. Zmienna .env w Dify pozwala na zmianę wystawionego portu; ustaw ją tak, aby wiązała się z 127.0.0.1 i skieruj na ten adres swoje proxy. Zasady wzmacniania bezpieczeństwa agentów opisane w bezpiecznym uruchamianiu agenta AI na VPS mają tu zastosowanie: utrzymuj komponenty na interfejsie loopback, wystawiaj tylko to, co musi być publiczne, i pozwól jednemu, zabezpieczonemu punktowi wejścia obsługiwać TLS. Jeśli interfejs narzędzia jest przeznaczony wyłącznie dla Ciebie i nie wymaga certyfikatu, pomiń proxy i uzyskaj do niego dostęp przez tunel SSH. W ten sposób self-hosting skanera bezpieczeństwa open-kritt pozwala na utrzymanie panelu sterowania na interfejsie loopback i przekierowanie go na laptopa zamiast publikowania w sieci. Jeśli z Dify ma korzystać cały zespół, a nie publiczny Internet, sieć typu overlay rozszerza tę koncepcję poza jeden komputer: udostępnienie prywatnej podsieci serwera w tailnet pozwala każdemu autoryzowanemu urządzeniu na dostęp do narzędzia przez prywatny adres, podczas gdy firewall pozostaje zamknięty dla wszystkiego poza SSH. Jeśli administrujesz serwerem za pomocą agenta programistycznego, a nie ręcznie, ustal zakres jego samodzielnych działań, zanim przekażesz mu uprawnienia. To, w jakim trybie uprawnień pozostawisz Claude Code, decyduje o tym, czy agent zapyta o zgodę przed nadpisaniem .env lub restartem stosu. Jeśli podczas pracy jedna sesja monitoruje logi kontenera, a druga edytuje konfigurację proxy, obie sesje mogą wymieniać się tekstem na tym samym serwerze, co jest wygodniejsze niż kopiowanie danych między terminalami przy każdym restarcie stosu.
Krok 4: Utrzymywanie aktualności
Projekt Dify rozwija się dynamicznie, a aktualizacje zawierają poprawki bezpieczeństwa. Aktualizacja polega na pobraniu nowej wersji i restarcie z poziomu katalogu docker:
git pull
docker compose pull
docker compose up -dPrzed wykonaniem aktualizacji do nowej wersji głównej należy zapoznać się z informacjami o wydaniu. Dify okresowo zmienia schemat .env pomiędzy wydaniami, a brak ustawienia nowej zmiennej może uniemożliwić uruchomienie kontenera.
Krok 5: Tworzenie kopii zapasowych danych niemożliwych do odtworzenia
Dwa elementy na serwerze Dify są niezastąpione: baza danych Postgres, która przechowuje aplikacje, użytkowników i ustawienia, oraz wolumen przechowujący przesłane dokumenty i indeks wektorowy. Oba znajdują się w wolumenach Docker w katalogu docker. Należy tworzyć ich migawki zgodnie z harmonogramem i kopiować je poza serwer. Migawki te zawierają wszystkie klucze modeli oraz przesłane dokumenty w jednym pliku, dlatego należy je zaszyfrować przed wysłaniem poza serwer z tego samego powodu, dla którego kopia zapasowa Vaultwarden okazuje się słabym punktem bezpiecznego serwera haseł. Klucz API modelu można wygenerować ponownie; aplikacji, której budowa zajęła tydzień, nie da się odtworzyć. To samo rozumowanie dotyczy każdego agenta, którego stan musi przetrwać restart maszyny: utrzymanie KiroCrew jako stale działającego kontenera sprowadza się do tworzenia migawek pamięci i harmonogramów, które w przeciwnym razie zniknęłyby przy następnym restarcie.
Jeśli agenci budowani w tym środowisku mają wykraczać poza własne zbiory danych i przeszukiwać sieć, skierowanie ich na własną instancję SearXNG pozwala zachować strumień zapytań na kontrolowanym sprzęcie, choć przed uruchomieniem warto zapoznać się z podatnością na prompt injection. W przypadku bardziej autonomicznego agenta wykonującego kod, zobacz samodzielne hostowanie Agent Zero, a budowa własnego agenta AI na VPS omawia fundamenty wszystkich tych rozwiązań.
FAQ
Jakie są wymagania systemowe do samodzielnego hostowania Dify?
Dify działa jako stos Docker Compose składający się z około pół tuzina kontenerów. Należy zaplanować VPS z co najmniej 2 GB wolnej pamięci RAM, najlepiej 4 GB, a także kilkoma rdzeniami CPU oraz wystarczającą ilością miejsca na dysku na przesłane dokumenty i indeks wektorowy. Obciążenie pamięci wynika z działania bazy danych i magazynu wektorowego, a nie z samego Dify.
Czy bezpieczne jest wystawianie Dify bezpośrednio na porcie 80?
Nie. Dołączony serwer WWW Dify nasłuchuje na zwykłym HTTP, a obsługuje on logowanie administratora oraz klucze API modeli. Należy umieścić przed nim reverse proxy z certyfikatem Let’s Encrypt, powiązać port Dify z interfejsem loopback i pozwolić, aby tylko proxy HTTPS było widoczne w Internecie. Należy to połączyć z zaporą sieciową o domyślnej polityce odrzucania połączeń (default-deny), obejmującą zarówno IPv4, jak i IPv6.
Jak zaktualizować samodzielnie hostowane Dify?
Z poziomu katalogu docker należy uruchomić git pull, a następnie docker compose pull i docker compose up -d, aby pobrać nowe obrazy i zrestartować usługę. Wcześniej należy zapoznać się z informacjami o wydaniu (release notes), ponieważ Dify czasami dodaje nowe zmienne .env między wersjami, a ich brak może uniemożliwić uruchomienie kontenera.
Co należy zrobić w pierwszej kolejności po zainstalowaniu Dify?
Należy odwiedzić /install i niezwłocznie utworzyć konto administratora. Dopóki to konto nie istnieje, każdy, kto uzyska dostęp do strony, może je przejąć. Konfigurację należy przeprowadzić w momencie, gdy kontenery są w stanie gotowości, jeszcze przed otwarciem zapory sieciowej na świat.