Hướng dẫn cài đặt Harbor: Xây dựng Private Registry chuyên nghiệp cho DevOps

Docker tutorial - IT technology blog
Docker tutorial - IT technology blog

Khi Docker Hub không còn là “miễn phí và vô hạn”

Tiếng chuông điện thoại reo lúc 2 giờ sáng thường báo hiệu sự cố nghiêm trọng. Pipeline CI/CD của công ty mình đột ngột dừng hoạt động với lỗi 429 Too Many Requests. Thực tế, Docker Hub đã siết chặt giới hạn: tài khoản miễn phí chỉ được 100-200 lần pull mỗi 6 giờ. Khi hệ thống K8s scale-up lên 20-30 node, con số này biến mất chỉ trong chớp mắt.

Chưa kể, việc lưu trữ image chứa code core của công ty trên cloud công cộng luôn tiềm ẩn rủi ro rò rỉ dữ liệu. Nếu bạn muốn kiểm soát hoàn toàn hạ tầng và không phụ thuộc vào bên thứ ba, việc tự build một Private Docker Registry là bước đi tất yếu. Thay vì dùng bản Registry mặc định sơ sài, Harbor chính là giải pháp toàn diện nhất mình từng triển khai.

Tại sao Harbor lại là lựa chọn hàng đầu cho doanh nghiệp?

Harbor không chỉ là nơi chứa image; nó là một quản lý hệ sinh thái Artifact (bao gồm cả Helm Chart). Dưới đây là những lý do khiến Harbor vượt trội:

  • Giao diện trực quan: Quản lý mọi thứ qua Web UI, không còn cảnh “mù mờ” gõ lệnh check từng layer.
  • Phân quyền (RBAC) chặt chẽ: Bạn có thể giới hạn team Dev chỉ được pull, còn team DevOps/CI-CD mới có quyền push image.
  • Quét lỗ hổng với Trivy: Tự động phát hiện các thư viện lỗi thời hoặc dính CVE (Common Vulnerabilities and Exposures) ngay khi image vừa được đẩy lên.
  • Chính sách dọn dẹp (Retention Policy): Tự động xóa các image cũ sau 30 ngày hoặc chỉ giữ lại 5 version mới nhất để tiết kiệm dung lượng.

Chuẩn bị hạ tầng: Đừng tiết kiệm RAM

Về mặt hạ tầng, Harbor chạy khá nhiều service con (PostgreSQL, Redis, Core, Jobservice). Mình khuyên bạn nên dùng VPS có cấu hình tối thiểu 2 CPU, 4GB RAM. Tuy nhiên, nếu bật tính năng quét lỗ hổng liên tục, hãy nâng lên 8GB RAM để tránh tình trạng hệ thống bị treo do hết bộ nhớ (OOM).

Hãy đảm bảo máy đã cài sẵn Docker. Hiện tại, Docker Compose v2 (lệnh docker compose không dấu gạch ngang) đã trở thành tiêu chuẩn. Việc chuyển đổi sang v2 giúp quản lý container mượt mà và ổn định hơn hẳn.

# Kiểm tra phiên bản Docker Compose
docker compose version

Các bước cài đặt Harbor chi tiết

Bước 1: Tải bộ cài đặt

Mình ưu tiên dùng bản Online Installer để tiết kiệm dung lượng tải ban đầu, hệ thống sẽ tự pull các image cần thiết trong quá trình chạy script.

wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
tar xvzf harbor-online-installer-v2.9.0.tgz
cd harbor

Bước 2: Cấu hình file harbor.yml

Điểm mấu chốt nằm ở file cấu hình. Bạn hãy copy file mẫu và chỉnh sửa các thông số quan trọng:

cp harbor.yml.tmpl harbor.yml
nano harbor.yml

Lưu ý các dòng sau:

  • hostname: Điền domain của bạn (ví dụ: hub.itfromzero.com).
  • https: Docker mặc định yêu cầu kết nối an toàn. Nếu bạn dùng Nginx Proxy Manager hoặc Cloudflare phía trước, hãy tắt phần HTTPS trong file này để Proxy xử lý SSL giúp cấu hình đơn giản hơn.
  • data_volume: Nơi lưu trữ image. Hãy đảm bảo phân vùng này có ít nhất 50-100GB trống.

Bước 3: Kích hoạt tính năng bảo mật

Đừng chỉ cài Harbor “chay”. Hãy tích hợp thêm Trivy để biến Registry của bạn thành một pháo đài bảo mật:

sudo ./install.sh --with-trivy

Quá trình này mất khoảng 5 phút. Khi terminal hiện thông báo thành công, bạn đã có thể truy cập vào giao diện quản trị.

Vận hành thực tế: Push image và quét lỗi

Sau khi đăng nhập, hãy tạo ngay một Project mới thay vì dùng chung project public. Đừng quên bật tùy chọn “Automatically scan images on push”. Đây là tính năng giúp bạn ngủ ngon hơn vì biết chắc image nào có lỗi sẽ bị chặn lại ngay lập tức.

Thao tác đẩy image từ máy local

Đầu tiên, bạn cần xác thực với Registry cá nhân:

docker login hub.itfromzero.com

# Gắn tag image theo đúng cấu trúc của Harbor
docker tag my-app:latest hub.itfromzero.com/itfromzero-project/my-app:v1

# Đẩy image lên hệ thống
docker push hub.itfromzero.com/itfromzero-project/my-app:v1

Nếu image của bạn chứa các thư viện cũ như OpenSSL lỗi thời, Harbor sẽ hiển thị cảnh báo đỏ ngay trên Dashboard. Điều này cực kỳ hữu ích để yêu cầu Dev sửa code trước khi deploy lên Production.

Kinh nghiệm xử lý sự cố (Troubleshooting)

Vấn đề phổ biến nhất là đầy ổ cứng. Mỗi lần build image mới, các layer cũ vẫn tồn tại dưới dạng “untagged”. Hãy vào Administration -> Garbage Collection và thiết lập lịch chạy hàng tuần để giải phóng dung lượng.

Nếu gặp lỗi x509: certificate signed by unknown authority do dùng SSL tự ký, bạn cần khai báo Registry vào file cấu hình Docker trên máy client:

# Sửa file /etc/docker/daemon.json
{
  "insecure-registries" : ["hub.itfromzero.com"]
}

Sau đó, hãy chạy systemctl restart docker để áp dụng thay đổi.

Lời kết

Triển khai Harbor là khoản đầu tư xứng đáng cho bất kỳ team DevOps nào muốn tiến lên chuyên nghiệp. Bạn không chỉ tiết kiệm chi phí băng thông mà còn làm chủ hoàn toàn dữ liệu của mình. Dù việc cấu hình SSL và tối ưu tài nguyên ban đầu hơi tốn công, nhưng sự ổn định và tính bảo mật mà Harbor mang lại là không thể bàn cãi.

Share: