Tự host Gitea phù hợp khi bạn muốn kho Git nội bộ, mirror repository, CI nhỏ hoặc kiểm soát dữ liệu source code. Nhưng Gitea không chỉ là một thư mục chứa file .git: còn có database, repositories, attachments, avatars, packages, cấu hình và SSH keys. Cài container thành công mà không có volume, backup và restore test chỉ tạo cảm giác an toàn giả.
Gitea gồm những dữ liệu nào?
Một instance Gitea thường có database và thư mục dữ liệu chứa repository, custom config, attachments, log hoặc package tùy cấu hình. Nếu chỉ copy repository, bạn có thể mất issue, pull request, user, permission, webhook và metadata.
Chọn SQLite cho lab nhỏ có thể đơn giản, còn workload nhiều user hoặc automation nên đánh giá MariaDB/PostgreSQL riêng. Dù chọn database nào, hãy ghi rõ version, đường dẫn volume và cách dump trước khi cập nhật.
| Thành phần | Ví dụ dữ liệu | Cần bảo vệ |
|---|---|---|
| Database | User, issue, permission | Dump nhất quán |
| Repositories | Git objects, hooks | Volume và quyền |
| Config | app.ini, secret | Backup hạn chế quyền |
| Attachments | Avatar, release, package | Dung lượng và retention |
Triển khai bằng Docker và persistent volume
Compose giúp tách image khỏi dữ liệu. Mount `/data/` hoặc các volume tương ứng ra storage bền vững, pin version image thay vì dùng tag không kiểm soát và giới hạn network/database. Service Gitea có thể bind loopback hoặc mạng nội bộ, sau đó đi qua reverse proxy HTTPS.
Tạo user/group và quyền file nhất quán. Một volume sai owner có thể khiến Gitea khởi động nhưng không ghi repository hoặc hook. Sau lần cài, tạo repository test, clone qua SSH và HTTP, tạo issue, upload attachment rồi kiểm tra dữ liệu nằm ở đâu.
SSH, HTTP và reverse proxy
SSH clone cần port và host key rõ ràng; HTTP clone cần HTTPS và header proxy đúng. Nếu đặt Gitea sau Nginx, cấu hình ROOT_URL/SSH_DOMAIN hoặc trường tương đương phải khớp URL người dùng nhìn thấy. Sai external URL tạo link clone sai và webhook thất bại.
Không public admin endpoint không cần thiết. Bật HTTPS, 2FA nếu phù hợp, tắt đăng ký mở, giới hạn quyền owner/admin và dùng firewall. SSH key nên có passphrase; token CI cần scope tối thiểu và thời hạn rõ.
Backup đúng cách với gitea dump
Tài liệu Gitea mô tả `gitea dump` có thể tạo archive gồm cấu hình, data, repositories và SQL dump. Backup nhất quán cần cân nhắc thay đổi đồng thời của database và repository; với instance quan trọng, có thể dừng service trong cửa sổ backup hoặc dùng quy trình database-aware.
Lưu archive ở failure domain khác, mã hóa nếu chứa source/private key và giới hạn quyền đọc. Kiểm tra archive có đủ repo, database dump, app.ini và attachment; không coi file ZIP tồn tại là đã có backup tốt.
Restore và regenerate hooks
Restore là quy trình thủ công: giải nén đúng cấu trúc, khôi phục database, sửa quyền, khớp đường dẫn và khởi động instance theo version tương thích. Nếu đường dẫn cài đặt thay đổi hoặc hook bị lỗi, có thể cần regenerate hooks theo tài liệu.
Hãy restore vào hostname test hoặc isolated network trước. Kiểm tra login, repository clone/push, issue, webhook, LFS/package nếu dùng và quyền user. Sau đó mới quyết định cutover.
Cập nhật và giới hạn vận hành
Pin version giúp tránh update ngoài ý muốn nhưng không được bỏ quên security update. Đọc release note, backup trước nâng cấp, thử trên staging và có rollback image/database. Theo dõi disk, database, queue, SSH brute force và job failure.
Gitea tự host cho bạn quyền kiểm soát, đồng thời chuyển trách nhiệm availability, backup, email, security và support về phía bạn. Với source code quan trọng, nên có mirror ngoài Gitea hoặc remote backup độc lập.
- Persistent volume tách khỏi container.
- Backup database và data cùng một quy trình.
- Test clone/push sau restore.
- Không cấp admin/token rộng hơn nhu cầu.
Repository Git không phải toàn bộ dữ liệu Gitea; backup phải bao gồm database, cấu hình, repositories và dữ liệu phụ trợ rồi được restore thử.Gitea Backup and Restore Documentation
Checklist áp dụng nhanh
- Xác định mục tiêu vận hành, ngân sách tài nguyên và người chịu trách nhiệm trước khi cài thêm dịch vụ.
- Tách dữ liệu, secret, cấu hình và quyền truy cập khỏi lifecycle của container hoặc máy ảo; ghi rõ đường khôi phục.
- Đo bằng log, metric, thời gian phản hồi, dung lượng và restore test thay vì chỉ nhìn lệnh cài đặt chạy thành công.
- Thử trên staging hoặc một node nhỏ, lưu output thực tế rồi mới mở rộng sang toàn bộ homelab hoặc production.
Lệnh và cấu hình tham khảo
docker compose up -d
docker compose exec -u git gitea gitea dump --type zip --file /tmp/gitea-dump.zip
rsync -a /srv/gitea/backups/ backup:/srv/backup/gitea/
docker compose logs --tail=100 giteaLiên kết nội bộ nên đọc tiếp
Nguồn chính thống
Các tài liệu dưới đây là nguồn tham khảo chính thống cho khái niệm và cú pháp trong bài. Phiên bản phần mềm và cách đóng gói có thể thay đổi, vì vậy hãy kiểm tra tài liệu gốc trước khi áp dụng vào hệ thống thật.
Kết luận
Gitea là lựa chọn thực tế cho Git service nội bộ trên mini server nếu bạn thiết kế volume, HTTPS, SSH, database và backup cùng lúc. Giá trị của self-hosting nằm ở khả năng kiểm soát và phục hồi, không chỉ ở việc giao diện đã mở được.
Tách repository, database và cấu hình khi backup
Gitea không chỉ là thư mục Git. Một bản backup có ý nghĩa phải bao gồm repository, database, app.ini, custom data, attachment hoặc LFS nếu sử dụng và secret cần để khôi phục. Nếu database vẫn đang thay đổi trong khi file repository được copy, bản backup có thể không nhất quán.
Hãy lập lịch backup vào thời điểm ít ghi, ghi checksum, lưu ít nhất một bản ngoài mini server và thử restore trên instance tạm. Sau restore cần kiểm tra clone qua HTTP/SSH, webhook, user, permission và hook của repository.
Cập nhật Gitea có kiểm soát
Trước khi đổi image hoặc binary, đọc release note, backup và ghi lại version hiện tại. Cập nhật staging trước nếu repository quan trọng. Không xóa volume cũ cho tới khi login, push, pull, webhook và backup mới đã chạy thành công.
Chọn database và network theo quy mô repository
SQLite có thể phù hợp với cài đặt nhỏ, nhưng khi số user, webhook hoặc hoạt động đồng thời tăng, cần đánh giá database server riêng. Quyết định phải dựa trên workload, backup và khả năng vận hành chứ không chỉ theo hướng dẫn cài đặt nhanh. Đặt Gitea sau reverse proxy giúp chuẩn hóa HTTPS, nhưng SSH clone vẫn cần port và host key được quản lý rõ.
Persistent volume phải nằm ở storage có backup. Không bind mount ngẫu nhiên vào thư mục hệ thống rồi cho rằng container recreate sẽ giữ toàn bộ dữ liệu. Hãy ghi lại owner, permission, UID/GID, port và secret để restore sang máy khác không bị phụ thuộc vào trạng thái cũ.
Kiểm tra sau khi restore
Đăng nhập bằng user thử nghiệm, clone một repository qua HTTPS và SSH, tạo issue, chạy webhook test rồi kiểm tra attachment hoặc LFS nếu có. Sau khi mọi luồng chính hoạt động, mới xóa instance tạm hoặc bản backup cũ theo retention.