Mục lục
Giới hạn bài thực hành và chuẩn bị terminalTạo hai tệp mẫu mà không sửa websiteTạo archive và hai mức checksumChuyển bản sao sang máy khácKiểm tra rồi giải nén vào thư mục trốngTách khôi phục tệp khỏi khôi phục dịch vụGhi mục tiêu và kết quả khôi phụcGiới hạn bài thực hành và chuẩn bị terminal
Dùng Bash, GNU tar, sha256sum và OpenSSH trên Ubuntu hoặc client Linux/WSL. Chạy lệnh server trong một terminal, lệnh client trong một terminal trên máy khác; giữ chúng mở để biến còn hiệu lực. Dừng khi có bất kỳ lệnh nào lỗi.
Bắt đầu với hai tệp tạm trong home. Bài tập không đổi Nginx, firewall hay nội dung đang phục vụ, và không giải nén bằng root. Nhánh tùy chọn chỉ thay bằng hai tệp của website tĩnh mẫu.
Website lớn hơn cần kiểm kê tài nguyên, redirect, cấu hình include, DNS và phụ thuộc riêng. Hai tệp không phải bản sao toàn máy hoặc toàn ứng dụng.
Tạo hai tệp mẫu mà không sửa website
Trên server, tạo thư mục thực hành riêng tư. Cấu hình được tạo chỉ là tệp để nén, không phải site sẽ được bật.
umask 077
backup_lab=$(mktemp -d "$HOME/ubuntu-vps-backup.XXXXXX")
mkdir -p "$backup_lab/payload/site" "$backup_lab/payload/nginx" "$backup_lab/export"
printf '%s\n' '<!doctype html><html lang="vi"><title>Thực hành khôi phục</title><h1>Trang tĩnh đã khôi phục</h1></html>' > "$backup_lab/payload/site/index.html"
printf '%s\n' 'server {' ' listen 8080;' ' server_name example.test;' ' root /var/www/first-site;' '}' > "$backup_lab/payload/nginx/first-site.conf"
printf 'Thư mục thực hành: %s\n' "$backup_lab"Tùy chọn: dùng trang và server block thật của hướng dẫn bằng cách thay các bản sao tạm dưới đây. Tài khoản phải đọc được cả hai nguồn. Kiểm tra bí mật trong cấu hình và tạm ngừng deployment khi lấy tệp để chúng thuộc cùng một release. Bỏ khối này nếu chỉ dùng tệp mẫu.
install -m 600 /var/www/first-site/index.html "$backup_lab/payload/site/index.html"
install -m 600 /etc/nginx/sites-available/first-site "$backup_lab/payload/nginx/first-site.conf"Lệnh đọc nguồn đang dùng nhưng không sửa chúng; không sao chép private key chứng chỉ hay toàn thư mục hệ thống. Nếu thêm tệp, cập nhật có chủ đích cả kiểm kê và danh sách checksum.
Tạo archive và hai mức checksum
Trên server, tính checksum tệp, tạo archive với đường dẫn tương đối và tính checksum archive. Giữ payload không thay đổi trong bước này.
(
cd "$backup_lab/payload" &&
sha256sum site/index.html nginx/first-site.conf > SHA256SUMS
)
tar -czf "$backup_lab/export/static-site.tar.gz" -C "$backup_lab/payload" site nginx SHA256SUMS
(
cd "$backup_lab/export" &&
sha256sum static-site.tar.gz > static-site.tar.gz.sha256
)
tar -tzf "$backup_lab/export/static-site.tar.gz"
printf 'Thư mục xuất trên máy chủ: %s\n' "$backup_lab/export"Danh sách phải có site/, nginx/, hai tệp và SHA256SUMS. Checksum ngoài phát hiện archive thay đổi khi chuyển, manifest bên trong kiểm tra tệp đã giải nén. Nếu ai thay được cả dữ liệu lẫn checksum mong đợi, checksum không xác thực được nguồn bản sao.
Chuyển bản sao sang máy khác
Tại client, đặt remote_backup bằng đúng thư mục export server đã in. Thay IP, user và private key bằng thông tin SSH đang hoạt động. 203.0.113.10 là địa chỉ tài liệu; REPLACE phải đổi thành hậu tố thật do mktemp tạo.
umask 077
recovery_dir=$(mktemp -d "$HOME/ubuntu-vps-restore.XXXXXX")
remote_backup=/home/deploy/ubuntu-vps-backup.REPLACE/export
scp -i ~/.ssh/ubuntu_vps "deploy@203.0.113.10:$remote_backup/static-site.tar.gz" "$recovery_dir/"
scp -i ~/.ssh/ubuntu_vps "deploy@203.0.113.10:$remote_backup/static-site.tar.gz.sha256" "$recovery_dir/"Xác minh host fingerprint qua kênh tin cậy trước khi chấp nhận host mới. Nếu SCP thất bại vì SSH, xem chẩn đoán kết nối; không tắt xác minh khóa để chuyển cho xong.
SCP bảo vệ dữ liệu trên đường truyền qua SSH. tar.gz là nén, không phải mã hóa: bảo vệ tài khoản, nơi lưu và mã hóa khi lưu nếu dữ liệu cần. Thư mục thứ hai trên cùng VPS không phải bản sao ngoài máy.
Kiểm tra rồi giải nén vào thư mục trống
Tại client, chỉ tiếp tục khi sha256sum báo OK. Nếu không khớp, điều tra hoặc chuyển lại; không sửa checksum mong đợi để bỏ qua lỗi.
(
cd "$recovery_dir" &&
sha256sum -c static-site.tar.gz.sha256
)
tar -tzf "$recovery_dir/static-site.tar.gz"Giải nén archive tin cậy vào thư mục mới. keep-old-files từ chối ghi đè tệp đã có, no-same-owner tránh áp chủ sở hữu trong archive. Không đổi đích thành / và không dùng sudo.
restore_dir=$(mktemp -d "$recovery_dir/restored.XXXXXX")
tar -xzf "$recovery_dir/static-site.tar.gz" -C "$restore_dir" --keep-old-files --no-same-owner
(
cd "$restore_dir" &&
sha256sum -c SHA256SUMS
)
cat "$restore_dir/site/index.html"Chờ OK cho site/index.html và nginx/first-site.conf, rồi xem tiêu đề trang đã phục hồi. Kết quả xác nhận nội dung tệp, không xác nhận quyền sản xuất, ACL, dịch vụ hoạt động hay toàn bộ phụ thuộc.
Tách khôi phục tệp khỏi khôi phục dịch vụ
Cấu hình đã phục hồi vẫn là tệp chưa kích hoạt. Trên server thay thế riêng, rà đường dẫn, include, module, quyền và chứng chỉ. Kiểm tra cấu hình Nginx đã lắp ghép trước reload rồi thử HTTP/HTTPS từ ngoài. Kiểm tra cú pháp trên server cũ không xác minh bản vừa khôi phục.
Archive này cố ý không có TLS private key. Lập kế hoạch cấp lại chứng chỉ hoặc bản sao chứng chỉ được bảo vệ riêng. Không dùng cách tar này cho tệp database đang chạy; dùng phương pháp backup/restore nhất quán của database.
Snapshot nhà cung cấp có thể giúp khôi phục máy, nhưng cần kiểm tra thời gian giữ, phạm vi sự cố chung và quy trình restore. Có snapshot không chứng minh tệp đã xuất dùng được trên host thay thế.
Ghi mục tiêu và kết quả khôi phục
RPO là lượng dữ liệu mất chấp nhận được tính theo thời gian; RTO là thời gian mục tiêu để đưa dịch vụ trở lại. Website thông tin tĩnh nhỏ có thể đặt RPO 24 giờ, RTO 60 phút. Đây là mục tiêu ví dụ, không phải kết quả đo; lịch sao lưu hằng ngày chỉ đáp ứng khi bản sao thành công và còn khôi phục được.
Cuộn bảng sang ngang để xem đủ các cột.
| Hồ sơ | Điều chứng minh |
|---|---|
| Thời điểm backup và ID release | Phiên bản có thể phục hồi |
| Nơi lưu độc lập và thời gian giữ | Bản sao tồn tại ở đâu, trong bao lâu |
| Checksum archive và tệp | Byte đã phục hồi có đúng không |
| Bắt đầu và kết thúc restore | Thời gian các bước đã định nghĩa |
| Tệp, quyền hoặc phụ thuộc còn thiếu | Việc còn phải làm để dịch vụ chạy |
| HTTPS ngoài trên máy thay thế | Website đã thực sự trở lại chưa |
Đo toàn bộ quá trình thay thế, gồm truy cập, tạo máy, cấu hình, chứng chỉ và DNS nếu cần. Giải nén nhanh tại client không phải benchmark khôi phục sau sự cố. Giữ nhiều điểm phục hồi phù hợp, kiểm tra job lỗi và đối chiếu tiêu chí hỗ trợ khôi phục khi chọn dịch vụ.
Quy trình archive mẫu và checksum đã được thử với công cụ GNU trong Git Bash trên Windows. Phép thử đó không bao gồm server Ubuntu, truyền SSH từ xa, khôi phục chứng chỉ hoặc kích hoạt Nginx.
Câu hỏi thường gặp
Có cần xóa website gốc để thử bản sao không?
Không. Giải nén sang thư mục riêng và kiểm tra manifest xác minh bản sao mà không gây gián đoạn. Thử toàn dịch vụ trên môi trường thay thế riêng.
Checksum đúng nghĩa là đã sao lưu đủ website?
Chỉ xác nhận các tệp có trong manifest. Nó không phát hiện tài nguyên, database, bí mật hoặc DNS bị bỏ sót. Cần kiểm kê và thử chức năng thực sau khôi phục dịch vụ.
Bản sao trên cùng VPS có đủ độc lập không?
Không. Nó có thể mất cùng VPS hoặc tài khoản lưu trữ đó. Giữ bản sao bên ngoài và thử lấy lại trước khi cần phục hồi.