ทำการสำรองข้อมูล Nextcloud อย่างสม่ำเสมอโดยอัตโนมัติด้วย Restic และ Cron

เพื่อให้การสำรองข้อมูล Nextcloud มีความน่าเชื่อถือ ให้หยุดกิจกรรมของผู้ใช้ชั่วคราว ส่งออกฐานข้อมูล และใช้ Restic เพื่อบันทึกการส่งออกนั้นพร้อมกับแอปพลิเคชันและไดเร็กทอรีข้อมูล ใส่คำสั่งนี้ไว้ในสคริปต์ที่ผู้ใช้ root เป็นเจ้าของ และกำหนดเวลาด้วย cron ตรวจสอบสแนปช็อตและทำการกู้คืนทดสอบก่อนที่จะเชื่อถือการกำหนดเวลาดังกล่าว

ตัวอย่างนี้สมมติว่าใช้เซิร์ฟเวอร์ Debian หรือ Ubuntu การติดตั้ง Nextcloud โดยตรงที่/var/www/nextcloudไดเร็กทอรีข้อมูลแยกต่างหากที่/srv/nextcloud-dataและ MariaDB โปรดแทนที่ค่าเหล่านั้นด้วยเส้นทางและชื่อฐานข้อมูลจริงของคุณ ขั้นตอนเหล่านี้ได้รับการตรวจสอบกับคู่มือการดูแลระบบ Nextcloud 35 และเอกสาร Restic 0.19.1 ในเดือนตุลาคม 2026

ภาพประกอบเทอร์มินัลสีเข้มแสดงให้เห็นว่าโหมดบำรุงรักษาของ Nextcloud ถูกเปิดใช้งานก่อนการส่งออกฐานข้อมูล MariaDB
ภาพประกอบในรูปแบบเทอร์มินัลแสดงขั้นตอนสองอย่างที่เริ่มต้นการสำรองข้อมูลอย่างสม่ำเสมอ ได้แก่ การเปิดใช้งานโหมดบำรุงรักษาและการส่งออกฐานข้อมูล

การสำรองข้อมูล 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 เส้นทางของไฟล์รหัสผ่าน และคำสั่ง 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 กำลังสำรองข้อมูลไดเร็กทอรีแอปพลิเคชัน Nextcloud ไดเร็กทอรีข้อมูลแยกต่างหาก และไดเร็กทอรีชั่วคราวสำหรับไฟล์ดัมพ์ SQL
การสำรองข้อมูลด้วย 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 ไม่ได้กำหนดนโยบายการเก็บรักษาข้อมูลของคุณ ตรวจสอบบันทึกหรือกำหนดค่าการแจ้งเตือนสำหรับการทำงานที่ล้มเหลว เก็บสำเนาข้อมูลประจำตัวของที่เก็บข้อมูลแยกต่างหาก และทดสอบการกู้คืนตามกำหนดเวลาปกติ หากช่วงเวลาการบำรุงรักษานานเกินไป ให้ใช้สแนปช็อตของระบบไฟล์ที่ประสานงานกันและการส่งออกที่สอดคล้องกับฐานข้อมูลซึ่งออกแบบมาสำหรับแพลตฟอร์มการจัดเก็บข้อมูลของคุณ แทนที่จะสำรองข้อมูลไฟล์ที่เปลี่ยนแปลงแบบเรียลไทม์

ภาพประกอบในเทอร์มินัลแสดงรายการ cron รายวันสำหรับสคริปต์ Nextcloud Restic พร้อมกับคำสั่ง restic snapshots
กำหนดการนี้จะเรียกใช้สคริปต์ที่ผู้ใช้ root เป็นเจ้าของทุกวัน รายการสแนปช็อตเป็นวิธีตรวจสอบอย่างรวดเร็วว่าการทำงานต่างๆ ได้รับการบันทึกไว้แล้วหรือไม่

ฝากความเห็น

การตั้งค่า KVM ใน SLES 15: กำหนดให้ VM ที่เลือกเริ่มต้นทำงานเมื่อบูตเครื่อง

การตั้งค่า KVM ใน SLES 15: กำหนดให้ VM ที่เลือกเริ่มต้นทำงานเมื่อบูตเครื่อง

ติดตั้งเครื่องมือ SLES 15 KVM และ libvirt เปิดใช้งานบริการโฮสต์ที่ถูกต้อง และกำหนดค่าเครื่องเสมือนที่เลือกให้เริ่มต้นทำงานหลังจากรีบูตเครื่อง

ทำการสำรองข้อมูล Nextcloud อย่างสม่ำเสมอโดยอัตโนมัติด้วย Restic และ Cron

ทำการสำรองข้อมูล Nextcloud อย่างสม่ำเสมอโดยอัตโนมัติด้วย Restic และ Cron

สำรองข้อมูลไฟล์ของ Nextcloud และ MariaDB ไปพร้อมกัน กำหนดเวลาสร้างสแนปช็อต Restic ที่เข้ารหัสด้วย cron และตรวจสอบการกู้คืนโดยไม่ต้องเสี่ยงต่อเซิร์ฟเวอร์ที่ใช้งานอยู่

