Dify se poate instala pe infrastructura proprie (laptop, server on-premises sau VM în cloud); documentația oficială recomandă să începi cu Docker Compose. Codul este pe GitHub, în langgenius/dify, sub o licență Apache 2.0 modificată. Folosirea comercială este permisă, inclusiv ca backend pentru alte aplicații, dar două situații cer o licență comercială de la LangGenius: operarea unui mediu multi-tenant din codul sursă (un tenant înseamnă un workspace) și eliminarea sau modificarea logo-ului și a informațiilor de copyright din consola sau aplicațiile Dify. Pentru Kubernetes, SSO și administrarea mai multor workspace-uri există Dify Enterprise.
Cerințe minime: CPU de cel puțin 2 nuclee și 4 GiB RAM. Pe Linux ai nevoie de Docker 19.03+ și Docker Compose 2.24.0+; pe macOS 10.14+ și pe Windows cu WSL 2, de Docker Desktop cu Compose 2.24.0+, iar mașina virtuală Docker trebuie să aibă cel puțin 2 vCPU și 8 GiB de memorie. Pe Windows, ține codul sursă și datele montate în containere în sistemul de fișiere Linux (WSL), nu în cel Windows.
docker compose up -d pornește 7 servicii de bază (api, api_websocket, worker, worker_beat, web, plugin_daemon, agent_backend), 8 componente (weaviate, db_postgres, redis, nginx, ssrf_proxy, agent_ssrf_proxy, sandbox, local_sandbox) și sarcina unică init_permissions, care setează permisiunile și se oprește (starea Exited este normală). API-ul este o aplicație Flask rulată cu Gunicorn, iar sarcinile de fundal rulează în worker-i Celery. Din 1.18.0, agent_backend și local_sandbox nu pornesc fără DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN.
Baza de date implicită este PostgreSQL (DB_TYPE acceptă și mysql, oceanbase, seekdb), iar vector store-ul implicit este Weaviate (VECTOR_STORE, cu peste 30 de opțiuni); COMPOSE_PROFILES pornește automat containerul potrivit. Datele stau în directoare montate din docker/volumes/ (baza de date, fișierele încărcate, Weaviate, Redis, pluginurile), deci rămân după docker compose down. Modelele locale se conectează prin pluginuri de furnizor precum Ollama, LocalAI sau Xinference. Pentru o rețea fără internet, documentația menționează golirea CHECK_UPDATE_URL și un mirror PyPI (PIP_MIRROR_URL) pentru dependențele pluginurilor; pluginurile se instalează atunci din fișiere .difypkg.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
docker compose up -d / ps |
Pornește stiva în fundal și verifică starea: fiecare container trebuie să fie Up sau healthy, cu excepția init_permissions. |
docker/.env |
Valorile esențiale, create din .env.example. Au prioritate față de fișierele din docker/envs/. |
docker/envs/ |
Șabloane .env.example pentru setări opționale (vector store, stocare, servicii); copiezi șablonul fără .example. |
DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN |
Obligatoriu din 1.18.0, generat cu openssl rand -base64 32, setat doar în docker/.env. |
SECRET_KEY |
Cheia de semnare și criptare; înlocuiește valoarea din .env.example înainte de prima pornire (openssl rand -base64 42). |
DIFY_AGENT_SERVER_SECRET_KEY / DIFY_AGENT_API_TOKEN |
Vin cu valori de dezvoltare publice; în producție pui valori aleatoare proprii. |
INIT_PASSWORD |
Parolă cerută de /install înainte de crearea contului de administrator, utilă pe un server expus. |
VECTOR_STORE / DB_TYPE |
Vector store-ul (implicit weaviate) și baza de date (implicit postgresql). |
EXPOSE_NGINX_PORT / NGINX_HTTPS_ENABLED |
Portul HTTP al gazdei (implicit 80) și activarea HTTPS în Nginx. |
http://IP/install |
Pagina de inițializare pentru contul de administrator; după aceea te autentifici la http://IP. |
Exemple practice și scenarii reale
Exemplul 1: Instalarea ultimei versiuni pe un server Linux
Comanda de clonare cere git, curl și jq. Dacă primești Remote branch null not found (limita de cereri a API-ului GitHub), clonează cu versiunea explicită: git clone --branch 1.18.0 https://github.com/langgenius/dify.git.
git clone --branch "$(curl -s https://api.github.com/repos/langgenius/dify/releases/latest | jq -r .tag_name)" https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
openssl rand -base64 32
# pune rezultatul în .env: DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN=<valoarea>
docker compose version # trebuie 2.24.0 sau mai nou
docker compose up -d
docker compose ps
# browser: http://IP-server/install, apoi http://IP-server
Exemplul 2: Secrete proprii pentru producție
openssl rand -base64 42 # SECRET_KEY
python3 -c "import secrets; print(secrets.token_urlsafe(32))" # DIFY_AGENT_SERVER_SECRET_KEY
openssl rand -base64 32 # DIFY_AGENT_API_TOKEN
# le treci în docker/.env, apoi:
docker compose down
docker compose up -d
Exemplul 3: Actualizare la 1.18.0 cu Docker Compose
Pașii vin din notele de release 1.18.0. Fă backup înainte (baza de date, vector store, fișierele încărcate, fișierele .env). Dacă ai modificat docker-compose.yaml, aplică modificările pe fișierul nou.
cp -r dify "dify.bak.$(date +%Y%m%d%H%M%S)"
cd dify/docker
docker compose stop -t -1
git fetch --tags
git checkout 1.18.0
# compară fiecare .env.example cu .env și adaugă variabilele noi
docker compose pull
docker compose up -d
Greșeli frecvente și capcane
- Lași în producție valorile din
.env.examplepentruSECRET_KEYși pentru secretele Agent. Sunt publice în repo. Schimbarea ulterioară aSECRET_KEYdeloghează toți utilizatorii, invalidează URL-urile de fișiere și face ilizibile credențialele OAuth ale pluginurilor, așa că o setezi înainte de prima pornire. - Pornești 1.18.0 fără
DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKENsau îl pui doar într-un fișier dindocker/envs/. Agent backend și sandbox-ul repornesc în buclă. - Expui serverul pe internet fără
INIT_PASSWORD. Primul care deschide/installcreează contul de administrator. - Ștergi
docker/volumes/crezând că sunt fișiere temporare. Acolo stau baza de date, fișierele încărcate, indexul vectorial și pluginurile.
Întrebări & Exemple practice:
Instalarea Dify self-hosted cu Docker Compose (Community Edition)Ai o întrebare despre Instalarea Dify self-hosted cu Docker Compose (Community Edition) sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.