Jellyfin Media Server บน VPS Linux

ติดตั้ง Jellyfin บน VPS: สร้างเซิร์ฟเวอร์สตรีมมิ่งส่วนตัว

เผยแพร่: 13 กันยายน 2026 · อ่าน 12 นาที · Ubuntu 24.04 / Debian 12

Jellyfin คือ open-source media server ฟรี 100% ที่ให้คุณสร้าง "Netflix ส่วนตัว" บน VPS ของตัวเอง รองรับการสตรีมหนัง ซีรีส์ เพลง ภาพถ่าย ไปยังทุกอุปกรณ์ผ่าน Web Browser, Android, iOS, TV App โดยไม่มีค่าสมาชิกและไม่มี DRM ล็อกไฟล์

เมื่อเปรียบกับ Plex — Jellyfin ไม่ต้องสมัคร account, ไม่ส่ง metadata ออก cloud, ไม่มี hardware transcoding paywall ทุก feature เปิดใช้ได้ฟรีตั้งแต่วันแรก

ข้อกำหนดของเซิร์ฟเวอร์

ทรัพยากรขั้นต่ำแนะนำ
CPU2 vCPU4 vCPU (สำหรับ software transcode)
RAM2 GB4–8 GB
Disk20 GB OSSSD + external/NFS สำหรับ media
OSUbuntu 22.04+Ubuntu 24.04 / Debian 12
Port8096 (HTTP)443 (HTTPS via Nginx)
Tip: ถ้าไม่มี GPU ใน VPS ให้เลือกไฟล์วิดีโอที่ encode ด้วย H.264 (mp4) ไว้ก่อน — direct play ไม่ต้อง transcode เลย ประหยัด CPU มาก

ขั้นตอนที่ 1: อัปเดต OS และติดตั้ง dependencies

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl apt-transport-https gnupg

ขั้นตอนที่ 2: เพิ่ม Jellyfin repository และติดตั้ง

# เพิ่ม GPG key ของ Jellyfin
curl -fsSL https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key \
  | sudo gpg --dearmor -o /usr/share/keyrings/jellyfin.gpg

# เพิ่ม repository (Ubuntu 24.04 ใช้ noble)
echo "deb [signed-by=/usr/share/keyrings/jellyfin.gpg] \
  https://repo.jellyfin.org/ubuntu noble main" \
  | sudo tee /etc/apt/sources.list.d/jellyfin.list

# ติดตั้ง Jellyfin
sudo apt update && sudo apt install -y jellyfin
หมายเหตุ: สำหรับ Debian 12 (Bookworm) เปลี่ยน noble เป็น bookworm ในคำสั่ง repository

ขั้นตอนที่ 3: เริ่มและเปิดใช้งาน Jellyfin service

sudo systemctl enable jellyfin
sudo systemctl start jellyfin
sudo systemctl status jellyfin

Jellyfin จะรันที่ port 8096 (HTTP) และ 8920 (HTTPS ภายใน) เข้า Web UI ครั้งแรกได้ที่ http://IP-เซิร์ฟเวอร์:8096

ขั้นตอนที่ 4: ตั้งค่า Firewall เปิด port ชั่วคราว

# เปิด port 8096 ชั่วคราวสำหรับ setup wizard
sudo ufw allow 8096/tcp
sudo ufw reload

ขั้นตอนที่ 5: ทำ Setup Wizard

เปิด browser ไปที่ http://YOUR-SERVER-IP:8096 แล้วทำตามขั้นตอน:

  1. เลือกภาษา — Thai หรือ English
  2. สร้าง Admin Account — กำหนด username และ password ที่แข็งแรง
  3. เพิ่ม Media Library — เลือก content type (Movies / TV Shows / Music) และ path ของไฟล์
  4. ตั้งค่า Metadata Language — เลือก Thai หรือ English สำหรับดึงข้อมูลหนัง
  5. กด Finish — Jellyfin จะ scan media library อัตโนมัติ

ขั้นตอนที่ 6: เตรียม Media Directory

# สร้างโฟลเดอร์เก็บ media
sudo mkdir -p /media/jellyfin/{movies,tvshows,music,photos}

# ให้ Jellyfin user เข้าถึงได้
sudo chown -R jellyfin:jellyfin /media/jellyfin
sudo chmod -R 755 /media/jellyfin

โครงสร้างไฟล์ที่ Jellyfin อ่านได้ดีที่สุด:

/media/jellyfin/
├── movies/
│   ├── Inception (2010)/
│   │   └── Inception (2010).mp4
│   └── Dune Part Two (2024)/
│       └── Dune Part Two (2024).mkv
└── tvshows/
    └── Breaking Bad/
        ├── Season 01/
        │   ├── S01E01 - Pilot.mkv
        │   └── S01E02 - Cat's in the Bag.mkv
        └── Season 02/

ขั้นตอนที่ 7: ตั้งค่า Nginx Reverse Proxy + SSL

ติดตั้ง Nginx และ Certbot:

sudo apt install -y nginx certbot python3-certbot-nginx

สร้าง Nginx config สำหรับ Jellyfin:

sudo nano /etc/nginx/sites-available/jellyfin
server {
    listen 80;
    server_name jellyfin.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Large file streaming
        proxy_read_timeout 7200;
        proxy_send_timeout 7200;
        client_max_body_size 20G;
    }
}
# เปิดใช้ config
sudo ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# ออก SSL Certificate ฟรี
sudo certbot --nginx -d jellyfin.yourdomain.com

ขั้นตอนที่ 8: ปิด port 8096 โดยตรง (Security)

# หลัง setup เสร็จ ปิด port โดยตรง ให้ผ่าน Nginx เท่านั้น
sudo ufw delete allow 8096/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

ขั้นตอนที่ 9: ปรับ Jellyfin Networking Settings

เข้า Admin Dashboard → Networking → ตั้งค่า:

ขั้นตอนที่ 10: ติดตั้ง Client Apps

PlatformAppDownload
Web BrowserBuilt-in WebUIไม่ต้องติดตั้ง
AndroidJellyfin for AndroidGoogle Play Store
iOS / iPadOSSwiftfinApp Store
Apple TVSwiftfinApp Store
Android TVJellyfin for Android TVGoogle Play
WindowsJellyfin Media Playerjellyfin.org
KodiJellyfin for Kodi PluginKodi Add-on

ตรวจสอบว่า Jellyfin ทำงานถูกต้อง

# ตรวจสอบ service status
sudo systemctl status jellyfin

# ดู log realtime
sudo journalctl -u jellyfin -f

# ตรวจสอบ port 8096 เปิดอยู่
sudo ss -tlnp | grep 8096

# ทดสอบ API endpoint
curl -s http://localhost:8096/System/Info/Public | python3 -m json.tool

# ตรวจสอบ Nginx proxy ทำงาน
curl -I https://jellyfin.yourdomain.com
Tip: ใช้คำสั่ง curl http://localhost:8096/health — ถ้าได้ Healthy แสดงว่า Jellyfin API ตอบสนองปกติ สามารถ monitor ด้วย Uptime Kuma ได้เลย

แก้ปัญหาที่พบบ่อย

Error: "This server's certificate is not trusted"

เกิดเมื่อ client เชื่อมต่อด้วย IP โดยตรงที่ใช้ self-signed cert แก้โดยให้เชื่อมต่อผ่าน domain ที่ออก Let's Encrypt แทน

# ตรวจสอบ certbot renewal
sudo certbot renew --dry-run

# ดู certificate ที่มีอยู่
sudo certbot certificates

Error: "Playback Error" หรือวิดีโอค้างกลางคัน

มักเกิดจาก buffer timeout หรือ proxy timeout สั้นเกินไป ตรวจสอบ Nginx config:

# ใน /etc/nginx/sites-available/jellyfin ให้มี
proxy_read_timeout 7200;
proxy_send_timeout 7200;
client_max_body_size 20G;

# reload หลังแก้
sudo nginx -t && sudo systemctl reload nginx

Error: "Permission denied" เมื่อ scan media

Jellyfin user ไม่มีสิทธิ์อ่านโฟลเดอร์ media ที่เพิ่มใหม่:

# แก้ permission ให้ jellyfin user อ่านได้
sudo chown -R jellyfin:jellyfin /path/to/media
sudo chmod -R 755 /path/to/media

# หรือเพิ่ม jellyfin user เข้ากลุ่มที่มีสิทธิ์
sudo usermod -aG media jellyfin
sudo systemctl restart jellyfin

Error: Jellyfin ใช้ RAM สูงมาก (>2GB)

เกิดจาก software transcoding ไฟล์หลายไฟล์พร้อมกัน จำกัดจำนวน concurrent transcodes:

# ใน Admin > Playback > ปรับ "Simultaneous transcodes limit"
# แนะนำ: 2 สำหรับ VPS 4 vCPU

# หรือ limit memory ผ่าน systemd
sudo systemctl edit jellyfin
[Service]
MemoryMax=3G

Error: "404 Not Found" หลังตั้ง Nginx

มักเกิดจาก Base URL ใน Jellyfin ไม่ตรงกับ Nginx config:

# ใน Jellyfin Admin > Networking > Base URL ต้องว่าง (ถ้าใช้ root /)
# ถ้าใช้ subdirectory เช่น /jellyfin ต้องใส่ /jellyfin ทั้งสองที่

# ตรวจ Nginx config
sudo nginx -t
sudo cat /var/log/nginx/error.log | tail -20

คำถามที่พบบ่อย

Jellyfin ต่างจาก Plex อย่างไร?

Jellyfin เป็น open-source ฟรี 100% ไม่มี account บังคับ ไม่มี feature paywall เช่น hardware transcoding ส่วน Plex มี Plex Pass ที่เสียเงินถึงจะได้ hardware transcode และ offline sync Jellyfin เหมาะสำหรับคนที่ต้องการ privacy เต็มรูปแบบเพราะข้อมูลไม่ออก cloud

VPS ขนาดเล็ก (2GB RAM) เปิด Jellyfin ได้ไหม?

ได้ ถ้าไฟล์ media encode มาเป็น H.264 MP4 และ client รองรับ direct play จะไม่มี transcoding เลย ใช้ RAM แค่ 300–500 MB ปัญหาจะเกิดเมื่อ client ต้องการ transcode ซึ่งกิน CPU สูง แนะนำให้เตรียมไฟล์ให้ถูก format ก่อน upload

จะเชื่อมต่อ external storage (S3/Wasabi) กับ Jellyfin ได้ไหม?

ได้โดย mount S3 bucket ด้วย rclone mount หรือ s3fs แล้วชี้ Jellyfin library ไปที่ mount point Jellyfin จะเห็นเหมือนกับ local folder แต่ latency อาจสูงกว่าเล็กน้อยในการ scan metadata ครั้งแรก