วิธีติดตั้ง Dify บน VPS ด้วย Docker Compose
คู่มือติดตั้ง Dify ผ่าน Docker Compose โดยใช้ 6 containers แนะนำให้ใช้ RAM อย่างน้อย 4 GB และต้องตั้งค่า .env ก่อนเริ่มรันระบบเพื่อความปลอดภัยของข้อมูล
Dify คืออะไร และสิ่งที่คุณกำลังจะติดตั้งคืออะไร
Dify คือแพลตฟอร์มแบบ self-host สำหรับสร้างแอปพลิเคชันบนโมเดลภาษาขนาดใหญ่ (large language models) คุณจะได้ใช้งาน web interface สำหรับออกแบบแอปพลิเคชันแชท, agent และ retrieval pipelines, มี API สำหรับเรียกใช้งานผ่านโค้ดของคุณเอง และมีพื้นที่ส่วนกลางสำหรับจัดการ prompt, dataset และ model keys เครื่องมือนี้เหมาะสำหรับทีมขนาดเล็กที่ต้องการให้ทุกคนสร้างงานบนฐานข้อมูลส่วนตัวที่ใช้ร่วมกัน แทนที่จะกระจาย API keys ไว้ตามสคริปต์ต่างๆ
การรันระบบด้วยตนเองหมายถึงการรันส่วนประกอบหลายส่วน Dify มาในรูปแบบของ Docker containers ได้แก่: API server, background worker, web frontend, Postgres database, Redis cache และ vector database ซึ่งทั้งหมดเชื่อมต่อกันด้วย Docker Compose แม้จะมีส่วนประกอบมากกว่าไฟล์ binary เพียงไฟล์เดียว แต่ Compose จะจัดการเรื่องการเชื่อมต่อให้ และ VPS ที่มี RAM เหลือว่างประมาณ 2 GB สามารถรันระบบได้อย่างราบรื่น
เนื่องจาก Dify เก็บรักษา model API keys และเอกสารส่วนตัวที่คุณโหลดไว้เพื่อใช้ในการ retrieval ดังนั้นควรดูแลเครื่องที่รันระบบเสมือนเป็นเครื่องที่เก็บข้อมูลสำคัญตั้งแต่เริ่มใช้งาน คู่มือนี้จะสอนวิธีติดตั้งและวิธีเพิ่มความปลอดภัย (harden) ให้กับระบบในลักษณะเดียวกับบริการอื่นๆ ที่ต้องเก็บรักษาความลับ (secrets)
Prerequisites
คุณต้องมี VPS ที่รัน Ubuntu 24.04 โดยติดตั้ง Docker และ Docker Compose plugin ไว้แล้ว และต้องมีผู้ใช้งานที่มีสิทธิ์ sudo หรือเป็นสมาชิกของกลุ่ม docker หากคุณยังไม่เคยใช้งาน Docker สามารถอ่าน พื้นฐานของ Docker Compose บน VPS เพื่อดูวิธีการติดตั้งและคำสั่งหลักที่คู่มือนี้ใช้ นอกจากนี้ควรมีชื่อโดเมนที่ชี้มายังเซิร์ฟเวอร์ เนื่องจากคุณควรใช้ TLS ในการเชื่อมต่อกับ Dify แทนการใช้ IP address เพียงอย่างเดียว
Step 1: Get Dify and its Compose files
Dify เก็บการตั้งค่า Docker ไว้ใน repository หลัก ให้ทำการ clone และเข้าไปที่ directory docker:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .envไฟล์ .env คือการตั้งค่าทั้งหมด โปรดอ่านไฟล์นี้ก่อนเริ่มดำเนินการ ค่าที่สำคัญที่สุดคือค่าที่ใช้กำหนดรหัสผ่านและ secrets ได้แก่ SECRET_KEY, รหัสผ่าน Postgres และรหัสผ่าน Redis ไฟล์ตัวอย่างจะมาพร้อมกับค่า placeholder ซึ่งการปล่อยทิ้งไว้แบบนั้นเป็นสาเหตุที่พบบ่อยที่สุดที่ทำให้ Dify แบบ self-hosted ถูกเจาะระบบได้ ให้สร้าง secret key ของจริงขึ้นมา:
openssl rand -base64 42นำค่านั้นไปวางใน SECRET_KEY และกำหนดค่าที่แข็งแกร่งและไม่ซ้ำกันสำหรับทุกช่องรหัสผ่านในไฟล์
Step 2: Start it
เริ่มการทำงานของ stack:
docker compose up -dการรันครั้งแรกจะมีการดึง images หลายตัวและทำการ initialize database โปรดรอสักครู่ ตรวจสอบว่า container ทำงานปกติหรือไม่:
docker compose psทุก service ควรจะอ่านค่าจาก running ได้ Dify ให้บริการ web interface ผ่าน nginx container ที่มาพร้อมกับระบบโดยใช้ port 80 เป็นค่าเริ่มต้น เมื่อคุณเข้าใช้งาน http://YOUR_SERVER/install ครั้งแรก คุณต้องสร้างบัญชี admin ให้ดำเนินการทันทีโดยไม่ต้องรอ เพราะหากบัญชีนี้ยังไม่ถูกสร้าง ใครก็ตามที่เข้าถึงหน้าเว็บได้จะสามารถยึดบัญชีนั้นและควบคุม instance ของคุณได้
Step 3: Do not expose it raw. Put TLS and a firewall in front
นี่คือจุดที่การติดตั้งแบบรวดเร็วส่วนใหญ่หยุดลง และเป็นจุดเริ่มต้นของอุบัติการณ์ด้านความปลอดภัย nginx ของ Dify จะฟัง (listen) บน port 80 แบบไม่มีการเข้ารหัส (in the clear) ในทุก interface คุณไม่ควรให้การ login ของ admin และ model keys วิ่งผ่าน HTTP ปกติ และไม่ควรเปิดให้บริการภายในเข้าถึงได้จากภายนอก
จำกัดการเข้าถึงเครื่องด้วย firewall แบบ default-deny ที่อนุญาตเฉพาะ SSH และ web traffic เท่านั้น:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableโปรดจำไว้ว่า firewall ที่ครอบคลุมเฉพาะ IPv4 อาจปล่อยให้ port เดียวกันเปิดทิ้งไว้ใน IPv6 ซึ่งเป็น ช่องโหว่ของ IPv6 firewall ที่ทำให้ผู้ใช้งาน self-host จำนวนมากประสบปัญหา ตรวจสอบให้แน่ใจว่าทั้งสอง stack ได้รับการกรองแล้ว
สำหรับการทำ TLS วิธีที่สะอาดที่สุดคือการผูก web port ของ Dify เข้ากับ loopback และรัน reverse proxy ที่ใช้ใบรับรองจาก Let's Encrypt ไว้ด้านหน้า เพื่อให้สิ่งเดียวที่ติดต่อกับอินเทอร์เน็ตสาธารณะคือ proxy ที่สื่อสารผ่าน HTTPS เท่านั้น คุณสามารถเปลี่ยน port ที่เปิดใช้งานได้ผ่าน .env ของ Dify โดยตั้งค่าให้ผูกกับ 127.0.0.1 และชี้ proxy ของคุณมาที่นั่น แนวคิดการเพิ่มความปลอดภัยให้ agent ใน การรัน AI agent อย่างปลอดภัยบน VPS สามารถนำมาใช้ที่นี่ได้เช่นกัน: ให้ส่วนประกอบต่างๆ รันบน loopback, เปิดเผยเฉพาะสิ่งที่จำเป็นต้องเป็นสาธารณะ และใช้ประตูหน้าหน้าเดียวที่ผ่านการปรับแต่งความปลอดภัยและสื่อสารด้วย TLS
Step 4: Keep it patched
Dify มีการพัฒนาอย่างรวดเร็ว และการอัปเดตจะรวมถึงการแก้ไขด้านความปลอดภัย การอัปเดตทำได้โดยการ pull และ restart จาก directory docker:
git pull
docker compose pull
docker compose up -dโปรดอ่าน release notes ก่อนการอัปเดตข้ามเวอร์ชันหลัก เนื่องจากบางครั้ง Dify มีการเปลี่ยน schema ของ .env ระหว่างเวอร์ชัน และตัวแปรใหม่ที่คุณยังไม่ได้ตั้งค่าอาจทำให้ container ไม่สามารถเริ่มทำงานได้
Step 5: Back up what you cannot regenerate
มีสองสิ่งที่ในเครื่อง Dify ที่ไม่สามารถสร้างใหม่ได้: Postgres database ซึ่งเก็บข้อมูลแอปพลิเคชัน, ผู้ใช้งาน และการตั้งค่า และ volume ที่เก็บเอกสารที่อัปโหลดและ vector index ทั้งคู่เก็บอยู่ใน Docker volumes ภายใต้ directory docker ให้ทำการ snapshot ตามกำหนดการ และคัดลอก snapshot ออกจากเซิร์ฟเวอร์ Model API key สามารถออกใหม่ได้ แต่แอปพลิเคชันที่คุณใช้เวลาสร้างมาเป็นสัปดาห์ไม่สามารถทำได้
สำหรับ 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 ที่มี RAM ว่างอย่างน้อย 2 GB (แนะนำ 4 GB) พร้อมด้วย CPU 2 cores และพื้นที่ดิสก์ที่เพียงพอสำหรับเอกสารที่อัปโหลดและ vector index ภาระด้านหน่วยความจำ (memory pressure) มาจาก database และ vector store ไม่ใช่จากตัว Dify เอง
Is it safe to expose Dify directly on port 80?
ไม่ปลอดภัย เนื่องจาก web server ที่มาพร้อมกับ Dify สื่อสารผ่าน HTTP ปกติ ซึ่งจะเข้าถึงหน้า login ของ admin และ model API keys ของคุณ ควรใช้ reverse proxy ที่มีใบรับรอง Let's Encrypt ไว้ด้านหน้า, ผูก port ของ Dify เข้ากับ loopback และให้เฉพาะ HTTPS proxy เท่านั้นที่ติดต่อกับอินเทอร์เน็ต พร้อมทั้งใช้ firewall แบบ default-deny ที่ครอบคลุมทั้ง IPv4 และ IPv6
How do I update a self-hosted Dify?
จาก directory docker ให้รันคำสั่ง git pull จากนั้นรัน docker compose pull และ docker compose up -d เพื่อดึง images ใหม่และ restart ระบบ โปรดอ่าน release notes ก่อน เนื่องจากบางครั้ง Dify มีการเพิ่มตัวแปร .env ใหม่ระหว่างเวอร์ชัน และหากขาดตัวแปรดังกล่าวอาจทำให้ container ไม่สามารถทำงานได้
What is the first thing to do after installing Dify?
ให้เข้าใช้งาน /install และสร้างบัญชี admin ทันที หากบัญชีนี้ยังไม่ถูกสร้าง ใครก็ตามที่เข้าถึงหน้าเว็บได้จะสามารถยึดบัญชีนั้นได้ ให้ดำเนินการทันทีที่ container ทำงานปกติ และก่อนที่คุณจะเปิด firewall ให้เข้าถึงได้จากทั่วโลก