Cara Self-Host Dify di VPS dengan Docker Compose
Dify menjalankan enam container, jadi siapkan RAM 4 GB. Ganti semua secret di .env sebelum boot, lalu buat akun admin di /install sebelum orang lain melakukannya.
Apa itu Dify dan apa yang Anda setujui untuk dijalankan
Dify adalah platform yang dapat di-hosting sendiri untuk membangun aplikasi berbasis large language model. Anda mendapatkan antarmuka web untuk merancang aplikasi chat, agent, dan pipeline retrieval, API untuk memanggilnya dari kode Anda sendiri, serta satu tempat untuk mengelola prompt, dataset, dan model key. Tool ini cocok untuk tim kecil yang ingin membangun aplikasi menggunakan satu basis privat bersama, bukan menyebarkan API key di berbagai script.
Menjalankannya sendiri berarti menjalankan beberapa komponen yang saling bergantung. Dify dirilis sebagai sekumpulan container Docker: server API, worker latar belakang, frontend web, database Postgres, cache Redis, dan database vektor, yang semuanya dihubungkan dengan Docker Compose. Ini lebih dari satu binary, tetapi Compose menangani koneksi antarkomponen tersebut. VPS dengan sisa RAM beberapa gigabyte dapat menjalankannya dengan baik. Jika VPS tersebut juga akan menjalankan layanan lain, tentukan ukurannya berdasarkan angka hasil pengukuran, bukan angka yang diiklankan, karena batas minimum RAM yang sebenarnya untuk PhotoPrism dan Immich jauh di atas persyaratan minimum yang dipublikasikan. Server foto yang berbagi VPS akan lebih dahulu menghabiskan sumber daya database dan penyimpanan vektor Dify. Persaingan CPU menimbulkan masalah yang sama: library Jellyfin yang diubah tampilannya menjadi toko video era 90-an hampir tidak memerlukan sumber daya saat hanya digunakan untuk menelusuri artwork. Namun, begitu seseorang memulai transcoding, antrean worker Dify akan tertahan di belakangnya. Keuntungannya, jumlah container Dify tetap sama, berapa pun jumlah aplikasi yang Anda bangun di atasnya. Pola biayanya lebih ringan daripada OpenBot, tempat setiap rekan kerja AI memiliki container dan browser sendiri, dan setiap perekrutan baru kembali menaikkan batas minimum RAM.
Karena Dify menyimpan model API key Anda dan, sering kali, dokumen privat yang Anda muat untuk retrieval, perlakukan server tempat Dify berjalan sebagai sistem sensitif sejak awal. Panduan ini memasangnya, lalu mengamankannya seperti service lain yang menyimpan secret.
Prasyarat
Anda memerlukan VPS yang menjalankan Ubuntu 24.04 dengan Docker dan plugin Docker Compose yang telah diinstal, serta pengguna dengan sudo atau yang merupakan anggota grup docker. Jika Docker masih baru bagi Anda, dasar-dasar Docker Compose pada VPS menjelaskan instalasi dan perintah inti yang digunakan dalam panduan ini. Sebaiknya Anda memiliki nama domain yang diarahkan ke server, karena Dify sebaiknya menggunakan TLS, bukan hanya alamat IP.
Langkah 1: Dapatkan Dify dan file Compose-nya
Dify menyimpan konfigurasi Docker-nya di repositori utama. Clone repositori tersebut, lalu masuk ke direktori docker:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .envFile .env berisi seluruh konfigurasi. Baca file tersebut sebelum menjalankan apa pun. Nilai yang harus diperhatikan terlebih dahulu adalah nilai yang menetapkan kata sandi dan secret: SECRET_KEY, kata sandi Postgres, dan kata sandi Redis. File contoh berisi nilai placeholder. Membiarkan nilai tersebut seperti bawaan adalah penyebab paling umum server Dify yang di-hosting sendiri mengalami breach. Buat secret key yang sebenarnya:
openssl rand -base64 42Tempelkan nilai tersebut ke SECRET_KEY, lalu tetapkan nilai yang kuat dan unik untuk setiap field kata sandi dalam file tersebut.
Langkah 2: Jalankan
Jalankan stack:
docker compose up -dProses pertama akan mengunduh beberapa image dan menginisialisasi database. Tunggu sekitar satu menit. Pastikan container dalam kondisi sehat:
docker compose psSetiap service harus membaca running. Dify menyediakan antarmuka web melalui container nginx bawaan pada port 80 secara default. Saat pertama kali membuka http://YOUR_SERVER/install, buat akun admin. Lakukan segera sebelum pihak lain dapat mengakses port tersebut. Sebelum akun itu dibuat, siapa pun yang memuat halaman tersebut dapat mengambil alih akun dan memiliki instance Anda.
Langkah 3: Jangan mengeksposnya secara langsung. Tempatkan TLS dan firewall di depannya
Di sinilah sebagian besar instalasi cepat berhenti dan sebagian besar insiden dimulai. nginx bawaan Dify mendengarkan pada port 80 tanpa enkripsi, di semua interface. Jangan biarkan login admin dan key model Anda dikirim melalui HTTP biasa. Jangan biarkan service internal dapat dijangkau dari luar.
Amankan server dengan firewall default-deny yang hanya mengizinkan SSH dan trafik web:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableIngat, firewall yang hanya mencakup IPv4 dapat membiarkan port yang sama tetap terbuka pada IPv6. Ini adalah celah firewall IPv6 yang sering tidak disadari pengguna self-hosting. Pastikan kedua stack jaringan difilter.
Untuk TLS, cara paling rapi adalah mengikat port web Dify ke loopback dan menjalankan reverse proxy dengan sertifikat Let's Encrypt di depannya. Dengan demikian, satu-satunya komponen yang berada di Internet publik adalah proxy yang berkomunikasi melalui HTTPS. .env milik Dify memungkinkan Anda mengubah port yang diekspos. Atur agar port tersebut terikat pada 127.0.0.1, lalu arahkan proxy ke alamat itu. Gagasan penguatan keamanan agent dalam menjalankan AI agent dengan aman pada VPS juga berlaku di sini: pertahankan komponen yang berubah-ubah pada loopback, ekspos hanya yang harus publik, dan gunakan satu pintu masuk yang diperkuat untuk menangani TLS. Jika antarmuka suatu tool hanya digunakan oleh Anda dan sama sekali tidak memerlukan sertifikat, lewati proxy dan akses melalui SSH tunnel. Pendekatan ini digunakan dalam self-hosting pemindai keamanan open-kritt, yang mengikat dashboard ke loopback lalu meneruskannya ke laptop Anda, bukan memublikasikannya. Jika seluruh tim memerlukan Dify tetapi tidak memerlukannya di Internet publik, overlay network dapat mengembangkan pendekatan ini melampaui satu laptop: mengiklankan subnet privat server ke tailnet Anda memungkinkan setiap perangkat yang disetujui mengakses builder melalui alamat privat, sementara firewall tetap menolak semua koneksi selain SSH. Jika Anda mengelola server ini melalui coding agent, bukan secara manual, tentukan terlebih dahulu sejauh mana agent tersebut boleh bekerja tanpa pengawasan sebelum Anda memberinya akses penuh, karena mode izin yang Anda tetapkan untuk Claude Code menentukan apakah agent akan berhenti dan meminta konfirmasi sebelum menulis ulang .env atau me-restart stack. Jika satu sesi memantau log container sementara sesi lain mengedit konfigurasi proxy, kedua sesi tersebut dapat saling mengirim teks pada server yang sama. Dengan demikian, Anda tidak perlu menyalin output antar-terminal setiap kali me-restart stack.
Langkah 4: Selalu lakukan patch
Dify berkembang cepat, dan pembaruan mencakup perbaikan keamanan. Untuk memperbarui, lakukan pull dan restart dari direktori docker:
git pull
docker compose pull
docker compose up -dBaca catatan rilis sebelum melakukan lompatan versi mayor, karena Dify terkadang mengubah skema .env antar-rilis, dan variabel baru yang belum Anda tetapkan dapat menyebabkan container gagal dimulai.
Langkah 5: Cadangkan data yang tidak dapat dibuat ulang
Ada dua hal pada server Dify yang tidak dapat digantikan: database Postgres, yang menyimpan aplikasi, pengguna, dan pengaturan Anda, serta volume yang menyimpan dokumen yang diunggah dan indeks vektor. Keduanya berada di dalam Docker volumes pada direktori docker. Buat snapshot secara berkala, lalu salin snapshot tersebut ke luar server. API key model dapat diterbitkan ulang, tetapi aplikasi yang Anda bangun selama seminggu tidak dapat dibuat ulang. Pertimbangan yang sama berlaku untuk setiap agent yang statusnya harus tetap ada setelah mesin tempatnya berjalan tidak tersedia: menjaga KiroCrew tetap berjalan sebagai container yang selalu aktif berarti membuat snapshot memori dan jadwal yang jika tidak akan hilang saat reboot berikutnya.
Jika Anda ingin agent yang dibuat di sini mengakses dataset Anda dan menelusuri web secara langsung, mengarahkan agent ke instance SearXNG yang di-host sendiri membuat aliran kueri tetap berada pada hardware yang Anda kendalikan. Namun, pelajari terlebih dahulu permukaan serangan prompt injection yang terbuka sebelum mengaktifkannya. Untuk agent yang lebih otonom dan dapat menjalankan kode, lihat meng-host Agent Zero sendiri. Untuk dasar-dasar yang mendasari semuanya, lihat membangun AI agent sendiri pada VPS.
FAQ
Apa persyaratan sistem untuk melakukan self-hosting Dify?
Dify berjalan sebagai stack Docker Compose yang terdiri atas sekitar setengah lusin container. Karena itu, siapkan VPS dengan RAM kosong minimal 2 GB, idealnya 4 GB, serta beberapa core CPU dan ruang disk yang cukup untuk dokumen yang diunggah dan indeks vektor. Beban penggunaan memori berasal dari database dan vector store, bukan dari Dify itu sendiri.
Apakah aman mengekspos Dify secara langsung pada port 80?
Tidak. Web server bawaan Dify mendengarkan HTTP biasa dan menangani login admin serta API key model Anda. Tempatkan reverse proxy dengan sertifikat Let’s Encrypt di depannya, bind port milik Dify sendiri ke loopback, dan biarkan hanya proxy HTTPS yang menghadap Internet. Terapkan juga firewall default-deny yang mencakup IPv4 dan IPv6.
Bagaimana cara memperbarui Dify yang di-hosting sendiri?
Dari direktori docker, jalankan git pull, lalu docker compose pull dan docker compose up -d untuk mengambil image baru dan melakukan restart. Baca release notes terlebih dahulu karena Dify terkadang menambahkan variabel .env baru di antara versi. Variabel yang tidak diisi dapat menyebabkan container gagal berjalan.
Apa hal pertama yang harus dilakukan setelah menginstal Dify?
Buka /install dan segera buat akun admin. Sebelum akun tersebut dibuat, siapa pun yang dapat mengakses halaman itu dapat mengambil alihnya. Selesaikan konfigurasi segera setelah container berstatus sehat dan sebelum membuka firewall untuk akses dari Internet.