สำรองข้อมูลและกู้คืนกล่องจดหมาย Zimbra CE โดยใช้การส่งออก TGZ

สำรองข้อมูลและกู้คืนกล่องจดหมาย Zimbra CE โดยใช้การส่งออก TGZ

ส่งออกกล่องจดหมาย Zimbra Community Edition ส่วนบุคคล ตรวจสอบความถูกต้องของการสำรองข้อมูล TGZ และกู้คืนรายการที่หายไปโดยไม่เขียนทับอีเมลที่มีอยู่

อนุญาตให้ผู้ใช้ที่ได้รับอนุญาตสร้างห้อง Jitsi ด้วยการลงชื่อเข้าใช้ Keycloak

อนุญาตให้ผู้ใช้ที่ได้รับอนุญาตสร้างห้อง Jitsi ด้วยการลงชื่อเข้าใช้ Keycloak

อนุญาตเฉพาะบัญชีที่ได้รับอนุมัติเท่านั้นให้เริ่มห้องประชุม Jitsi Meet โดยใช้ Keycloak และการตรวจสอบสิทธิ์ด้วยโทเค็น ในขณะที่ยังคงเปิดให้ผู้เยี่ยมชมเข้าร่วมได้เมื่อจำเป็น

ซิงค์ผู้ใช้ Active Directory กับ ONLYOFFICE DocSpace ผ่าน LDAP

ซิงค์ผู้ใช้ Active Directory กับ ONLYOFFICE DocSpace ผ่าน LDAP

เชื่อมต่อ ONLYOFFICE DocSpace กับ Active Directory หรือ OpenLDAP นำเข้าผู้ใช้และกลุ่มได้อย่างปลอดภัย แมปฟิลด์บัญชี และกำหนดเวลาการซิงโครไนซ์ที่เชื่อถือได้

เพิ่มฟอนต์ลงใน ONLYOFFICE Document Server: Docker เทียบกับ Linux

เพิ่มฟอนต์ลงใน ONLYOFFICE Document Server: Docker เทียบกับ Linux

ติดตั้งฟอนต์แบบกำหนดเองใน ONLYOFFICE Document Server เปรียบเทียบการเมานต์ Docker แบบถาวรกับสำเนาโดยตรง สร้างรายการฟอนต์ใหม่ และตรวจสอบผลลัพธ์

วาง ONLYOFFICE Docs ไว้หลัง HAProxy โดยไม่ทำให้การแก้ไขเอกสารหยุดชะงัก

วาง ONLYOFFICE Docs ไว้หลัง HAProxy โดยไม่ทำให้การแก้ไขเอกสารหยุดชะงัก

ตั้งค่า HAProxy สำหรับ HTTPS, การส่งต่อส่วนหัว, การหมดเวลาของ WebSocket และการตรวจสอบสถานะสำหรับ ONLYOFFICE Docs จากนั้นตรวจสอบการแก้ไขและการบันทึก

ติดตั้งและลงนามโมดูลเคอร์เนลแบบกำหนดเองบน SLES 15 Secure Boot

ติดตั้งและลงนามโมดูลเคอร์เนลแบบกำหนดเองบน SLES 15 Secure Boot

โหลดโมดูลเคอร์เนล SLES 15 แบบกำหนดเองโดยไม่ต้องปิดใช้งาน Secure Boot จับคู่เคอร์เนลที่กำลังทำงานอยู่ ลงนามในไฟล์ .ko ลงทะเบียนคีย์ MOK และตรวจสอบการโหลด

การส่งต่อ Syslog ของ SLES อย่างปลอดภัยด้วย rsyslog และ Mutual TLS

การส่งต่อ Syslog ของ SLES อย่างปลอดภัยด้วย rsyslog และ Mutual TLS

ส่งบันทึกระบบ SLES ไปยังตัวเก็บรวบรวม rsyslog ระยะไกลผ่าน TLS ที่มีการตรวจสอบสิทธิ์ พร้อมด้วยการตรวจสอบใบรับรอง การบัฟเฟอร์เมื่อระบบขัดข้อง และการทดสอบการส่งมอบ

วิธีการบูต Ubuntu Server เข้าสู่โหมดฉุกเฉิน: คู่มือการกู้คืนทีละขั้นตอน

วิธีการบูต Ubuntu Server เข้าสู่โหมดฉุกเฉิน: คู่มือการกู้คืนทีละขั้นตอน

ตรวจสอบและวินิจฉัยโหมดฉุกเฉินของ Ubuntu Server อย่างปลอดภัย อ่านบันทึกการบูต ตรวจสอบการเมานต์รูทและ fstab ซ่อมแซมหน่วยที่ล้มเหลว จัดการข้อผิดพลาดของระบบไฟล์ และตรวจสอบการรีบูตที่สะอาดหมดจด