เพื่อให้การสำรองข้อมูล Nextcloud มีความน่าเชื่อถือ ให้หยุดกิจกรรมของผู้ใช้ชั่วคราว ส่งออกฐานข้อมูล และใช้ Restic เพื่อบันทึกการส่งออกนั้นพร้อมกับแอปพลิเคชันและไดเร็กทอรีข้อมูล ใส่คำสั่งนี้ไว้ในสคริปต์ที่ผู้ใช้ root เป็นเจ้าของ และกำหนดเวลาด้วย cron ตรวจสอบสแนปช็อตและทำการกู้คืนทดสอบก่อนที่จะเชื่อถือการกำหนดเวลาดังกล่าว
ตัวอย่างนี้สมมติว่าใช้เซิร์ฟเวอร์ Debian หรือ Ubuntu การติดตั้ง Nextcloud โดยตรงที่/var/www/nextcloudไดเร็กทอรีข้อมูลแยกต่างหากที่/srv/nextcloud-dataและ MariaDB โปรดแทนที่ค่าเหล่านั้นด้วยเส้นทางและชื่อฐานข้อมูลจริงของคุณ ขั้นตอนเหล่านี้ได้รับการตรวจสอบกับคู่มือการดูแลระบบ Nextcloud 35 และเอกสาร Restic 0.19.1 ในเดือนตุลาคม 2026
ภาพประกอบในรูปแบบเทอร์มินัลแสดงขั้นตอนสองอย่างที่เริ่มต้นการสำรองข้อมูลอย่างสม่ำเสมอ ได้แก่ การเปิดใช้งานโหมดบำรุงรักษาและการส่งออกฐานข้อมูล
การสำรองข้อมูล Nextcloud ต้องประกอบด้วยอะไรบ้าง?
คำแนะนำการสำรองข้อมูลของ Nextcloud ระบุว่าส่วนสำคัญที่ควรเก็บรักษาไว้ ได้แก่ การกำหนดค่า ข้อมูล ฐานข้อมูล ธีม และแอปพลิเคชันที่กำหนดเอง การสำรองข้อมูลไดเร็กทอรีแอปพลิเคชันทั้งหมดมักจะรวมถึงการกำหนดค่าและแอปพลิเคชันที่มาพร้อมกัน แต่ให้ตรวจสอบว่าแอปพลิเคชันที่กำหนดเอง ธีม หรือไดเร็กทอรีข้อมูลอยู่ที่อื่นบนเซิร์ฟเวอร์ของคุณหรือไม่ ระบุเส้นทางแยกต่างหากทั้งหมดในคำสั่ง Restic
โหมดบำรุงรักษาจะล็อกเซสชันที่มีอยู่และป้องกันการเข้าสู่ระบบใหม่ในขณะที่การสำรองข้อมูลกำลังทำงาน ซึ่งจะทำให้ฐานข้อมูลและไฟล์มีโอกาสเปลี่ยนแปลงน้อยลงในเวลาต่างๆ แต่ก็ทำให้ Nextcloud ไม่สามารถใช้งานได้ในช่วงเวลานั้นด้วย สำหรับที่เก็บข้อมูลขนาดใหญ่ ให้กำหนดเวลาการทำงานในช่วงเวลาที่ไม่วุ่นวาย หากเซิร์ฟเวอร์ของคุณมีตัวประมวลผลภายนอกหรือสคริปต์ที่เขียนลงในไดเร็กทอรีข้อมูลโดยตรง ให้หยุดการทำงานของสิ่งเหล่านั้นด้วย
คำแนะนำการสำรองข้อมูลอย่างเป็นทางการของ Nextcloud อธิบายถึงส่วนประกอบและตัวเลือกการส่งออกฐานข้อมูล ขั้นตอนนี้ใช้ MariaDB สำหรับ PostgreSQL, MySQL หรือ SQLite ให้ใช้คำสั่งสำรองข้อมูลและกู้คืนที่ตรงกันใน ส่วนของฐานข้อมูลใน คู่มือฉบับนั้น
เตรียม Restic ให้พร้อมและปกป้องข้อมูลประจำตัวของมัน
ติดตั้ง Restic และไคลเอ็นต์ MariaDB โดยใช้แหล่งแพ็กเกจที่เชื่อถือได้ของระบบปฏิบัติการของคุณ เลือกที่เก็บข้อมูลบนดิสก์อื่นหรือเป้าหมายการสำรองข้อมูลระยะไกล ที่เก็บข้อมูลที่จัดเก็บไว้เฉพาะบนเซิร์ฟเวอร์ Nextcloud ไม่สามารถป้องกันการสูญหายของเซิร์ฟเวอร์หรือพื้นที่จัดเก็บข้อมูลได้ อย่าวางที่เก็บข้อมูลไว้ในไดเร็กทอรีใด ๆ ที่กำลังสำรองข้อมูล
Restic เข้ารหัสข้อมูลในที่เก็บข้อมูล แต่คุณต้องใช้รหัสผ่านของที่เก็บข้อมูลเพื่อกู้คืนข้อมูล สร้างไฟล์รหัสผ่านและเก็บสำเนาไว้ในที่ปลอดภัยนอกเซิร์ฟเวอร์ เช่น ในโปรแกรมจัดการรหัสผ่านที่ได้รับอนุญาต หากรหัสผ่านหาย ข้อมูลที่เข้ารหัสไว้จะไม่สามารถอ่านได้ หลีกเลี่ยงการใส่รหัสผ่านโดยตรงในบรรทัดคำสั่ง, crontab หรือสคริปต์
sudo install -d -m 700 /root/.config/restic
sudo install -m 600 /dev/null /root/.config/restic/nextcloud-password
sudo install -m 600 /dev/null /root/.config/restic/nextcloud.env
บันทึกรหัสผ่าน Restic ที่เลือกไว้อย่างปลอดภัยลงในไฟล์รหัสผ่าน ระบุตำแหน่งที่ตั้งของที่เก็บข้อมูลและเส้นทางของไฟล์รหัสผ่านในไฟล์สภาพแวดล้อม:
RESTIC_REPOSITORY=/mnt/backup/nextcloud
RESTIC_PASSWORD_FILE=/root/.config/restic/nextcloud-password
สำหรับแบ็กเอนด์ระยะไกล ให้ใช้ URL และข้อมูลประจำตัวของที่เก็บข้อมูลที่ระบุไว้ในเอกสารของแบ็กเอนด์นั้น ซึ่งจัดเก็บไว้ด้วยการจำกัดสิทธิ์ Restic ได้อธิบายการตั้งค่าที่เก็บข้อมูลและตัวแปรสภาพแวดล้อมไฟล์รหัสผ่านที่รองรับไว้ในคู่มือการเตรียมที่เก็บข้อมูลเริ่มต้นที่เก็บข้อมูลใหม่เพียงครั้งเดียว ไม่ใช่ทุกครั้งที่เรียกใช้งาน:
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
ตัวอย่างการตั้งค่าสำหรับที่เก็บข้อมูล Restic ที่เข้ารหัส โดยรหัสผ่านจะถูกเก็บไว้ในไฟล์ที่ได้รับการป้องกันแยกต่างหาก
ข้อมูลรับรองของ MariaDB ก็ต้องการการปกป้องเช่นกัน กำหนดค่าไฟล์ตัวเลือกไคลเอ็นต์ที่ root สามารถอ่านได้ เช่น ไฟล์/root/.my.cnfที่มีชื่อผู้ใช้ฐานข้อมูล รหัสผ่าน และโฮสต์ จากนั้นตั้งค่าสิทธิ์การเข้าถึงของ600ไฟล์นั้น สคริปต์ด้านล่างจะส่งไฟล์นั้นไปยังmariadb-dumpดังนั้นรหัสผ่านฐานข้อมูลจะไม่ปรากฏในอาร์กิวเมนต์ของกระบวนการ
สร้างสคริปต์สำรองข้อมูลที่ทำให้ Nextcloud กลับมาใช้งานได้อีกครั้ง
บันทึกข้อความต่อไปนี้เป็น/usr/local/sbin/nextcloud-restic-backup. ปรับค่าNC_DATA_DIRและDB_NAMEให้ตรงกันconfig/config.phpสคริปต์นี้จะเปิดใช้งานโหมดบำรุงรักษา ส่งออก MariaDB สำรองข้อมูลแอปพลิเคชัน ข้อมูล และไฟล์ SQL ชั่วคราว จากนั้นปิดใช้งานโหมดบำรุงรักษาแม้ว่าคำสั่งในภายหลังจะล้มเหลวก็ตาม
#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf
set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0
mountpoint -q /mnt/backup || {
echo "Backup target is not mounted" >&2
exit 1
}
install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0
cleanup() {
if [[ "$maintenance_on" -eq 1 ]]; then
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
logger -t nextcloud-restic "Could not disable maintenance mode"
fi
rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction --default-character-set=utf8mb4 "$DB_NAME" > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"
restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud
ตั้งค่าความเป็นเจ้าของและสิทธิ์การเข้าถึงเพื่อให้เฉพาะผู้ใช้ root เท่านั้นที่สามารถแก้ไขหรือเรียกใช้สคริปต์ได้ จากนั้นทดสอบด้วยตนเองในระหว่างช่วงเวลาการบำรุงรักษาmountpointการตรวจสอบนี้จะป้องกันไม่ให้ดิสก์สำรองข้อมูลที่หายไปส่งข้อมูลขนาดใหญ่ไปยังระบบไฟล์ภายในเครื่องของเซิร์ฟเวอร์โดยไม่แจ้งให้ทราบ หากที่เก็บข้อมูลของคุณอยู่บนเซิร์ฟเวอร์ระยะไกลแทนที่จะติดตั้งในเครื่อง ให้แทนที่การตรวจสอบนั้นด้วยการตรวจสอบที่เชื่อถือได้สำหรับแบ็กเอนด์ของคุณ
ตรวจสอบเส้นทางของคุณก่อนเริ่มใช้งานครั้งแรก หากโฟลเดอร์ข้อมูลอยู่ภายในอยู่แล้ว/var/www/nextcloudอย่าคิดว่าเส้นทางตัวอย่างถูกต้อง ให้ใช้ไดเร็กทอรีข้อมูลจริงจากการตั้งค่าของ Nextcloud นอกจากนี้ โปรดตรวจสอบให้แน่ใจว่าแอปหรือธีมที่กำหนดเองซึ่งจัดเก็บอยู่นอกไดเร็กทอรีแอปพลิเคชันนั้นรวมอยู่ด้วยอย่างชัดเจน
การสำรองข้อมูลด้วย Restic ประกอบด้วยแอปพลิเคชัน ไฟล์ผู้ใช้ และไฟล์สำรองฐานข้อมูลที่สร้างขึ้นสำหรับการทำงานครั้งนี้
ตั้งเวลาการทำงานของ cron และตรวจสอบผลลัพธ์
หลังจากรันด้วยตนเองสำเร็จแล้ว ให้เพิ่มรายการ crontab ในระดับ root โดยใช้คำสั่ง `crontab entry` sudo crontab -eตัวอย่างนี้จะเริ่มงานทุกวันเวลา 2:30 น. โดยใช้พาธแบบเต็มของสคริปต์ และบันทึกผลลัพธ์เพื่อใช้ในการแก้ไขปัญหา:
30 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1
Cron มีสภาพแวดล้อมที่จำกัด ดังนั้นสคริปต์จึงกำหนดค่าPATHและโหลดการตั้งค่า Restic ด้วยตนเอง ตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน cron ในระบบปฏิบัติการของคุณแล้ว และเวลาดังกล่าวไม่ทับซ้อนกับตัวเรียกใช้งานงานเบื้องหลังของ Nextcloud หรือภารกิจการบำรุงรักษาอื่น ๆคู่มือ crontab ของ Linux อธิบายรูปแบบการกำหนดเวลาและสภาพแวดล้อมที่ cron จัดหาให้
ตรวจสอบว่างานเสร็จสมบูรณ์แล้วโดยตรวจสอบ/var/log/nextcloud-restic.logการออกจากระบบอย่างสำเร็จและแสดงรายการภาพหน้าจอที่เพิ่งบันทึกล่าสุด:
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic snapshots'
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic check'
โดยปกติแล้ว Restic checkจะตรวจสอบโครงสร้างของที่เก็บข้อมูล การอ่านข้อมูลทั้งหมดใช้เวลานานกว่าและอาจใช้แบนด์วิดท์จำนวนมากสำหรับที่เก็บข้อมูลระยะไกล ดังนั้นควรตั้งเวลาตรวจสอบrestic check --read-dataเป็นระยะ หรือใช้--read-data-subsetตรวจสอบบางส่วนในช่วงเวลาต่างๆ ดูเอกสารเกี่ยวกับความสมบูรณ์ของที่เก็บข้อมูล ของ Restic เพิ่มเติม
การแสดงรายการสแนปช็อตไม่ใช่การทดสอบการกู้คืน ให้กู้คืนสแนปช็อตล่าสุดไปยังไดเร็กทอรีชั่วคราวแยกต่างหากโดยใช้ คำสั่ง `restore_data_directory` restic restore latest --target /tmp/nextcloud-restore-testจากนั้นตรวจสอบว่าไฟล์แอปพลิเคชัน ไดเร็กทอรีข้อมูล และไฟล์ SQL dump มีอยู่ครบถ้วน อย่าทำการกู้คืนทับการติดตั้งที่ใช้งานอยู่เพื่อทำการทดสอบ สำหรับการกู้คืนจริง ให้กู้คืนไฟล์และฐานข้อมูลเป็นชุดเดียวกันคำแนะนำในการกู้คืน ของ Nextcloud ครอบคลุมถึงการสร้างฐานข้อมูลใหม่และการพิจารณาการซิงโครไนซ์ไคลเอ็นต์
การตั้งค่านี้ให้สแนปช็อตที่เข้ารหัสซ้ำได้ แต่ cron ไม่ตรวจสอบความล้มเหลวของตัวเอง และ Restic ไม่ได้กำหนดนโยบายการเก็บรักษาข้อมูลของคุณ ตรวจสอบบันทึกหรือกำหนดค่าการแจ้งเตือนสำหรับการทำงานที่ล้มเหลว เก็บสำเนาข้อมูลประจำตัวของที่เก็บข้อมูลแยกต่างหาก และทดสอบการกู้คืนตามกำหนดเวลาปกติ หากช่วงเวลาการบำรุงรักษานานเกินไป ให้ใช้สแนปช็อตของระบบไฟล์ที่ประสานงานกันและการส่งออกที่สอดคล้องกับฐานข้อมูลซึ่งออกแบบมาสำหรับแพลตฟอร์มการจัดเก็บข้อมูลของคุณ แทนที่จะสำรองข้อมูลไฟล์ที่เปลี่ยนแปลงแบบเรียลไทม์
กำหนดการนี้จะเรียกใช้สคริปต์ที่ผู้ใช้ root เป็นเจ้าของทุกวัน รายการสแนปช็อตเป็นวิธีตรวจสอบอย่างรวดเร็วว่าการทำงานต่างๆ ได้รับการบันทึกไว้แล้วหรือไม่