نصب Dify روی VPS با Docker Compose
برای اجرای Dify با Docker Compose به حداقل 4 GB RAM نیاز دارید. حتماً قبل از اجرا، تمام Secretها را در فایل .env تغییر دهید و در مسیر /install حساب بسازید.
Dify چیست و چه چیزی را برای اجرا در نظر گرفتهاید
Dify یک پلتفرم با قابلیت self-host برای ساخت اپلیکیشنها بر پایه مدلهای زبانی بزرگ (LLM) است. شما یک رابط کاربری وب برای طراحی اپلیکیشنهای چت، Agentها و خط لوله بازیابی (retrieval pipelines)، یک API برای فراخوانی آنها از طریق کد خودتان، و یک محیط واحد برای مدیریت پرامپتها، دیتاستها و کلیدهای مدل خواهید داشت. این ابزاری است که یک تیم کوچک برای این استفاده میکند که همه بر روی یک پایگاه مشترک و خصوصی کار کنند، به جای اینکه کلیدهای API را در اسکریپتهای مختلف پراکنده کنند.
اجرای خودکار آن به معنای اجرای چندین بخش متحرک است. Dify به صورت مجموعهای از Docker containers عرضه میشود: یک API server، یک background worker، یک web frontend، یک پایگاه داده Postgres، یک حافظه موقت Redis و یک پایگاه داده برداری (vector database) که همگی با Docker Compose به هم متصل شدهاند. این مجموعه فراتر از یک فایل binary ساده است، اما Compose وظیفه اتصال آنها را بر عهده دارد و یک VPS با چند گیگابایت RAM آزاد، آن را به راحتی اجرا میکند.
از آنجایی که Dify کلیدهای API مدل شما و اغلب اسناد خصوصی که برای بازیابی بارگذاری کردهاید را نگه میدارد، از همان دقیقه اول با سروری که روی آن اجرا میشود به عنوان یک سیستم حساس برخورد کنید. این راهنما ابتدا آن را نصب میکند و سپس مانند هر سرویس دیگری که اطلاعات حساس دارد، آن را ایمنسازی (harden) میکند.
Prerequisites
شما به یک VPS با سیستمعامل Ubuntu 24.04 نیاز دارید که Docker و افزونه Docker Compose روی آن نصب شده باشد، و کاربری با سطح دسترسی sudo یا عضو گروه docker داشته باشید. اگر با Docker آشنایی ندارید، the basics of Docker Compose on a VPS شامل مراحل نصب و دستورات اصلی است که این راهنما بر اساس آنها نوشته شده است. داشتن یک نام دامنه که به سرور متصل شده باشد بسیار مفید است، زیرا شما به جای یک IP خام، به TLS در جلوی Dify نیاز خواهید داشت.
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. فایل نمونه با مقادیر جایگزین (placeholder) عرضه میشود و رها کردن آنها به همان حالت، رایجترین دلیل هک شدن Difyهای self-hosted است. یک کلید مخفی واقعی تولید کنید:
openssl rand -base64 42آن را در SECRET_KEY جایگذاری کنید و برای هر فیلد رمز عبور در فایل، یک مقدار قوی و منحصر به فرد تعیین کنید.
Step 2: Start it
مجموعه را بالا بیاورید:
docker compose up -dاجرای اول، چندین image را دانلود و پایگاه داده را مقداردهی اولیه میکند، بنابراین کمی صبر کنید. بررسی کنید که containerها در وضعیت healthy باشند:
docker compose psهر سرویس باید running را بخواند. Dify رابط کاربری وب خود را از طریق یک container nginx داخلی روی پورت 80 به صورت پیشفرض ارائه میدهد. در اولین بازدید از http://YOUR_SERVER/install، حساب کاربری admin را ایجاد کنید. این کار را بلافاصله و قبل از اینکه هر چیز دیگری به پورت دسترسی پیدا کند انجام دهید؛ زیرا تا زمانی که آن حساب کاربری وجود نداشته باشد، هر کسی که صفحه را بارگذاری کند میتواند آن را تصاحب کرده و مالک instance شما شود.
Step 3: Do not expose it raw. Put TLS and a firewall in front
اینجاست که اکثر نصبهای سریع متوقف میشوند و اکثر حوادث امنیتی شروع میشوند. nginx خودِ Dify روی پورت 80 و بدون رمزنگاری روی تمام رابطها گوش میدهد. شما نمیخواهید اطلاعات ورود به مدیریت و کلیدهای مدل شما از طریق HTTP ساده ارسال شوند، و نمیخواهید سرویسهای داخلی از بیرون قابل دسترسی باشند.
سرور را با یک فایروال در حالت default-deny که فقط اجازه ترافیک 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 firewall gap است که باعث گرفتار شدن بسیاری از کاربران self-host میشود. تایید کنید که هر دو پشته (stack) فیلتر شدهاند.
برای TLS، تمیزترین مسیر این است که پورت وب Dify را به loopback متصل کنید و یک reverse proxy با گواهی Let's Encrypt در جلوی آن اجرا کنید، به طوری که تنها چیزی که در اینترنت عمومی وجود دارد، پروکسی باشد که HTTPS صحبت میکند. پارامتر .env در Dify به شما اجازه میدهد پورت نمایان شده را تغییر دهید؛ آن را روی 127.0.0.1 تنظیم کنید و پروکسی خود را به آن آدرس هدایت کنید. ایدههای مربوط به ایمنسازی Agent در running an AI agent safely on a VPS در اینجا نیز کاربرد دارند: بخشهای متحرک را روی loopback نگه دارید، فقط آنچه باید عمومی باشد را نمایش دهید، و اجازه دهید یک درِ ورودی ایمنسازی شده، TLS را مدیریت کند.
Step 4: Keep it patched
Dify با سرعت پیشرفت میکند و بهروزرسانیها شامل اصلاحات امنیتی هستند. بهروزرسانی شامل یک pull و یک restart از دایرکتوری docker است:
git pull
docker compose pull
docker compose up -dقبل از پرش به یک نسخه اصلی (major version)، یادداشتهای انتشار (release notes) را بخوانید، زیرا Dify گاهی اوقات بین نسخهها، schema مربوط به .env را تغییر میدهد و یک متغیر جدید که تنظیم نکردهاید میتواند مانع از بالا آمدن یک container شود.
Step 5: Back up what you cannot regenerate
دو چیز در یک سیستم Dify غیرقابل جایگزین هستند: پایگاه داده Postgres که اپلیکیشنها، کاربران و تنظیمات شما را نگه میدارد، و volume که اسناد بارگذاری شده و ایندکس برداری را ذخیره میکند. هر دو در زیر Docker volumes در دایرکتوری docker قرار دارند. از آنها در فواصل زمانی مشخص snapshot بگیرید و snapshotها را از سرور کپی کنید. یک کلید API مدل را میتوان مجدداً صادر کرد؛ اما اپلیکیشنی که یک هفته برای ساخت آن وقت صرف کردهاید، قابل بازسازی نیست.
برای یک Agent خودگردانتر که کد اجرا میکند، 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 stack با حدود نیم دوجین container اجرا میشود، بنابراین برای یک VPS با حداقل 2 GB RAM آزاد، و در حالت ایدهآل 4 GB، به علاوه چند هسته CPU و فضای دیسک کافی برای اسناد بارگذاری شده و ایندکس برداری برنامهریزی کنید. فشار حافظه (memory pressure) از سمت پایگاه داده و ذخیرهساز برداری است، نه از خود Dify.
Is it safe to expose Dify directly on port 80?
خیر. وبسرور داخلی Dify روی HTTP ساده گوش میدهد و در مقابل اطلاعات ورود مدیریت و کلیدهای API مدل شما قرار دارد. یک reverse proxy با گواهی Let's Encrypt در جلوی آن قرار دهید، پورت خودِ Dify را به loopback متصل کنید، و اجازه دهید فقط پروکسی HTTPS با اینترنت روبرو شود. این کار را با یک فایروال در حالت default-deny که هم IPv4 و هم IPv6 را پوشش میدهد، همراه کنید.
How do I update a self-hosted Dify?
از دایرکتوری docker، دستور git pull را اجرا کنید، سپس docker compose pull و docker compose up -d را برای دریافت تصاویر جدید و ریاستارت اجرا کنید. ابتدا یادداشتهای انتشار را بخوانید، زیرا Dify گاهی اوقات بین نسخهها متغیرهای .env جدیدی اضافه میکند و نبود یکی از آنها میتواند مانع از بالا آمدن یک container شود.
What is the first thing to do after installing Dify?
بلافاصله به /install بروید و حساب کاربری admin را ایجاد کنید. تا زمانی که آن حساب کاربری وجود نداشته باشد، هر کسی که به صفحه دسترسی داشته باشد میتواند آن را تصاحب کند. به محض اینکه containerها در وضعیت healthy بودند و قبل از اینکه فایروال را برای کل جهان باز کنید، آن را تنظیم کنید.