ทุกคนมีข้อมูลสำรอง จนกระทั่งลองกู้คืนดู โฟลเดอร์กลับว่างเปล่า cron job ตายไปตั้งแต่เดือนมีนาคม หรือไฟล์สำรองอยู่บนดิสก์ลูกเดียวกับที่เพิ่งพัง restic แก้ปัญหาเหล่านี้ได้เกือบทั้งหมด: เข้ารหัสที่ฝั่งคุณ เก็บข้อมูลแต่ละชิ้นแค่ครั้งเดียว และทำให้การกู้ไฟล์เดียวง่ายพอๆ กับการสำรองทั้งเซิร์ฟเวอร์
นี่คือการตั้งค่าที่เราไว้ใจได้จริง บน Ubuntu หรือ Debian
1. ติดตั้ง restic
apt update && apt install -y restic
restic self-update
แพ็กเกจของดิสโทรมักตามหลัง self-update จะดึงรุ่นปัจจุบันมาให้
2. เลือกที่ตั้งคลัง
คลังต้องไม่อยู่บนเซิร์ฟเวอร์ที่คุณกำลังปกป้อง ตัวเลือกยอดนิยมสองแบบ:
- เซิร์ฟเวอร์อีกเครื่องผ่าน SFTP:
sftp:backup@203.0.113.20:/srv/restic/web1 - ที่เก็บอ็อบเจกต์ที่รองรับ S3:
s3:https://s3.example.com/my-bucket/web1
3. เก็บข้อมูลรับรอง
เก็บทุกอย่างไว้ในไฟล์เดียวที่มีแค่ root อ่านได้ เพื่อให้ตัวตั้งเวลาและ shell ของคุณใช้การตั้งค่าเดียวกัน:
cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass
ตอนนี้คัดลอกเนื้อหาของ /root/.restic-pass ไปเก็บในโปรแกรมจัดการรหัสผ่าน ถ้าไม่มีมัน ข้อมูลสำรองจะถอดรหัสไม่ได้ — ทั้งคุณและใครก็ตาม
4. เริ่มต้นคลังและสำรองครั้งแรก
source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
--exclude-caches --exclude '/root/.cache'
restic snapshots
ปรับพาธให้ตรงกับที่ที่ข้อมูลของคุณอยู่จริง volume ของ Docker อยู่ใน /var/lib/docker/volumes ส่วนข้อมูลแอปมักอยู่ใน /srv หรือ /opt
5. ฐานข้อมูล: dump ก่อน แล้วค่อยสำรอง
อย่าสำรองไฟล์ดิบของฐานข้อมูลที่กำลังทำงาน ให้ dump ก่อนสำรองทันที:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
เพิ่ม /var/backups/db เข้าไปในพาธสำรอง คู่มือ PostgreSQL ของเรามีรายละเอียดเรื่อง dump เพิ่มเติม
6. ตั้งเวลาด้วย systemd
ตรงนี้ตัวตั้งเวลาดีกว่า cron: มันบันทึกลง journal และรันตามหลังได้ถ้าเซิร์ฟเวอร์ปิดอยู่ตอนถึงเวลา
# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
forget --prune เก็บ snapshot รายวัน 7 ชุด รายสัปดาห์ 4 ชุด และรายเดือน 6 ชุด แล้วลบที่เหลือ ถ้าคุณมีขั้นตอน dump ฐานข้อมูล ให้ใส่ไว้ในบรรทัด ExecStartPre=
7. กู้คืนอะไรสักอย่างจริงๆ
ขั้นนี้คือสิ่งที่เปลี่ยนคำว่า "เรามีข้อมูลสำรอง" ให้เป็นความจริง ดึงโฟลเดอร์หนึ่งกลับมาไว้ในโฟลเดอร์ชั่วคราวแล้วเปิดดู:
source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check
ทำหนึ่งครั้งตอนนี้ แล้วทำซ้ำทุกไม่กี่เดือน restic check ตรวจโครงสร้างของคลัง ส่วนการกู้คืนพิสูจน์ว่าข้อมูลอยู่ตรงนั้นจริง
restic กับ Managed Backups
สองอย่างนี้ไม่ได้แข่งกัน Managed Backups สร้างจุดกู้คืนของทั้งเซิร์ฟเวอร์ทุกวัน ซึ่งคุณย้อนกลับได้จากแดชบอร์ด — ทางแก้เร็วหลังอัปเดตพัง ราคา $2 ต่อเดือนและได้ฟรีกับแพ็กเกจรายปีทุกแบบ restic ให้สำเนาระดับไฟล์นอกเซิร์ฟเวอร์ บนที่เก็บที่คุณควบคุมเอง ซึ่งสำคัญเมื่อปัญหาคือไฟล์ที่ถูกลบเมื่อวันอังคารที่แล้ว หรือเมื่อคุณอยากได้สำเนาที่อยู่นอกโครงสร้างพื้นฐานของเราโดยสิ้นเชิง
ถ้าคุณเก็บข้อมูลอ่อนไหว ให้ใช้ร่วมกับการเข้ารหัสทั้งดิสก์ หรือดูกรณีใช้งานที่เก็บข้อมูลแบบเข้ารหัส เพื่อรันปลายทางสำรองของคุณเอง แพ็กเกจ Micro เพียงพอสำหรับเซิร์ฟเวอร์เล็กส่วนใหญ่พร้อมงานสำรองข้อมูลของมัน
ความคิดเห็น
ยังไม่มีความคิดเห็น เป็นคนแรกสิ