3. Harbor 部署方式:在线安装、离线安装、Helm Chart 部署、Docker Compose 部署

Harbor 作为企业级制品仓库,支持多种部署路径以适应不同环境与运维习惯。本章系统梳理四种主流部署方式——在线安装、离线安装、Helm Chart 部署与Docker Compose 部署,帮助你在实际项目中根据网络条件、集群类型与团队技能选择最合适的方案。

选型提示:生产环境推荐优先使用 Helm Chart 部署(Kubernetes 集群)或离线安装(无外网访问的物理机/虚拟机);开发测试环境可使用 Docker Compose 或在线安装快速验证。

3.1 四种部署方式对比总览

下表从安装复杂度、网络依赖、适用场景、升级维护四个维度进行横向对比:

部署方式 安装复杂度 网络依赖 适用场景 升级维护
在线安装 低(一键脚本) 需外网下载镜像与依赖 开发环境、快速原型 在线更新,依赖网络
离线安装 中(需提前准备离线包) 无外网要求 生产环境、内网隔离 手动替换离线包
Helm Chart 部署 中(需 Kubernetes 集群) 需访问 Chart 仓库或本地加载 Kubernetes 原生环境 Helm upgrade 滚动更新
Docker Compose 部署 低(单机编排) 需拉取镜像或本地加载 单机测试、小规模部署 docker-compose pull & up

3.2 部署架构与组件关系

无论采用哪种部署方式,Harbor 的核心组件架构保持一致。下图展示了 Harbor 各服务模块及其依赖关系:

Harbor 核心组件架构图 Nginx 反向代理 Harbor Core (API) Registry (Distribution) Jobservice Chartmuseum PostgreSQL Redis 存储后端 (S3/NFS/本地) 说明: • 所有部署方式均包含以上组件,仅编排方式与镜像来源不同。 • 存储后端支持本地文件系统、NFS、S3 兼容对象存储等,离线部署需提前配置。 • Jobservice 负责复制、GC、保留策略执行等后台任务,是清理窗口的核心执行者。

3.3 在线安装

在线安装是 Harbor 官方推荐的快速入门方式,通过 install.sh 脚本自动完成环境检测、镜像拉取与容器启动。

安装步骤

  1. 下载 Harbor 在线安装包(harbor-online-installer-<version>.tgz)
  2. 解压并编辑 harbor.yml 配置文件
  3. 执行 sudo ./install.sh 启动安装

关键配置示例

# harbor.yml 核心配置
hostname: harbor.example.com
http:
  port: 80
https:
  port: 443
  certificate: /data/cert/server.crt
  private_key: /data/cert/server.key
harbor_admin_password: Harbor12345
database:
  password: root123
data_volume: /data/harbor
注意:在线安装要求目标主机能够访问 Docker Hub 和 GitHub 等外网资源。若网络受限,安装脚本会因拉取镜像超时而失败,此时应改用离线安装方式。

3.4 离线安装

离线安装适用于内网隔离或安全合规环境。需提前在有外网的机器上准备离线安装包(包含所有 Harbor 镜像的 tar 文件),然后传输到目标主机。

准备工作

  • 从 GitHub Releases 下载 harbor-offline-installer-<version>.tgz
  • 将离线包 scp 到目标主机:scp harbor-offline-installer-*.tgz user@target:/opt/
  • 解压后执行 sudo ./install.sh,脚本会自动从本地 tar 包加载镜像

离线包内容结构

harbor-offline-installer-v2.10.0.tgz
├── harbor.yml.tmpl
├── install.sh
├── prepare
├── common/
├── harbor.v2.10.0.tar.gz          # 所有 Harbor 组件镜像打包
└── docker-compose.yml
最佳实践:离线部署时建议将 harbor.v2.10.0.tar.gz 提前导入到私有镜像仓库或本地 Docker 缓存,避免 install.sh 重复加载大文件。导入命令:docker load -i harbor.v2.10.0.tar.gz

3.5 Helm Chart 部署(Kubernetes 原生)

Helm Chart 部署是 Kubernetes 环境下的首选方案,利用 Helm 包管理器实现声明式安装、升级与回滚。Harbor 官方维护的 Chart 位于 https://helm.goharbor.io。

部署命令

# 添加 Harbor Helm 仓库
helm repo add harbor https://helm.goharbor.io
helm repo update

# 创建命名空间
kubectl create namespace harbor

