ติดตั้ง Uptime Kuma Monitoring บน VPS

ติดตั้ง Uptime Kuma Monitoring บน VPS

มิถุนายน 2026 · อ่าน 6 นาที

Uptime Kuma คือ self-hosted uptime monitoring tool ที่ตรวจสอบเว็บไซต์, TCP port, DNS, SSL certificate expiry และ ping ทุก 20 วินาที เมื่อ service ล่มจะแจ้งเตือนทันทีผ่าน Line OA, Telegram, Discord, Email หรือ Webhook และมี public status page ให้ share ลูกค้าได้

ติดตั้ง Uptime Kuma ด้วย Docker

docker run -d \
  --name uptime-kuma \
  --restart unless-stopped \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  louislam/uptime-kuma:latest

# ตรวจ
docker ps | grep uptime-kuma
# เปิด http://YOUR_VPS_IP:3001

ตั้ง Nginx Reverse Proxy + SSL

sudo certbot --nginx -d status.yourdomain.com

sudo nano /etc/nginx/sites-available/uptime-kuma

server {
    listen 443 ssl;
    server_name status.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/status.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/status.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

sudo nginx -t && sudo systemctl reload nginx

เพิ่ม Monitor และตั้ง Notification

# เปิด https://status.yourdomain.com
# 1. สร้าง user account ครั้งแรก
# 2. กด "+ Add New Monitor"
# ประเภทที่ใช้บ่อย:
#   - HTTP(s): ตรวจ website response code
#   - TCP Port: ตรวจว่า port เปิดอยู่
#   - DNS: ตรวจ DNS record
#   - Ping: ตรวจ server online
#   - Certificate Expiry: เตือนก่อน SSL หมดอายุ

# ตั้ง Line notification:
# Settings > Notifications > Line Messenger
# ใส่ Line Channel Access Token และ User ID

ตั้ง Status Page สาธารณะ

# Status Pages > Create New Status Page
# ตั้งชื่อ และ slug (เช่น "status")
# เปิด https://status.yourdomain.com/status/status
# เพิ่ม monitor ที่ต้องการแสดง
# share URL ให้ลูกค้าดูสถานะ service ได้ตลอดเวลา

ใช้ Docker Compose เพื่อจัดการง่ายขึ้น

แทนที่จะจำ docker run ยาวๆ การเก็บ config เป็นไฟล์ docker-compose.yml ทำให้ deploy ซ้ำ ย้ายเครื่อง และ version control ได้สะดวกกว่ามาก:

# ~/uptime-kuma/docker-compose.yml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data

# สั่งงาน
docker compose up -d          # start
docker compose pull && docker compose up -d   # อัปเดตเวอร์ชันใหม่
docker compose logs -f        # ดู log
หมายเหตุ: ปักหมุด image เป็น :1 (major version) แทน :latest เพื่อกัน breaking change ตอน auto-pull — Uptime Kuma v2 เปลี่ยน database engine จึงไม่ควรกระโดดข้าม major โดยไม่ backup ก่อน

สำรอง Config และกู้คืน

ข้อมูล monitor, notification และ history ทั้งหมดอยู่ใน volume data/ (ไฟล์ SQLite) — backup เป็นประจำเพื่อกัน VPS เสียหาย:

# สำรองทั้งโฟลเดอร์ data (หยุด container ก่อนเพื่อความสมบูรณ์ของ SQLite)
docker compose stop
tar czf kuma-backup-$(date +%F).tar.gz data/
docker compose start

# กู้คืนบนเครื่องใหม่
tar xzf kuma-backup-2026-06-14.tar.gz
docker compose up -d
Tip: ตั้ง monitor บน VPS คนละตัวกับ server ที่ monitor จะได้แจ้งเตือนได้แม้ server หลักล่ม ถ้ามี VPS เดียวให้ใช้ Uptime Kuma Cloud แทน

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

# ตรวจ container
docker ps | grep uptime-kuma

# ตรวจ port 3001
ss -tlnp | grep 3001

# ดู logs
docker logs uptime-kuma -f

# ทดสอบ web
curl -I https://status.yourdomain.com
Tip: ใช้ Uptime Kuma push monitor สำหรับ cron job ที่ต้องทำงานทุกคืน จะส่ง heartbeat ping ทุกครั้งที่ cron รัน ถ้าไม่ได้รับ ping จะแจ้งเตือนว่า cron ไม่ทำงาน

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

Uptime Kuma ไม่ restart หลัง VPS รีบูต

ต้องใส่ --restart unless-stopped ใน docker run หรือแก้ใน container settings:

เทียบผลกับมุมมองภายนอกได้ด้วย เครื่องมือเช็คสถานะเว็บของ dnsxray.com — ถ้า Kuma บอกว่าเว็บ Up แต่เครื่องมือภายนอกเข้าไม่ถึง อาจแปลว่า Monitor อยู่ในเครือข่ายเดียวกับเว็บจนมองไม่เห็นปัญหาที่ผู้ใช้จริงเจอ

docker update --restart unless-stopped uptime-kuma

SSL Certificate Expiry monitor แจ้งเตือนผิด

ตรวจว่า domain ชี้มาที่ server จริง และ port 443 เปิดอยู่ บาง server redirect HTTP→HTTPS ซึ่ง monitor ต้อง follow redirect:

# ทดสอบ SSL manually
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | \
  openssl x509 -noout -dates

แจ้งเตือน Line ไม่ได้รับ

Line Channel Access Token หมดอายุทุก 30 วัน ต้อง refresh ใน Line Developers Console แล้วอัพเดทใน Uptime Kuma notification settings

Monitor แสดง "Pending" นานผิดปกติ

Uptime Kuma container อาจ out of memory ตรวจ memory usage และ restart:

docker stats uptime-kuma
docker restart uptime-kuma

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

Uptime Kuma ตรวจสอบได้กี่ service พร้อมกัน?

ไม่มี hard limit แต่การ check บ่อยๆ พร้อมกันหลายร้อย monitor จะใช้ resource มาก สำหรับ VPS RAM 1 GB รองรับได้ประมาณ 50-100 monitors ที่ interval 60 วินาที

ข้อมูล monitoring เก็บไว้นานแค่ไหน?

Uptime Kuma เก็บ heartbeat history 30 วันโดย default สามารถปรับใน Settings > General > Keep Data Days เพิ่มได้ตามต้องการ แต่ยิ่งนานยิ่งกิน disk

เพิ่ม monitor ผ่าน API ได้ไหม?

ได้ Uptime Kuma มี unofficial REST API ที่ community พัฒนา uptime-kuma-api ใช้ได้กับ Python และ Node.js เหมาะสำหรับ automation เมื่อ deploy service ใหม่