OffshoreVps
Bảo mật8 thg 10 20268 phút đọcBởi đội ngũ OffshoreVps

Cách sao lưu VPS bằng restic: tự động và mã hóa

Quy tắc 3-2-1, nên sao lưu gì, thiết lập restic mã hóa, một script cron và lý do bạn phải kiểm tra khôi phục. Snapshot của nhà cung cấp là chưa đủ.

Một VPS có thể hỏng, bị xóa nhầm hoặc bị làm hỏng bởi một bản cập nhật lỗi. Sự bảo vệ duy nhất là một bản sao lưu bạn đã kiểm thử. Hướng dẫn này thiết lập các bản sao lưu mã hóa, tự động và đơn giản bằng công cụ miễn phí.

Cửa sổ terminal trên VPS hiển thị các lệnh dùng để sao lưu VPS, bắt đầu bằng “sudo apt install -y restic”
Loại lệnh bạn sẽ chạy trên máy chủ của mình trong hướng dẫn này.

Quy tắc 3-2-1

Giữ 3 bản sao dữ liệu, trên 2 loại lưu trữ khác nhau, với 1 bản ở một nơi hoàn toàn khác. Với VPS, điều đó thường nghĩa là dữ liệu đang chạy, một snapshot cục bộ và một bản sao ngoài site ở nhà cung cấp khác hoặc ở quốc gia khác.

Cần sao lưu những gì

  • Tệp website và các tệp tải lên (/var/www).
  • Cơ sở dữ liệu, được dump ra tệp trước (không bao giờ sao chép trực tiếp tệp cơ sở dữ liệu đang chạy).
  • Cấu hình: /etc/nginx, các thay đổi trong /etc, tệp Docker Compose và volume.
  • Các cron job và mọi script tùy chỉnh.

Bạn có thể cài lại hệ điều hành trong vài phút. Thứ bạn không thể cài lại là dữ liệu và cài đặt của mình.

Dùng restic cho bản sao lưu mã hóa, khử trùng lặp

sudo apt install -y restic
export RESTIC_REPOSITORY=sftp:backup@other-server:/backups/vps1
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init

Hãy tạo tệp mật khẩu bằng một chuỗi ngẫu nhiên dài và cất một bản sao ở nơi an toàn. Nếu bạn mất mật khẩu này, các bản sao lưu sẽ không thể mở được. restic cũng hỗ trợ lưu trữ tương thích S3, nên bạn có thể đẩy lên bất kỳ object store nào.

Các bước của hướng dẫn này theo thứ tự: 1. Quy tắc 3-2-1; 2. Nên sao lưu gì; 3. Dùng restic để sao lưu mã hóa, khử trùng lặp; 4. Một script sao lưu; 5. Kiểm tra khôi phục; 6. Snapshot có ích nhưng chưa đủ
Các bước trong hướng dẫn này, theo thứ tự.

Một script sao lưu

#!/bin/bash
set -e
export RESTIC_REPOSITORY=sftp:backup@other-server:/backups/vps1
export RESTIC_PASSWORD_FILE=/root/.restic-pass

mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
restic backup /var/www /etc /var/backups/db.sql.gz
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Lưu nó thành /usr/local/bin/backup.sh, cấp quyền thực thi và lên lịch chạy:

sudo chmod +x /usr/local/bin/backup.sh
echo "30 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" | sudo tee /etc/cron.d/backup

Kiểm tra khôi phục

restic snapshots
restic restore latest --target /tmp/restore-test --include /etc/nginx

Một bản sao lưu chưa từng được khôi phục chỉ là một niềm hy vọng. Hãy kiểm thử mỗi quý một lần, và luôn kiểm thử sau khi thay đổi bất cứ thứ gì.

Snapshot có ích nhưng chưa đủ

Snapshot của nhà cung cấp nhanh và tiện trước những thay đổi rủi ro, nhưng chúng nằm cùng nhà cung cấp và cùng tài khoản. Hãy coi chúng là tiện ích và giữ một bản sao ngoài site độc lập.