Trong bài trước mình có hướng dẫn cách sử dụng Borg Backup để sao lưu dữ liệu ở chế độ Push Mode, tức là dữ liệu sẽ được “đẩy” từ máy chủ chứa dữ liệu về máy chủ chứa bản sao lưu. Đây cũng là cách được khuyến cáo sử dụng vì đảm bảo được tính bảo mật cho máy chủ chứa dữ liệu vì không có kết nối trực tiếp nào từ bên ngoài đến nó. Tuy nhiên cách này chỉ phù hợp với những ai có một máy chủ sao lưu riêng biệt, có 1 IP tĩnh (hoặc sử dụng dịch vụ DDNS cho IP động) và quan trọng nhất là có thể mở port (cổng) để nhận kết nối từ bên ngoài.
Tuy nhiên, đối với những người sử dụng máy tính cá nhân để sao lưu dữ liệu từ máy chủ web (hay máy chủ chứa dữ liệu cần sao lưu) thì việc mở cổng hay cấu hình DDNS khá là phức tạp, chưa kể nó còn mang lại nhiều rủi ro về mặt bảo mật cho máy tính.
Để giải quyết vấn đề này, Borg cung cấp thêm chế độ Pull Mode, cho phép máy tính có thể “kéo” dữ liệu từ máy chủ chứa dữ liệu về. Ngược lại với chế độ Push Mode, ở chế độ Pull Mode máy tính sẽ kết nối đến máy chủ thông qua giao thức SSH để sao lưu dữ liệu. Do đây là máy tính cá nhân nên việc cho phép nó kết nối đến máy chủ chứa dữ liệu là khá an toàn. Nhược điểm duy nhất với chế độ Pull Mode chính là tôc độ sao lưu sẽ khá là chậm so với sử dụng Borg Backup ở chế độ Push Mode.
Sau đây mình sẽ hướng dẫn cách sử dụng Borg Pull Docker để sao lưu dữ liệu.
1. Yêu cầu tiên quyết
- Máy ảo/máy tính đã cài đặt hệ điều hành Ubuntu (hoặc Linux khác)
- Đã cài đặt Docker Compose trên máy ảo/máy tính
- Máy chủ chứa dữ liệu cần sao lưu đang chạy hệ điều hành Linux
- Người dùng có quyền admin (root) trên máy chủ chứa dữ liệu
2. Tạo SSH Key cho máy chủ chứa dữ liệu
Để máy tính có thể truy cập máy chủ chứa dữ liệu mà không cần sử dụng mật khẩu, mình phải tạo các khoá SSH trên máy chủ bằng lệnh sau:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Sao chép SSH private key về máy tính
cat ~/.ssh/id_rsa
Sao chép nội dung được xuất ra màn hình và lưu lại thành 1 file trên máy tính
3. Cài đặt Borg Pull Docker trên máy tính
git clone https://github.com/workleast/borgpull-docker.git
cd borgpull-docker
4. Cấu hình Borg Pull Docker
Đây là các thiết lập cần thiết để Borg Pull Docker có thể chạy.
4.1 Cấu hình file docker-compose.yml
File này dùng để khai báo các kết nối và thư mục sao lưu trên máy chủ chứa dữ liệu.
nano docker-compose.yml
services:
borgpull:
build:
context: .
restart: always
image: workleast/borgpull
container_name: borgpull
volumes:
- path/to/repository:/backups # replace with your actual path to repository directory here
- ./config/ssh/id_rsa:/root/.ssh/id_rsa # replace with your SSH private key file
- ./config/crontab.txt:/etc/crontabs/root # edit crontab.txt file to schedule automatic backups
environment:
TZ: "Asia/Ho_Chi_Minh"
BACKUP_ADDR: "user@server_ip" # replace with your actual backup server's address here
ARCHIVE_NAME: "archive-{now:%Y-%m-%dT%H:%M:%S}"
TARGET_DIR: "/" # replace with your target directory (to be backed up) in the backup server
cap_add:
- SYS_ADMIN
devices:
- /dev/fuse
security_opt:
- apparmor:unconfined
path/to/repository: đường dẫn đến thư mục chứa các bản sao lưu. Ví dụ: ~/backups
BACKUP_ADDR: địa chỉ kết nối đến máy chủ chứa dữ liệu. Ví dụ: [email protected]
ARCHIVE_NAME: định dạng tên các bản sao lưu. Ví dụ: workleast-{now:%Y-%m-%dT%H:%M:%S}
TARGET_DIR: đường dẫn đến thư mục chứa dữ liệu cần sao lưu trên máy chủ. Ví dụ: /root
4.2 Cấu hình file config/ssh/id_rsa
File này chứa khoá riêng tư (private key) của SSH trên máy chủ
nano config/ssh/id_rsa
Tiến hành sao chép nội dung trong file id_rsa ở bước 2 vào đây
4.3 Cấu hình file config/crontab.txt
File này cho phép cầu hình thời gian tự động sao lưu dữ liệu.
nano config/ssh/crontab.txt
# at 13:30 everyday
0 30 13 * * * /usr/local/bin/borgpull create >> /var/log/borgpull
Thay đổi thời gian tự động sao lưu với định dạng “ss mm hh”. Ví dụ muốn tự động thực hiện sao lưu vào lúc 12 giờ 00 phút hằng ngày thì nhập vào “0 0 12”
5. Sử dụng Borgpull Docker
Đầu tiên, tiến hành chạy Borgpull Docker bằng lệnh
docker compose up -d
5.1 Khỏi tạo thư mục Borg repo (chỉ cần chạy trong lần đầu tiên)
docker exec -it borgpull borgpull init
5.2 Tạo một bản sao lưu
docker exec -it borgpull borgpull create
5.3 Xem danh sách các bản sao lưu
docker exec -it borgpull borgpull list
5.4 Xoá một bản sao lưu
docker exec -it borgpull borgpull delete <TEN_BAN_SAO_LUU>
5.5 Khôi phục một bản sao lưu lên máy chủ
docker exec -it borgpull borgpull restore <TEN_BAN_SAO_LUU>