ทางเลือก Nextcloud สำหรับทำ Self-hosting ที่น่าสนใจ
รวมทางเลือก Nextcloud สำหรับผู้ที่ต้องการย้ายระบบ แบ่งกลุ่มตามการใช้งานจริง ทั้งการซิงค์ไฟล์ความเร็วสูง การใช้ Object Storage หรือ SFTP พร้อมวิเคราะห์ค่าใช้จ่ายในการย้ายข้อมูล
ทางเลือกอื่นของ Nextcloud ที่น่าสนใจสำหรับการทำ self-hosting
ทางเลือกอื่นของ Nextcloud ที่น่าใช้งานคือบริการที่ตัดฟีเจอร์ที่คุณไม่ได้ใช้ออกไป Nextcloud เป็นทั้งเซิร์ฟเวอร์ไฟล์, ปฏิทิน, สมุดรายชื่อ, ชุดโปรแกรมสำนักงาน และแพลตฟอร์มแอปพลิเคชันรวมอยู่ในแอป PHP เดียว ซึ่งคุณต้องจ่ายทรัพยากรเพื่อประมวลผลทั้งหมดนั้นในทุกครั้งที่โหลดหน้าเว็บ ดังนั้น ให้เลือกตัวแทนโดยระบุงานเดียวที่คุณยังจำเป็นต้องใช้ แล้วตรวจสอบค่าใช้จ่ายในการย้ายไฟล์ที่คุณมีอยู่
คู่มือนี้จัดกลุ่มตัวเลือกตามลักษณะงาน ได้แก่ การซิงค์ข้อมูลเพียงอย่างเดียว, การซิงค์ด้วยเซิร์ฟเวอร์ที่เร็วกว่า, การจัดเก็บแบบ object storage ที่มีไคลเอนต์ครอบไว้ หรือการเข้าถึงไฟล์ระยะไกลแบบทั่วไป แต่ละส่วนจะระบุความต้องการของเซิร์ฟเวอร์บน VPS (virtual private server) ขนาดเล็ก และผลกระทบต่อโครงสร้างโฟลเดอร์เดิมของคุณ หากคุณย้ายมาจาก Dropbox หรือ Google Drive แทนที่จะมาจาก Nextcloud ที่คุณใช้งานอยู่แล้ว บทสรุปทางเลือกของ Dropbox สำหรับ self-hosted จะเป็นจุดเริ่มต้นที่เหมาะสมกว่าสำหรับคุณ
เหตุใด Nextcloud จึงทำงานช้าบน VPS ขนาดเล็ก
ความล่าช้ามีสาเหตุที่ระบุได้ชัดเจน และการทราบสาเหตุเหล่านี้จะช่วยให้คุณตัดสินใจได้ว่าการย้ายเซิร์ฟเวอร์จะช่วยแก้ปัญหาได้จริงหรือไม่
การโหลดหน้าเว็บทุกครั้งจะใช้ PHP worker หนึ่งตัว ข้อกำหนดของระบบ Nextcloud ระบุหน่วยความจำ ต่อกระบวนการ (per process) ไว้ที่ขั้นต่ำ 128 MB และแนะนำที่ 512 MB (ข้อมูล ณ เดือนตุลาคม 2026) ซึ่งไม่ใช่ยอดรวมของทั้งเซิร์ฟเวอร์ การมี pool ของ worker จำนวน 10 ตัวถือเป็นภาระหน่วยความจำที่สูงมากสำหรับแผน 2 GB ดังนั้นผู้ดูแลระบบจึงมักลดค่า pm.max_children ในไฟล์ตั้งค่า PHP-FPM pool ส่งผลให้คำขอต่างๆ ต้องเข้าคิวรอ worker ที่ว่างอยู่ อินเทอร์เฟซจึงตอบสนองช้าในขณะที่ดิสก์ไม่ได้ทำงานหนัก
ฐานข้อมูลจะขยายตัวตามจำนวนไฟล์ ไม่ใช่ขนาดไฟล์ ตารางแคชไฟล์ซึ่งคือ oc_filecache ภายใต้คำนำหน้าตาราง (table prefix) เริ่มต้น จะเก็บข้อมูลหนึ่งแถวต่อหนึ่งไฟล์และหนึ่งโฟลเดอร์ในทุกพื้นที่จัดเก็บที่เซิร์ฟเวอร์รู้จัก คลังรูปภาพที่มีไฟล์ขนาดเล็ก 300,000 ไฟล์ถือเป็นตารางขนาดใหญ่ ในขณะที่ไฟล์วิดีโอขนาด 300 GB ที่มีเพียง 400 ไฟล์ถือเป็นตารางขนาดเล็ก การแชร์ การค้นหา และการสแกนไฟล์ล้วนต้องอ่านตารางนี้ทั้งสิ้น
sudo mysql nextcloud -e 'SELECT COUNT(*) FROM oc_filecache;'จำนวนไฟล์ในระดับล้านรายการสามารถอธิบายความช้าในการแสดงรายการไฟล์ได้ดีกว่าการทดสอบประสิทธิภาพดิสก์ หาก instance ของคุณใช้คำนำหน้าตารางอื่นหรือใช้ PostgreSQL ให้ปรับเปลี่ยนคำสั่ง query ตามความเหมาะสม
งานเบื้องหลังแย่งทรัพยากรกับอินเทอร์เฟซเว็บ คู่มือของ Nextcloud แนะนำให้ตั้งค่า system cron เพื่อรัน cron.php ทุกๆ 5 นาที การสร้างภาพตัวอย่าง (preview) และการสแกนไฟล์จะทำงานในส่วนนี้ ซึ่งใช้ CPU ตัวเดียวกับที่ให้บริการเบราว์เซอร์ของคุณ
การอัปเกรดเวอร์ชันหลักคือการย้ายฐานข้อมูล (migration) ระบบจะเข้าสู่โหมดบำรุงรักษา (maintenance mode) และตอบกลับทุกคำขอด้วย Nextcloud is in maintenance mode, please try again later จนกว่าการย้ายข้อมูลจะเสร็จสิ้น บน VPS ขนาดเล็กที่มี oc_filecache ขนาดใหญ่ ช่วงเวลานี้จะยาวนานจนสังเกตเห็นได้ชัดเจน
ตัดสินใจเลือกสิ่งที่ต้องการเก็บไว้ก่อน
- ซิงค์โฟลเดอร์ระหว่างเครื่องที่คุณเป็นเจ้าของ โดยไม่มีอินเทอร์เฟซบนเว็บ: Syncthing
- ซิงค์สำหรับผู้ใช้หลายคน โดยมีอินเทอร์เฟซบนเว็บ, ไคลเอนต์บนมือถือ และลิงก์สำหรับแชร์: Seafile
- จัดเก็บข้อมูลจำนวนมากในราคาประหยัดและเข้าถึงผ่านสคริปต์หรือเครื่องมือสำรองข้อมูล: object storage ร่วมกับไคลเอนต์
- อ่านและเขียนไฟล์จากระยะไกลโดยไม่ต้องติดตั้งซอฟต์แวร์เซิร์ฟเวอร์เพิ่มเติม: SFTP หรือ WebDAV
- แก้ไขเอกสารร่วมกันผ่านเบราว์เซอร์ หรือแชร์ปฏิทินระหว่างบุคคล: ให้ใช้งาน Nextcloud ต่อไป หรือยอมรับการรันบริการสองตัวควบคู่กัน
Syncthing: การซิงค์ไฟล์โดยไม่ต้องพึ่งพาแอปพลิเคชันเซิร์ฟเวอร์
Syncthing จัดเก็บไฟล์ของคุณไว้เป็นไฟล์ปกติ ไม่มีการใช้ฐานข้อมูลเนื้อหา และไม่มีเว็บอินเทอร์เฟซสำหรับเปิดอ่านเอกสารของคุณ อุปกรณ์ทุกเครื่องที่เข้าร่วมโฟลเดอร์จะถือสำเนาฉบับสมบูรณ์ไว้ และ Syncthing จะคอยทำให้สำเนาเหล่านั้นตรงกันเสมอ
sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthingsudo systemctl enable --now syncthing@$USER
sudo ss -lntp | grep 8384บรรทัดที่แสดง 127.0.0.1:8384 หมายความว่าเว็บอินเทอร์เฟซกำลังทำงานและผูกอยู่กับ localhost เท่านั้น ซึ่งเป็นสิ่งที่คุณต้องการเมื่อใช้งานบน VPS สาธารณะ คุณสามารถเข้าถึงได้ผ่าน SSH tunnel ด้วยคำสั่ง ssh -L 8384:127.0.0.1:8384 you@your-vps จากนั้นเปิด http://127.0.0.1:8384 บนแล็ปท็อปของคุณ การที่ไม่มีการรับฟังที่พอร์ต 8384 ไม่ได้หมายความว่าบริการล้มเหลวเสมอไป Syncthing จะสุ่มพอร์ตใหม่หากพอร์ต 8384 ถูกใช้งานอยู่แล้วในขณะที่ติดตั้ง และที่อยู่ของ GUI สามารถตั้งค่าเป็นพอร์ตอื่นหรือ Unix socket ได้ journalctl -u syncthing@$USER -n 50 จะแสดงที่อยู่ที่บริการเริ่มทำงานจริง หรือแสดงข้อผิดพลาดหากบริการไม่สามารถเริ่มทำงานได้
ทรัพยากรที่ใช้ Syncthing ไม่ได้ระบุตัวเลขขั้นต่ำของหน่วยความจำที่ต้องใช้ ปริมาณการใช้งานจะขึ้นอยู่กับจำนวนไฟล์ที่ทำดัชนีมากกว่าขนาดรวมของไฟล์ เนื่องจาก Syncthing เก็บรายการดัชนีแยกตามไฟล์ต่อหนึ่งโฟลเดอร์ที่แชร์ การสแกนโฟลเดอร์ขนาดใหญ่ในครั้งแรกจะใช้พลังงาน CPU สูง เพราะ Syncthing ต้องทำ hash ไฟล์ทุกไฟล์ก่อนที่จะเปรียบเทียบข้อมูลได้ คาดการณ์ว่าการสแกนรอบแรกจะใช้เวลาสักพักบน vCPU แบบแชร์ และหน่วยความจำจะเพิ่มขึ้นตามจำนวนไฟล์ ไม่ใช่ตามขนาดเป็นกิกะไบต์
ดิสก์คือต้นทุนที่แท้จริง ไม่มีการประหยัดพื้นที่ฝั่งเซิร์ฟเวอร์เพราะ Syncthing ไม่ใช่เซิร์ฟเวอร์ โฟลเดอร์ขนาด 200 GB ที่แชร์ระหว่าง VPS กับแล็ปท็อปจำเป็นต้องใช้พื้นที่ 200 GB ทั้งสองฝั่ง ซึ่งตรงข้ามกับ Nextcloud ที่เซิร์ฟเวอร์เก็บข้อมูลทั้งหมดและไคลเอนต์เลือกเฉพาะสิ่งที่ต้องการซิงค์ ให้ใช้การเลือกโฟลเดอร์แบบเฉพาะเจาะจงและโฟลเดอร์แบบ receive only บน VPS หากคุณต้องการให้ VPS เป็นเป้าหมายสำหรับการสำรองข้อมูลมากกว่าจะเป็น peer ที่เท่าเทียมกัน
การย้ายข้อมูลคือเหตุผลที่ควรเลือกใช้ คุณสามารถชี้ Syncthing ไปยังโครงสร้างไดเรกทอรีที่คุณมีอยู่แล้วได้ทันที ไม่มีการนำเข้า ไม่มีการอัปโหลด และไม่มีการแปลงรูปแบบไฟล์ เพียงเพิ่มโฟลเดอร์บน VPS และเพิ่มบนแล็ปท็อปโดยใช้ Folder ID เดียวกัน แล้วปล่อยให้ทั้งสองฝั่งซิงค์ข้อมูลเข้าหากัน หากไฟล์เดียวกันมีความแตกต่างกันในตอนที่เริ่มเชื่อมต่อครั้งแรก Syncthing จะเก็บไว้ทั้งสองเวอร์ชันและเปลี่ยนชื่อไฟล์หนึ่งเป็น filename.sync-conflict-20260809-142530-ABCD123.txt การพบไฟล์เหล่านี้เป็นเรื่องปกติในการซิงค์ครั้งแรก ไม่ใช่ความล้มเหลวของระบบ
สิ่งที่คุณต้องแลก ไม่มีระบบบัญชีผู้ใช้ ไม่มีลิงก์แชร์สำหรับส่งให้ผู้อื่น และไม่มีวิธีเรียกดูไฟล์ผ่านเบราว์เซอร์บนโทรศัพท์ แอป Android ดั้งเดิมไม่ได้ถูกดูแลโดยทีมพัฒนาหลักอีกต่อไป แต่มีชุมชนผู้พัฒนา fork นำไปพัฒนาต่อ ซึ่งเป็นประเด็นสำคัญหากคุณต้องการการเข้าถึงผ่านมือถือ การเปรียบเทียบโดยตรงระหว่าง Syncthing และ Nextcloud จะอธิบายถึงช่องว่างของคุณสมบัติเหล่านี้ทีละประเด็น
Seafile: การซิงค์ที่รวดเร็วด้วยเซิร์ฟเวอร์ที่เบาบาง
Seafile แบ่งการทำงานออกเป็นสองส่วน แอปพลิเคชันเว็บที่เขียนด้วย Python ชื่อ Seahub ทำหน้าที่แสดงผลอินเทอร์เฟซ และกระบวนการ C แยกต่างหากทำหน้าที่จัดการทราฟฟิกการซิงค์ การโอนถ่ายไฟล์ของคุณจะไม่ผ่านแอปพลิเคชันเว็บ ซึ่งเป็นเหตุผลว่าทำไมการอัปโหลดไฟล์ขนาดใหญ่จึงยังคงรวดเร็วแม้ในขณะที่มีผู้ใช้อื่นกำลังคลิกใช้งานอินเทอร์เฟซอยู่ เวอร์ชัน 13.0 ได้รับการเผยแพร่ในเดือนมกราคม 2026
sudo mkdir -p /opt/seafile
cd /opt/seafile
sudo wget -O .env https://manual.seafile.com/13.0/repo/docker/ce/env
sudo wget https://manual.seafile.com/13.0/repo/docker/ce/seafile-server.yml
sudo wget https://manual.seafile.com/13.0/repo/docker/seadoc.yml
sudo wget https://manual.seafile.com/13.0/repo/docker/caddy.ymlแก้ไข .env ก่อนเริ่มดำเนินการใดๆ ไฟล์นี้จะกำหนดค่า SEAFILE_SERVER_HOSTNAME, INIT_SEAFILE_ADMIN_EMAIL, INIT_SEAFILE_ADMIN_PASSWORD, SEAFILE_MYSQL_DB_PASSWORD และ JWT_PRIVATE_KEY ซึ่งต้องเป็นสตริงสุ่มที่มีความยาวอย่างน้อย 32 ตัวอักษร ไฟล์ดังกล่าวยังระบุให้ compose ทราบว่าจะอ่านไฟล์ YAML ที่ดาวน์โหลดมาไฟล์ใดบ้าง เพื่อให้การดาวน์โหลดทั้งสี่ไฟล์ทำงานร่วมกันเป็นสแต็กเดียว
cd /opt/seafile
sudo docker compose up -d
sudo docker compose psคอนเทนเนอร์ทุกตัวควรรายงานสถานะว่ากำลังทำงานอยู่ หากคอนเทนเนอร์มีการรีสตาร์ทวนซ้ำ มักเกิดจากค่าที่ขาดหายไปใน .env และ sudo docker compose logs seafile จะระบุว่าตัวใดที่มีปัญหา
ทรัพยากรระบบ เอกสารของ Seafile ระบุความต้องการขั้นต่ำที่ RAM 2 GB และ CPU 2 คอร์ ที่ความเร็วสูงกว่า 2 GHz ณ เดือนตุลาคม 2026 ให้ถือว่านี่คือค่าพื้นฐานสำหรับทั้งสแต็ก เนื่องจาก Docker deployment จะเริ่มการทำงานของ MariaDB, reverse proxy อย่าง Caddy และตัวแก้ไข SeaDoc ไปพร้อมกัน ควรจัดสรร RAM ให้ 4 GB หากมีผู้ใช้งานมากกว่าหนึ่งหรือสองคน หรือให้ตัดคอนเทนเนอร์ที่ไม่จำเป็นออก
ข้อควรระวังในการย้ายข้อมูลคือรูปแบบการจัดเก็บ Seafile ไม่ได้เก็บไฟล์ของคุณในรูปแบบไฟล์ปกติ แต่จะแบ่งไฟล์แต่ละไฟล์ออกเป็นบล็อกภายใต้ /opt/seafile-data และบันทึกโครงสร้างไว้ในฐานข้อมูล คุณไม่สามารถชี้ Seafile ไปยังไดเรกทอรีที่มีอยู่เดิมเพื่อให้แสดงเป็นไลบรารีได้ ดังนั้นการย้ายข้อมูลจึงหมายถึงการอัปโหลดข้อมูลทั้งหมดที่คุณมีใหม่อีกครั้ง การออกแบบนี้ยังหมายความว่าคุณไม่สามารถดึงข้อมูลออกมาโดยตรงด้วย cp ได้ การกู้คืนข้อมูลต้องทำผ่านเซิร์ฟเวอร์, seaf-fsck เพื่อตรวจสอบความถูกต้องของข้อมูล หรือการเมาท์แบบอ่านอย่างเดียวผ่าน seaf-fuse
rclone มีแบ็กเอนด์สำหรับ Seafile โดยเฉพาะ ซึ่งช่วยเปลี่ยนการอัปโหลดให้เป็นคำสั่งเดียวที่สามารถทำต่อได้ (resumable) แทนการลากและวางไฟล์เป็นเวลานาน
rclone config
rclone copy /srv/files seafile:MyLibrary --progressเอกสารของ rclone ระบุว่าได้ทดสอบกับ Seafile เวอร์ชัน 6.x ถึง 9.x แล้ว ดังนั้นควรทดสอบกับโฟลเดอร์ขนาดเล็กก่อนที่จะเริ่มอัปโหลดข้อมูลขนาดหนึ่งเทราไบต์
ไลบรารีแบบเข้ารหัส (Encrypted libraries) คือฟีเจอร์หลักที่ดึงดูดผู้ใช้งาน รหัสผ่านจะถูกตั้งค่าที่ฝั่งไคลเอนต์ และเซิร์ฟเวอร์จะจัดเก็บเฉพาะบล็อกข้อมูลที่ไม่สามารถอ่านได้ ข้อควรทราบตามความเป็นจริงคือ การดูตัวอย่างไฟล์จากไลบรารีที่เข้ารหัสผ่านเบราว์เซอร์ จะเป็นการส่งรหัสผ่านไปยังเซิร์ฟเวอร์สำหรับเซสชันนั้นๆ ดังนั้นการดูตัวอย่างผ่านเบราว์เซอร์และการจัดเก็บข้อมูลแบบ zero-knowledge จึงไม่สามารถใช้งานพร้อมกันได้ การเปรียบเทียบระหว่าง Seafile และ Nextcloud ครอบคลุมรายละเอียดส่วนที่เหลือของการเปรียบเทียบฟีเจอร์เหล่านี้
การจัดเก็บข้อมูลแบบ Object storage ร่วมกับซิงค์ไคลเอนต์
หากเป้าหมายคือการจัดเก็บข้อมูลจำนวนมากในราคาประหยัดและสามารถเข้าถึงได้ผ่านสคริปต์ ให้รัน S3 compatible object store และจัดการเรื่องการซิงค์เป็นเครื่องมือแยกต่างหาก คุณจะได้รับความทนทาน (durability), การทำ versioning และโปรโตคอลที่เครื่องมือสำรองข้อมูลส่วนใหญ่รองรับอยู่แล้ว แต่คุณจะไม่ได้ระบบบัญชีผู้ใช้ในแบบ file-server หรือตัวจัดการไฟล์ที่ใช้งานง่าย การทำ Self-hosted object storage ด้วย MinIO ครอบคลุมเนื้อหาฝั่งเซิร์ฟเวอร์
rclone copy /srv/files s3remote:mybucket --progress
rclone check /srv/files s3remote:mybucketrclone check จะเปรียบเทียบข้อมูลทั้งสองฝั่งโดยใช้ขนาดและค่า hash จากนั้นจะแสดงจำนวนไฟล์ที่แตกต่างกัน หากผลลัพธ์ไม่ใช่ศูนย์แสดงว่าการคัดลอกยังไม่สมบูรณ์ ดังนั้นให้รัน copy อีกครั้งก่อนที่คุณจะลบข้อมูลต้นทาง สิ่งที่ควรทราบมีสองประการ: object storage ไม่มีโครงสร้างไดเรกทอรี มีเพียง key prefixes เท่านั้น ดังนั้นโฟลเดอร์ว่างจะไม่ถูกคัดลอกไป เว้นแต่คุณจะเพิ่ม --create-empty-src-dirs และเปิดใช้งาน directory markers ด้วย --s3-directory-markers ซึ่งจะเป็นการอัปโหลด object ว่างที่ลงท้ายด้วยเครื่องหมาย slash สำหรับแต่ละโฟลเดอร์ และการเพิ่มค่า --transfers ร่วมกับ S3 chunk size คือสิ่งที่ทำให้การใช้หน่วยความจำของ rclone เพิ่มสูงขึ้น ดังนั้นควรคงค่าทั้งสองไว้ที่ค่าเริ่มต้นหากใช้งานบน VPS ขนาด 1 GB
การใช้ WebDAV หรือ SFTP แบบปกติเมื่อคุณต้องการเพียงแค่เข้าถึงไฟล์จากระยะไกล
ทางเลือกที่ประหยัดที่สุดมักจะเป็นการไม่ติดตั้งอะไรเพิ่มเลย หาก VPS ของคุณรัน OpenSSH อยู่แล้ว คุณก็มีเซิร์ฟเวอร์สำหรับเก็บไฟล์ใช้งานได้ทันที SFTP ไม่จำเป็นต้องใช้ daemon เพิ่มเติม ไม่ต้องมีฐานข้อมูล ไม่ต้องใช้ PHP และไม่ต้องคอยอัปเดตซึ่งอาจทำให้ระบบพังในวันหยุดได้
sftp you@your-vps
rclone mount sftpremote: ~/vps --vfs-cache-mode writesสำหรับไคลเอนต์ที่รองรับโปรโตคอล WebDAV ซึ่งรวมถึงแอปจัดการไฟล์บนโทรศัพท์ส่วนใหญ่ rclone สามารถทำหน้าที่ให้บริการไฟล์ในโครงสร้างเดียวกันได้
sudo apt install apache2-utils
sudo htpasswd -c /etc/rclone/htpasswd you
rclone serve webdav --addr 127.0.0.1:8080 --htpasswd /etc/rclone/htpasswd /srv/filesให้ผูกบริการไว้กับ 127.0.0.1 และวาง reverse proxy ที่มี TLS (transport layer security) ไว้ด้านหน้า การยืนยันตัวตนแบบ basic authentication ของ WebDAV จะส่งรหัสผ่านไปพร้อมกับทุกคำขอ ดังนั้นการใช้ HTTP แบบปกติในกรณีนี้จึงเท่ากับการส่งรหัสผ่านผ่านเครือข่ายหลายครั้งต่อนาที ต้นทุนในการย้ายระบบเป็นศูนย์เพราะไฟล์ไม่ต้องถูกย้ายไปไหน ข้อเสียคือไม่มีระบบซิงค์และไม่มีสำเนาแบบออฟไลน์ เมื่อการเชื่อมต่อขาดหายไป ไฟล์บนไคลเอนต์ก็จะเข้าถึงไม่ได้จนกว่าการเชื่อมต่อจะกลับมาใช้งานได้อีกครั้ง
สิ่งที่ใช้แทนปฏิทิน รายชื่อผู้ติดต่อ และการแก้ไขเอกสาร
การเลิกใช้ Nextcloud ทำให้คุณต้องสูญเสียความสามารถบางอย่างไป ซึ่งควรทำความเข้าใจให้ชัดเจนว่าคืออะไร ปฏิทินและรายชื่อผู้ติดต่อทำงานผ่านโปรโตคอล CalDAV และ CardDAV (การซิงค์ปฏิทินและรายชื่อผู้ติดต่อผ่าน HTTP) โดยมี Radicale เป็นตัวเลือกขนาดเล็กที่ใช้ทดแทนได้ Radicale จะจัดเก็บแต่ละคอลเลกชันเป็นไฟล์บนดิสก์และใช้หน่วยความจำเพียงหลักสิบเมกะไบต์เท่านั้น
sudo apt install radicale
sudo systemctl enable --now radicale
sudo ss -lntp | grep 5232แพ็กเกจนี้มาพร้อมกับ /usr/lib/systemd/system/radicale.service และไฟล์ตั้งค่าเริ่มต้นที่ /etc/radicale/config โดยทำงานบนพอร์ต localhost:5232 เนื่องจาก Radicale ไม่มีอินเทอร์เฟซสำหรับแก้ไขกิจกรรม คุณจึงต้องเชื่อมต่อแอปพลิเคชันบนโทรศัพท์หรือคอมพิวเตอร์เข้ากับเซิร์ฟเวอร์เพื่อจัดการข้อมูลเหล่านั้น
การแก้ไขเอกสารผ่านเบราว์เซอร์นั้นหาตัวแทนได้ยากกว่า OnlyOffice Docs และ Collabora Online เป็นเพียงเอนจินสำหรับการแก้ไข ไม่ใช่ระบบจัดเก็บไฟล์ แต่ละตัวจำเป็นต้องมีแอปพลิเคชันโฮสต์เพื่อเก็บไฟล์และส่งต่อเอกสารให้ หากคุณเลิกใช้ Nextcloud คุณจำเป็นต้องมีโฮสต์อื่น เช่น Seafile ซึ่งมีโปรแกรมแก้ไขเอกสาร SeaDoc ของตนเอง นอกจากนี้ Seafile ยังสามารถส่งไฟล์เอกสารไปให้เซิร์ฟเวอร์ OnlyOffice ประมวลผลได้ ซึ่งอาจรันอยู่บนเครื่องอื่นแยกต่างหาก การเปรียบเทียบระหว่าง OnlyOffice และ Collabora จะช่วยให้คุณตัดสินใจได้ว่าควรเลือกใช้เอนจินตัวใดเมื่อคุณเลือกโฮสต์ที่เหมาะสมได้แล้ว
คงการใช้งาน Nextcloud ไว้หากเงื่อนไขเหล่านี้เป็นจริง
- มีผู้ใช้งานหลายคนใช้ปฏิทินและสมุดรายชื่อร่วมกัน โดยใช้บัญชีเดียวกับที่ใช้จัดการไฟล์
- คุณมีการแก้ไขเอกสาร Office ผ่านเบราว์เซอร์ในไฟล์เดียวกันพร้อมกับผู้อื่น
- คุณต้องการลิงก์แชร์รายไฟล์ที่กำหนดวันหมดอายุและรหัสผ่านได้ รวมถึงการจัดการสิทธิ์ระดับกลุ่ม
- ผู้ใช้งานของคุณไม่มีความเชี่ยวชาญด้านเทคนิค และใช้งานผ่านแอปพลิเคชันบนมือถือเป็นหลัก
สำหรับงานเหล่านี้ยังไม่มีโซลูชันอื่นที่มีน้ำหนักเบากว่าและสามารถทำได้ครบถ้วน การตัดสินใจที่ตรงไปตรงมาที่สุดคือการแก้ไขการติดตั้งเดิมให้ดีขึ้นแทนที่จะเปลี่ยนไปใช้ระบบอื่น อินสแตนซ์ส่วนใหญ่ที่ทำงานช้าเกิดจากการใช้ PHP-FPM pool ค่าเริ่มต้นโดยไม่ได้ตั้งค่า memory cache ซึ่งหน้าภาพรวมผู้ดูแลระบบของ Nextcloud จะแจ้งเตือนหากไม่มีการตั้งค่า cache ไว้ การลดจำนวนไฟล์ที่ระบบต้องติดตามส่งผลดีมากกว่าการปรับแต่งเพียงจุดเดียว เพราะตาราง file cache คือส่วนที่ขยายตัวได้มากที่สุด การติดตั้ง Nextcloud บน VPS ด้วย Docker, TLS และการสำรองข้อมูล ได้แนะนำวิธีการตั้งค่าที่ช่วยหลีกเลี่ยงปัญหาเหล่านี้ส่วนใหญ่ได้
ต้นทุนที่แท้จริงของการย้ายระบบ แยกตามตัวเลือก
- Syncthing: ไม่มีการนำเข้าข้อมูล (import) ให้ชี้ไปยังโครงสร้างไฟล์ที่คุณมีอยู่แล้วทั้งสองฝั่ง แล้วปล่อยให้ระบบซิงค์ข้อมูลเข้าหากัน
- SFTP หรือ WebDAV บนโครงสร้างไฟล์เดิม: ไม่ต้องนำเข้าข้อมูลใดๆ เพราะไม่มีการย้ายไฟล์
- Object storage: ต้องคัดลอกผ่านเครือข่ายเต็มจำนวนหนึ่งรอบ ซึ่งสามารถทำต่อจากจุดเดิมและเขียนสคริปต์ได้ แต่โฟลเดอร์ว่างจะไม่ถูกคัดลอกไปเว้นแต่จะเปิดใช้งานตัวระบุไดเรกทอรี (directory markers)
- Seafile: ต้องอัปโหลดข้อมูลทั้งหมดเข้าสู่ไลบรารีหนึ่งรอบ เพราะเซิร์ฟเวอร์จัดเก็บข้อมูลในรูปแบบบล็อกแทนที่จะเป็นไฟล์ปกติ
ไม่ว่าคุณจะเลือกวิธีใด ให้คัดลอกข้อมูลที่สะอาดออกมาจาก Nextcloud ก่อน ไฟล์ของผู้ใช้จะอยู่ในไดเรกทอรี data ในรูปแบบปกติ โดยแยกเป็นโฟลเดอร์ตามรายชื่อผู้ใช้ ดังนั้น rsync ของโครงสร้างไฟล์นั้นคือแหล่งข้อมูลของคุณ ให้ตั้งค่าอินสแตนซ์เป็นโหมด maintenance ก่อนเริ่มคัดลอก มิฉะนั้นคุณอาจได้ไฟล์ที่อยู่ในระหว่างการเขียนข้อมูล
sudo -u www-data php occ maintenance:mode --on
sudo rsync -a --info=progress2 /path/to/nextcloud/data/ /srv/files/
find /srv/files -type f | wc -lเปรียบเทียบจำนวนไฟล์ที่นับได้กับ find เดียวกันบนแหล่งข้อมูลต้นทาง หากจำนวนไม่เท่ากัน มักหมายความว่าสิทธิ์การเข้าถึงขัดขวาง rsync ไม่ให้เข้าถึงไฟล์บางรายการ ซึ่งระบบจะแสดงข้อผิดพลาดเหล่านั้นออกมาในระหว่างการทำงาน
มีกับดักสองประการในการคัดลอกนี้ ไฟล์ที่เข้าถึงผ่านฟีเจอร์ external storage ของ Nextcloud จะไม่ได้อยู่ในไดเรกทอรี data เพราะไฟล์เหล่านั้นเก็บอยู่บนระบบภายนอกที่ Nextcloud เชื่อมต่อไว้ และหากเคยเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ (server-side encryption) ไฟล์บนดิสก์จะเป็น ciphertext ดังนั้น occ encryption:decrypt-all จะต้องทำงานก่อนการคัดลอก มิฉะนั้นคุณจะย้ายโฟลเดอร์ที่มีแต่ข้อมูลที่อ่านไม่ได้ไปแทน ให้ตรวจสอบทั้งสองกรณีนี้ก่อนที่คุณจะยกเลิกการทำงานใดๆ
FAQ
มีทางเลือกอื่นแทน Nextcloud ที่ยังคงโครงสร้างโฟลเดอร์เดิมของฉันไว้หรือไม่?
Syncthing รวมถึงการตั้งค่าผ่าน SFTP หรือ WebDAV แบบปกติทำได้ Syncthing จะทำดัชนีไดเรกทอรีที่คุณระบุและคงชื่อรวมถึงโครงสร้างเดิมไว้ในทุกอุปกรณ์ จึงไม่มีขั้นตอนการนำเข้าหรือการอัปโหลด ส่วน Seafile และ object storage จำเป็นต้องผ่านขั้นตอนการอัปโหลดเต็มรูปแบบ เนื่องจากทั้งสองระบบไม่ได้จัดเก็บข้อมูลของคุณเป็นไฟล์ปกติในโครงสร้างต้นไม้ทั่วไป โดย Seafile จะแบ่งไฟล์ออกเป็นบล็อกภายใต้ไดเรกทอรีข้อมูลของตนเอง ส่วน object storage จะใช้คีย์แทนการใช้ไดเรกทอรี
Seafile จะทำงานบน VPS ขนาด 2 GB ได้หรือไม่?
เอกสารของ Seafile ระบุความต้องการขั้นต่ำที่ RAM 2 GB และ CPU 2 คอร์ที่ความเร็วสูงกว่า 2 GHz ณ เดือนตุลาคม 2026 ให้ถือว่านี่คือระดับต่ำสุดที่ไม่มีพื้นที่เหลือสำหรับงานอื่น เนื่องจากตัว Docker deployment ยังต้องรัน MariaDB, Caddy และ SeaDoc editor ในคอนเทนเนอร์แยกต่างหาก สำหรับผู้ใช้คนเดียวถือว่าใช้งานได้ แต่สำหรับครอบครัวหรือทีมขนาดเล็ก ควรขยับไปใช้ 4 GB หรือตัดคอนเทนเนอร์ SeaDoc ออกจาก stack แล้วยอมสละฟีเจอร์การแก้ไขเอกสารในเบราว์เซอร์ของ SeaDoc ไป ทั้งนี้ การแก้ไขไฟล์ออฟฟิศผ่านเบราว์เซอร์ยังคงทำได้ผ่าน OnlyOffice ซึ่ง Seafile รองรับและสามารถรันบนเครื่องอื่นได้
ทำไมหน้าเว็บอินเทอร์เฟซของ Nextcloud ถึงช้าในขณะที่ความเร็วในการดาวน์โหลดยังคงเร็วอยู่?
เพราะทั้งสองเส้นทางทำงานต่างกัน การดาวน์โหลดคือการสตรีมไบต์จากดิสก์โดยตรง ในขณะที่การโหลดหน้าเว็บต้องรัน PHP, คิวรีตารางแคชไฟล์ และมักจะต้องรอ PHP-FPM worker ที่ว่างอยู่ ให้ลองนับจำนวนแถวใน oc_filecache และตรวจสอบ pm.max_children ใน PHP-FPM pool ของคุณก่อนที่จะโทษระบบจัดเก็บข้อมูล ตารางที่มีข้อมูลหลายล้านแถวกับ pool ที่มี worker เพียง 5 ตัวจะทำให้เกิดรูปแบบนี้อย่างแน่นอน
ฉันสามารถเก็บ Nextcloud ไว้สำหรับปฏิทินและย้ายเฉพาะไฟล์ออกไปได้หรือไม่?
ได้ และมักจะเป็นวิธีที่ประหยัดที่สุด ให้คุณซิงค์โฟลเดอร์ขนาดใหญ่ด้วย Syncthing หรือ Seafile แล้วปล่อยให้ Nextcloud รันต่อไปสำหรับ CalDAV, CardDAV และการแก้ไขเอกสารผ่านเบราว์เซอร์ เนื่องจากฐานข้อมูลของ Nextcloud จะขยายตัวตามจำนวนไฟล์ที่ติดตาม การลบโครงสร้างโฟลเดอร์ขนาดใหญ่ออกจากระบบจึงเป็นสิ่งที่ทำให้หน้าอินเทอร์เฟซกลับมาทำงานได้รวดเร็วอีกครั้ง ให้ลบไฟล์เหล่านั้นผ่านหน้าเว็บอินเทอร์เฟซหรือ occ เท่านั้น อย่าลบจากไดเรกทอรีข้อมูลบนดิสก์โดยตรง มิฉะนั้นฐานข้อมูลจะยังคงเก็บแถวที่ชี้ไปยังไฟล์ที่ไม่มีอยู่จริงเอาไว้