ติดตั้ง Nextcloud บน VPS เซิร์ฟเวอร์ไฟล์ส่วนตัว
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}'
ตรวจสอบว่า 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
แก้ปัญหาที่พบบ่อย
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 ซึ่งรวมทั้งสองอย่างให้อัตโนมัติ