ติดตั้ง Nextcloud บน VPS เซิร์ฟเวอร์ไฟล์ส่วนตัว

ติดตั้ง Nextcloud บน VPS เซิร์ฟเวอร์ไฟล์ส่วนตัว

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

Nextcloud คือ open-source file hosting ที่ทำงานเหมือน Google Drive แต่รันบน server ตัวเอง ไฟล์ทุกอย่างอยู่ใน VPS ไม่มีบริษัทอื่น scan หรือเข้าถึง รองรับ app ทั้ง iOS, Android, Windows, Mac และ Linux พร้อม Calendar, Contacts, Talk (video call) ในตัว

ติดตั้ง Nextcloud ด้วย Docker

mkdir -p ~/nextcloud
cd ~/nextcloud

cat > docker-compose.yml << 'EOF'
version: "3.8"
services:
  db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpass123
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: ncpass123
    volumes:
      - db_data:/var/lib/mysql

  nextcloud:
    image: nextcloud:latest
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: ncpass123
      NEXTCLOUD_TRUSTED_DOMAINS: cloud.yourdomain.com
    volumes:
      - nc_data:/var/www/html
    depends_on:
      - db

volumes:
  db_data:
  nc_data:
EOF

docker compose up -d

ตั้ง Nginx Reverse Proxy + SSL

sudo nano /etc/nginx/sites-available/nextcloud

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

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

    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        client_max_body_size 10G;
        proxy_read_timeout 300s;
    }
}

ตั้งค่า Nextcloud ผ่าน Web Installer

# เปิด https://cloud.yourdomain.com ครั้งแรก
# ใส่ข้อมูล:
# Admin username: admin
# Admin password: (ตั้งเอง)
# Data folder: /var/www/html/data
# Database: MySQL
# Database host: db
# Database name/user/pass ตามที่ตั้งใน compose

# หรือตั้งผ่าน occ command
docker exec -u www-data nextcloud-nextcloud-1 php occ maintenance:install \
  --database mysql --database-name nextcloud \
  --database-user nextcloud --database-pass ncpass123 \
  --admin-user admin --admin-pass adminpass123

ปรับ Performance (PHP OPcache + Redis)

# เพิ่ม Redis ใน docker-compose.yml
  redis:
    image: redis:alpine
    restart: unless-stopped

# ตั้ง Nextcloud ใช้ Redis
docker exec -u www-data nextcloud-nextcloud-1 php occ config:system:set \
  memcache.local --value '\OC\Memcache\APCu'
docker exec -u www-data nextcloud-nextcloud-1 php occ config:system:set \
  memcache.distributed --value '\OC\Memcache\Redis'
docker exec -u www-data nextcloud-nextcloud-1 php occ config:system:set \
  redis --type json --value '{"host":"redis","port":6379}'
Tip: ติดตั้ง Nextcloud client บน Mac/Windows แล้ว sync folder ที่เลือกไว้ ไฟล์จะ upload/download อัตโนมัติเหมือน Dropbox แต่ data อยู่ใน VPS ตัวเอง

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

# ตรวจ status
docker compose ps

# ตรวจ Nextcloud health
docker exec -u www-data nextcloud-nextcloud-1 php occ status

# ดู warnings/errors
docker exec -u www-data nextcloud-nextcloud-1 php occ check

# ดู logs
docker compose logs nextcloud | tail -50
Tip: เข้า Settings > Administration > Overview ใน Nextcloud admin panel จะเห็น security checklist และ performance warnings พร้อม recommended fixes ทันที

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

Error: "Access through untrusted domain"

ต้องเพิ่ม domain ใน trusted_domains ใน config.php:

docker exec -u www-data nextcloud-nextcloud-1 php occ config:system:set \
  trusted_domains 1 --value="cloud.yourdomain.com"

Upload ไฟล์ใหญ่ล้มเหลว (max upload size)

ต้องแก้ทั้ง Nginx และ PHP ใน container:

docker exec nextcloud-nextcloud-1 bash -c \
  "echo 'upload_max_filesize=10G' >> /usr/local/etc/php/conf.d/nextcloud.ini && \
   echo 'post_max_size=10G' >> /usr/local/etc/php/conf.d/nextcloud.ini"
docker compose restart nextcloud

Calendar/Contacts ไม่ sync กับ iPhone

ต้องตั้ง CalDAV/CardDAV URL ใน iPhone Settings ให้ถูกต้อง:

# CalDAV URL
https://cloud.yourdomain.com/remote.php/dav/principals/users/USERNAME/

# หรือใช้ auto-discovery
https://cloud.yourdomain.com/.well-known/caldav

Nextcloud ช้ามากเมื่อ Files scan

ปิด background jobs ที่ซ้อนทับกัน และตั้ง cron แทน ajax:

docker exec -u www-data nextcloud-nextcloud-1 php occ background:cron
crontab -e
# เพิ่ม:
*/5 * * * * docker exec -u www-data nextcloud-nextcloud-1 php -f /var/www/html/cron.php

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

Nextcloud กับ Seafile ต่างกันอย่างไร?

Nextcloud มี ecosystem ครบกว่า (Calendar, Talk, Office, apps มากกว่า 200 ตัว) แต่หนักกว่า Seafile เร็วกว่าสำหรับ sync ไฟล์อย่างเดียว เหมาะสำหรับทีมที่ต้องการแค่ file storage ประสิทธิภาพสูง

Nextcloud รองรับ 2FA ไหม?

ได้ รองรับ TOTP (Google Authenticator), WebAuthn/FIDO2 และ Email OTP ผ่าน Two-Factor Auth app ที่ติดตั้งได้จาก App Store ใน admin panel สามารถบังคับ 2FA สำหรับ user ทั้งหมดหรือเฉพาะ admin

Backup Nextcloud ทำอย่างไร?

ต้อง backup 2 ส่วน: ไฟล์ data directory และ database MySQL ใช้ rsync + mysqldump ตาม schedule หรือ Nextcloud backup app ซึ่งรวมทั้งสองอย่างให้อัตโนมัติ