单机Harbor部署指南:从零构建企业级镜像仓库

一、Harbor核心价值与单机部署场景

Harbor作为CNCF毕业的开源项目,通过镜像复制、RBAC权限控制、漏洞扫描等功能,为企业提供安全的私有Docker镜像仓库解决方案。单机部署模式适用于中小型企业、开发测试环境及边缘计算场景,其优势在于资源占用低(建议4核8G以上)、部署周期短(30分钟内可完成)、维护成本可控。

典型应用场景包括:1)隔离生产环境的镜像存储;2)构建CI/CD流水线的私有仓库;3)满足等保2.0要求的镜像安全管控。相较于集群模式,单机部署牺牲了高可用性,但通过定期备份和监控告警可有效降低风险。

二、环境准备与依赖安装

2.1 硬件与系统要求

推荐配置:

  • CPU:4核以上(支持并发构建)
  • 内存:8GB以上(数据库缓存需求)
  • 磁盘:200GB以上(建议SSD存储镜像层)
  • 系统:CentOS 7.x/8.x或Ubuntu 20.04 LTS

2.2 依赖组件安装

Docker环境配置

  1. # CentOS 7示例
  2. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. sudo yum install docker-ce docker-ce-cli containerd.io
  5. sudo systemctl enable --now docker

Docker Compose安装(1.29+版本)

  1. sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose

2.3 网络与存储规划

  • 网络:确保80/443/4443端口可用(HTTPS需443)
  • 存储:建议使用独立磁盘挂载至/var/lib/registry
  • 证书:准备域名证书(或自签名证书)至/data/cert/目录

三、Harbor核心部署流程

3.1 下载安装包

  1. wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
  2. tar xvf harbor-offline-installer-v2.9.0.tgz
  3. cd harbor

3.2 配置文件定制

修改harbor.yml.tmplharbor.yml,关键配置项:

  1. hostname: registry.example.com # 替换为实际域名
  2. http:
  3. port: 80
  4. https:
  5. port: 443
  6. certificate: /data/cert/domain.crt
  7. private_key: /data/cert/domain.key
  8. harbor_admin_password: Harbor12345 # 初始管理员密码
  9. database:
  10. password: root123 # 数据库密码
  11. storage_driver:
  12. name: filesystem
  13. fs_driver:
  14. rootdirectory: /var/lib/registry

3.3 执行安装脚本

  1. ./install.sh --with-trivy # 包含漏洞扫描组件

安装过程会依次完成:

  1. 初始化PostgreSQL数据库
  2. 部署Redis缓存
  3. 启动Core服务、JobService、Registry
  4. 配置Nginx反向代理

3.4 验证部署结果

  1. docker ps | grep harbor
  2. # 应看到以下容器:
  3. # harbor-core, harbor-db, harbor-jobservice, harbor-portal, nginx, registry, trivy

访问https://registry.example.com,使用默认账号admin/Harbor12345登录。

四、安全加固最佳实践

4.1 传输层安全

  • 强制HTTPS:在harbor.yml中设置https.port并配置有效证书
  • 禁用HTTP:注释掉http配置段
  • 启用HSTS:在Nginx配置中添加add_header Strict-Transport-Security "max-age=63072000; includeSubDomains"

4.2 访问控制

  • RBAC策略:通过Web界面创建项目级权限(开发者/维护者/访客)
  • 机器人账号:为CI/CD流水线创建专用账号,限制推送权限
  • 审计日志:定期检查/var/log/harbor/下的操作日志

4.3 镜像安全

  • 漏洞扫描:配置Trivy定期扫描(./prepare脚本自动初始化)
  • 签名验证:集成Notary实现镜像签名
  • 镜像保留策略:设置自动清理规则(如保留最近3个版本)

五、运维与故障排查

5.1 日常维护命令

  1. # 停止服务
  2. docker-compose down
  3. # 启动服务
  4. docker-compose up -d
  5. # 查看日志
  6. docker-compose logs -f harbor-core
  7. # 数据库备份
  8. pg_dump -U postgres -h 127.0.0.1 -p 5432 registry > harbor_db.sql

5.2 常见问题处理

问题1:502 Bad Gateway

  • 检查Nginx容器日志:docker logs harbor-nginx
  • 常见原因:Core服务未启动或数据库连接失败

问题2:镜像推送失败

  • 验证证书链完整性:openssl s_client -connect registry.example.com:443 -showcerts
  • 检查磁盘空间:df -h /var/lib/registry

问题3:性能下降

  • 数据库优化:调整PostgreSQL的shared_buffers参数
  • 缓存配置:增加Redis内存限制

六、进阶功能扩展

6.1 镜像复制

配置复制规则实现多仓库同步:

  1. # 在harbor.yml中添加
  2. replication:
  3. - name: "cloud_replication"
  4. disabled: false
  5. src_registry:
  6. url: "https://registry.example.com"
  7. dest_registries:
  8. - url: "https://remote-registry.com"
  9. username: "rep_user"
  10. password: "rep_pass"

6.2 与K8s集成

创建Secret访问Harbor:

  1. kubectl create secret docker-registry regcred \
  2. --docker-server=registry.example.com \
  3. --docker-username=admin \
  4. --docker-password=Harbor12345 \
  5. --docker-email=admin@example.com

6.3 监控告警

集成Prometheus监控:

  1. # 在prometheus.yml中添加
  2. - job_name: 'harbor'
  3. static_configs:
  4. - targets: ['harbor-core:8000']

七、总结与建议

单机Harbor部署的关键成功要素包括:

  1. 提前规划存储容量(按每GB镜像≈3倍磁盘占用计算)
  2. 定期执行数据库维护(VACUUM FULL分析)
  3. 建立备份策略(每日全量+增量备份)
  4. 关注CNCF安全公告及时升级

对于生产环境,建议结合以下措施提升可靠性:

  • 部署Keepalived实现VIP切换
  • 使用对象存储(如MinIO)作为后端存储
  • 集成LDAP实现统一认证

通过规范化的部署流程和持续的运维优化,单机Harbor可稳定支撑中小型企业的容器镜像管理需求,为DevOps流程提供可靠的基础设施支撑。