# 使用 values.yaml 自定义配置并安装
helm install harbor harbor/harbor \
  --namespace harbor \
  --set expose.type=ingress \
  --set expose.ingress.hosts.core=harbor.example.com \
  --set persistence.persistentVolumeClaim.registry.size=100Gi \
  --set persistence.persistentVolumeClaim.database.size=20Gi

Helm 部署架构特点

组件 Kubernetes 资源类型 说明
Nginx Deployment + Service + Ingress 支持 Ingress 暴露,可配置 TLS
Harbor Core Deployment API 与 UI 服务
Registry Deployment + PVC 镜像存储,支持 PVC 或 S3 后端
Jobservice Deployment 后台任务执行器
PostgreSQL StatefulSet + PVC 数据库持久化
Redis Deployment 缓存与队列
生产建议:Helm 部署时务必配置 persistence.enabled=true 并指定 StorageClass,否则 Pod 重启后数据丢失。保留策略与清理窗口的定时任务由 Jobservice 管理,可通过 jobservice.jobLoggers 配置日志输出。

3.6 Docker Compose 部署(单机快速部署)

Docker Compose 部署是 Harbor 最传统的单机部署方式,适合开发测试或小规模团队使用。Harbor 安装包内置了 docker-compose.yml 文件,install.sh 脚本本质上是调用 docker-compose up -d 启动所有服务。

手动启动流程

# 1. 准备配置文件
cp harbor.yml.tmpl harbor.yml
vi harbor.yml

# 2. 生成配置文件与证书
sudo ./prepare

# 3. 启动所有容器
sudo docker-compose up -d

# 4. 查看运行状态
sudo docker-compose ps

Compose 文件核心服务定义

# docker-compose.yml 关键片段
services:
  proxy:
    image: goharbor/nginx-photon:v2.10.0
    ports:
      - "80:8080"
      - "443:8443"
  core:
    image: goharbor/harbor-core:v2.10.0
    depends_on:
      - database
      - redis
  registry:
    image: goharbor/registry-photon:v2.10.0
    volumes:
      - /data/harbor/registry:/storage
  jobservice:
    image: goharbor/harbor-jobservice:v2.10.0
    depends_on:
      - core
      - redis
  database:
    image: goharbor/harbor-db:v2.10.0
    volumes:
      - /data/harbor/database:/var/lib/postgresql/data
  redis:
    image: goharbor/redis-photon:v2.10.0
限制说明:Docker Compose 部署不具备 Kubernetes 的自动扩缩容与自愈能力。若需高可用或水平扩展,请迁移至 Helm Chart 部署。保留策略的清理窗口在单机模式下受限于 Jobservice 单实例性能,大量制品清理时可能阻塞其他任务。

3.7 部署方式选择决策树

以下决策树帮助你根据实际环境快速定位合适的部署方式:

Harbor 部署方式决策树 已有 Kubernetes 集群? Helm Chart 部署 单机/虚拟机部署 有外网?→ 在线安装 无外网?→ 离线安装 是 否 有外网 无外网 决策要点: • 生产环境优先选择 Helm Chart(K8s)或离线安装(物理机),确保版本可控与安全合规。 • 开发测试环境可使用在线安装或 Docker Compose 快速验证保留策略与清理窗口功能。

3.8 部署方式对保留策略与清理窗口的影响

不同部署方式在保留策略执行与清理窗口配置上存在细微差异,下表总结关键影响点:

部署方式 Jobservice 运行模式 清理窗口配置位置 注意事项
在线/离线安装 Docker 容器(单实例) harbor.yml → jobservice.max_job_workers 清理任务过多时可能阻塞复制任务
Helm Chart 部署 Kubernetes Deployment(可多副本) values.yaml → jobservice.replicas + jobservice.maxJobWorkers 可通过 HPA 自动扩缩 Jobservice 实例
Docker Compose 部署 Docker 容器(单实例) docker-compose.yml 环境变量 MAX_JOB_WORKERS 重启 Compose 后配置生效
核心结论:无论采用哪种部署方式,保留策略与清理窗口的底层逻辑完全一致——由 Jobservice 根据规则定时扫描 Registry 中的制品标签,执行删除或移动操作。部署方式仅影响 Jobservice 的可用性与扩展能力。在生产环境中,建议为 Jobservice 分配独立资源限制(CPU/内存),避免清理任务影响核心 API 响应。