Giới thiệu
Trong bài viết này, tôi sẽ hướng dẫn bạn cách thiết lập workflow GitHub Actions tự động sao lưu kho lưu trữ GitHub của bạn lên AWS S3. Để bắt đầu, bạn có thể tham khảo mẫu kho lưu trữ mà tôi đã tạo:
👉 github-backup-template
Hãy thử nghiệm nếu bạn quan tâm đến việc bảo vệ mã nguồn của mình!
Động lực
Ý tưởng này xuất phát từ một bài viết blog mà tôi gần đây đã đọc:
🚀 Tại sao bạn nên giữ nhiều bản sao lưu mã nguồn? (Đừng chỉ dựa vào GitHub)
Tác giả đã nhấn mạnh tầm quan trọng của việc không chỉ dựa vào GitHub và giữ bản sao lưu cho các kho lưu trữ của bạn. Sau khi đọc xong, tôi quyết định xây dựng hệ thống sao lưu riêng cho mình.
Bài viết đó trình bày cách tự động sao lưu cục bộ bằng cron hoặc Task Scheduler. Tuy nhiên, vì máy tính của tôi không phải lúc nào cũng bật, tôi muốn có một cách tiếp cận hoàn toàn trực tuyến và không cần máy chủ. Đó là khi tôi nghĩ:
“Tại sao không tận dụng các workflow theo lịch của GitHub Actions?”
Và tôi đã thử nghiệm với ý tưởng này.
Cách hoạt động
Các bước trong workflow
- Chạy theo lịch với GitHub Actions
- Sử dụng lệnh
git clone --mirrorđể sao chép kho lưu trữ mục tiêu - Tạo một tệp bundle
- Tải lên tệp bundle vào một bucket S3
Những gì được sao lưu
- Toàn bộ lịch sử commit (tất cả nhánh và nhãn)
- Tham chiếu nhánh và nhãn
- Cấu hình từ xa và các tham chiếu
Những gì không được sao lưu
- Vấn đề / Pull Requests / Dự án / Thảo luận / Lịch sử Actions
- Wiki hoặc tệp tĩnh trên GitHub Pages
- Cài đặt kho lưu trữ (ví dụ: quy tắc bảo vệ nhánh)
Bài học rút ra
Có một số điểm khó khăn trong quá trình triển khai:
Cài đặt awscli
Ban đầu, tôi đã thử cài đặt awscli trong runner của workflow nhưng gặp lỗi. Hóa ra, nó đã được cài sẵn trên các runner do GitHub cung cấp—do đó không cần bước cài đặt nào.
Xác thực bằng GitHub Personal Access Token
Tôi đã thử nghiệm với Fine-grained Personal Access Tokens, nhưng xác thực không thành công. Chuyển sang Classic Token với phạm vi repo đã giải quyết vấn đề.
Thú vị là, GitHub Copilot đã rất hữu ích ở đây—nó đã gợi ý các nguyên nhân và cách khắc phục khi workflow của tôi gặp lỗi.
Xuất bản mẫu
Sau khi thử nghiệm trên các kho lưu trữ của mình và xác nhận rằng việc sao lưu hoạt động, tôi quyết định xuất bản nó dưới dạng một kho lưu trữ mẫu.
Lý do của tôi:
- Có thể người khác sẽ thấy nó hữu ích
- Nó bổ sung cho danh mục cá nhân của tôi
- Nó cho tôi điều gì đó để viết blog
Tóm lại, ba mục tiêu trong một hành động.
Để giúp người khác dễ dàng sử dụng, tôi đã:
- Viết tất cả các chú thích workflow bằng tiếng Anh
- Cung cấp một README đa ngôn ngữ (tiếng Nhật & tiếng Anh)
- Thêm một giấy phép MIT để rõ ràng hơn
Điều gì tiếp theo
Dự án này vẫn còn mới, vì vậy tôi chưa có lộ trình chi tiết. Nhưng hiện tại, kế hoạch của tôi là:
- Chạy nó cho các kho lưu trữ của riêng tôi trong một thời gian
- Thu thập phản hồi từ người dùng
- Cân nhắc chính sách vòng đời S3 (tối ưu hóa chi phí lưu trữ, xóa tự động, v.v.)
Nếu bạn có đề xuất nào để cải thiện, tôi rất muốn nghe ý kiến của bạn!
Kết luận
Dự án này bắt đầu khi tôi đọc một bài viết blog bằng tiếng Anh (như một phần trong việc học ngôn ngữ của mình), mà bất ngờ kết nối với một điều khác mà tôi đã học trước đó—GitHub Actions để tự động hóa việc triển khai React.
Nó nhắc nhở tôi rằng việc tiếp tục thu thập thông tin và ý tưởng mới là rất quý giá—bạn không bao giờ biết khi nào chúng sẽ kết nối lại với nhau.
Việc xây dựng workflow này rất thú vị vì tôi đã có cơ hội sử dụng GitHub Actions, GitHub Copilot và AWS cùng nhau.
Tôi rất mong muốn tạo ra thêm nhiều công cụ nhỏ như thế này để có thể giúp đỡ người khác—trong khi vẫn tận hưởng quá trình sáng tạo.
Câu hỏi thường gặp (FAQ)
1. Tôi có thể sử dụng workflow này cho kho lưu trữ riêng tư không?
Có, bạn có thể cấu hình GitHub Actions để sao lưu các kho lưu trữ riêng tư bằng cách sử dụng Personal Access Token với đúng quyền hạn.
2. Có cách nào để sao lưu định kỳ không?
Có, bạn có thể thiết lập lịch trình cho GitHub Actions để tự động chạy hàng tuần hoặc hàng tháng.
3. Tôi có thể khôi phục dữ liệu từ bản sao lưu không?
Có, bạn có thể tải xuống tệp bundle từ S3 và khôi phục nó bằng cách sử dụng lệnh git clone.
4. Có cách nào để tối ưu hóa chi phí lưu trữ trên S3 không?
Có, bạn có thể sử dụng chính sách vòng đời S3 để tự động xóa các bản sao lưu cũ hơn một khoảng thời gian nhất định.