单机Harbor部署全指南:从环境准备到安全运维
一、引言:为何选择单机Harbor?
在容器化技术普及的今天,私有镜像仓库已成为企业DevOps流程的核心组件。Harbor作为CNCF(云原生计算基金会)毕业项目,凭借其权限控制、镜像签名、漏洞扫描等企业级功能,成为开发者构建私有Registry的首选。单机部署模式因其资源占用低、配置简单、维护成本低的特点,尤其适合中小团队或测试环境使用。
本文将围绕单机Harbor的部署展开,从环境准备、安装配置到安全加固,提供一套可复用、可扩展的部署方案,帮助开发者在1小时内完成从零到一的搭建。
二、环境准备:基础要求与前置条件
1. 硬件与软件要求
- 硬件:建议至少2核CPU、4GB内存、20GB磁盘空间(生产环境需根据镜像存储量扩容)。
- 操作系统:支持Linux(CentOS 7+/Ubuntu 18.04+),本文以CentOS 8为例。
- 依赖组件:
- Docker 19.03+(用于运行Harbor容器)
- Docker Compose 1.25+(Harbor 2.0+默认使用Compose部署)
- Nginx(可选,用于反向代理)
2. 网络与域名配置
单机Harbor默认使用80/443端口,需确保:
- 防火墙开放80(HTTP)、443(HTTPS)、22(SSH,可选)端口。
- 若需HTTPS,需准备域名及SSL证书(自签名或CA签发)。
- 主机名解析:在
/etc/hosts中添加<IP> <hostname>(如192.168.1.100 harbor.example.com)。
3. 安装Docker与Docker Compose
# 安装Dockersudo yum install -y yum-utilssudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install -y docker-ce docker-ce-cli containerd.iosudo systemctl enable --now docker# 安装Docker Composesudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
三、Harbor安装与配置
1. 下载Harbor安装包
访问Harbor官方Release页面,选择最新稳定版(如v2.9.0),下载压缩包并解压:
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgztar xzf harbor-offline-installer-v2.9.0.tgzcd harbor
2. 配置Harbor
编辑harbor.yml文件,重点修改以下参数:
hostname: harbor.example.com # 必须与域名一致http:port: 80https:port: 443certificate: /data/cert/harbor.crt # SSL证书路径private_key: /data/cert/harbor.keyharbor_admin_password: Harbor12345 # 初始管理员密码database:password: root123 # 数据库密码data_volume: /data # 数据存储目录
关键配置说明:
- hostname:必须与访问域名一致,否则会导致Cookie或API调用失败。
- 数据存储:建议使用独立磁盘或分布式存储(如NFS),避免与系统盘混用。
- 密码安全:生产环境需使用强密码,并通过
./prepare脚本加密存储。
3. 安装与启动
执行安装脚本,Harbor会自动拉取镜像并启动服务:
sudo mkdir -p /data/cert # 创建证书目录(若使用HTTPS)sudo ./install.sh
安装完成后,通过docker-compose ps验证服务状态:
$ docker-compose psName Command State Ports----------------------------------------------------------------------------------harbor-core /harbor/harbor_core Upharbor-db /docker-entrypoint.sh mysqld Upharbor-jobservice /harbor/harbor_jobservice Upharbor-log /bin/sh -c /usr/local/bin/ ... Upharbor-portal nginx -g daemon off; Upnginx nginx -g daemon off; Upredis redis-server /etc/redis.conf Upregistry /home/harbor/entrypoint.sh Up
四、安全加固与最佳实践
1. HTTPS配置
若未配置HTTPS,浏览器访问时会提示“不安全”。推荐使用Let’s Encrypt免费证书:
# 安装Certbotsudo yum install -y certbot python3-certbot-nginx# 获取证书(需提前解析域名)sudo certbot certonly --nginx -d harbor.example.com# 修改harbor.yml中的证书路径certificate: /etc/letsencrypt/live/harbor.example.com/fullchain.pemprivate_key: /etc/letsencrypt/live/harbor.example.com/privkey.pem
2. 权限管理与用户认证
Harbor支持数据库认证、LDAP集成、OAuth2等多种方式。以LDAP为例:
# 在harbor.yml中启用LDAPauth_mode: ldapldap:url: ldap://ldap.example.comsearch_dn: uid=admin,ou=users,dc=example,dc=comsearch_password: admin123base_dn: ou=users,dc=example,dc=comuid: uidfilter: (objectClass=person)scope: 2
3. 镜像签名与漏洞扫描
Harbor内置Notary(镜像签名)和Clair(漏洞扫描)服务。启用步骤:
-
镜像签名:
- 在
harbor.yml中设置notary.enabled: true。 - 客户端推送镜像时需添加
--disable-content-trust=false。
- 在
-
漏洞扫描:
- 确保
scan.policy配置为daily或realtime。 - 扫描结果可通过Web界面或API查看。
- 确保
五、运维管理与故障排查
1. 日常维护命令
# 重启Harborcd /path/to/harbordocker-compose downdocker-compose up -d# 查看日志docker-compose logs -f# 备份数据sudo tar czf harbor_backup_$(date +%Y%m%d).tar.gz /data
2. 常见问题解决
-
问题1:502 Bad Gateway
- 原因:Nginx与后端服务通信失败。
- 解决:检查
docker-compose logs nginx,确认harbor-core是否运行。
-
问题2:镜像推送失败(401 Unauthorized)
- 原因:密码错误或权限不足。
- 解决:通过
curl -u admin:Harbor12345 -X GET https://harbor.example.com/api/v2.0/projects测试API访问。
-
问题3:磁盘空间不足
- 解决:清理无用镜像(
docker system prune),或扩展/data分区。
- 解决:清理无用镜像(
六、总结与扩展建议
单机Harbor部署虽简单,但需注意以下关键点:
- 数据备份:定期备份
/data目录,避免镜像丢失。 - 高可用:生产环境建议使用Harbor集群(需共享存储和数据库)。
- 监控:集成Prometheus+Grafana监控Harbor指标(如请求延迟、存储使用率)。
通过本文的步骤,开发者可快速完成单机Harbor的部署,并基于其扩展CI/CD流水线(如Jenkins集成)、多集群镜像分发等场景。Harbor的模块化设计(如可插拔的认证、扫描模块)也为其在复杂环境中的适配提供了灵活性。