一、Harbor 安装前提条件
1、硬件 下表列出了部署 Harbor 的最小和推荐硬件配置
资源 | 最低 | 推荐 |
---|---|---|
CPU | 2 个 CPU | 4 个 CPU |
内存 | 4 GB | 8 GB |
硬盘 | 40 GB | 160 GB |
2、软件 下表列出了必须安装在目标主机上的软件版本。
软件 | 版本 | 描述 |
---|---|---|
Docker 引擎 | 版本 > 20.10 | Docker 引擎安装 |
Docker Compose | Docker Compose > 2.3 | Docker Compose 是 Docker 引擎的一部分 |
OpenSSL | 建议使用最新版本 | 用于生成 Harbor 的证书和密钥 |
3、网络端口 Harbor 需要在目标主机上打开以下端口。
端口 | 协议 | 描述 |
---|---|---|
443 | HTTPS | Harbor 门户和核心 API 接受此端口上的 HTTPS 请求。您可以在配置文件中更改此端口。 |
80 | HTTP | Harbor 门户和核心 API 接受此端口上的 HTTP 请求。您可以在配置文件中更改此端口。 |
二、下载 Harbor 安装程序
- Harbor 的官方发布版本通常托管在 GitHub 上。
- 访问 Harbor 的 GitHub Releases 页面: https://github.com/goharbor/harbor/releases
- 在对应的版本中,你可以找到以下文件:
- harbor-offline-installer-<version>.tgz(离线安装包)
- harbor-online-installer-<version>.tgz(在线安装包)
1、在线安装程序: 在线安装程序从 Docker Hub 下载 Harbor 镜像。 因此,安装程序的大小非常小。
2、离线安装程序:如果部署 Harbor 的主机没有互联网连接,请使用离线安装程序。 离线安装程序包含预构建的镜像,因此它比在线安装程序更大。
3、在线和离线安装程序的安装过程几乎相同。
4、离线安装包:harbor-offline-installer-v2.12.2.tgz 链接: https://pan.baidu.com/s/14phQDo5sU-LOPmjMPXBamA 提取码: 6yuy
三、安装 Docker
# 添加阿里云docker-ce仓库
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 列出当前系统中所有可安装的 docker-ce 版本,并按照版本号从高到低进行排序,同时显示重复的版本。
dnf list docker-ce --showduplicates | sort -r
# 安装最新版本 docker-ce,也可以指定版本安装(dnf install -y docker-ce-20.10.15-3.el9.x86_64)
dnf install -y docker-ce
# 启用Docker Cgroup用于限制进程的资源使用量,如CPU、内存资源
# 创建目录,存放 docker 的配置文件
mkdir /etc/docker
# 创建并写入 /etc/docker/daemon.json 文件,设置 Docker 使用 systemd 作为 Cgroup 驱动
# registry-mirrors 配置:docker 镜像加速器的地址列表。
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://qa9ktbtj.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn",
"https://www.daocloud.io/mirror"
]
}
EOF
# 设置 docker 开机自启
systemctl enable docker
# 启动 docker
systemctl start docker
# 查看 docker 状态
systemctl status docker
四、安装 Harbor
1、解压离线安装包
# 根目录下创建 /data 目录
mkdir /data
# 解压缩 harbor-offline-installer-v2.12.2.tgz 内容到 /data 目录下
tar -zxvf harbor-offline-installer-v2.12.2.tgz -C /data
# 进入 /data/harbor/
cd /data/harbor/
# 将当前目录下的 harbor.yml 文件复制一份到当前目录下
cp harbor.yml.tmpl harbor.yml
2、修改 harbor.yml 文件内容
# harbor 服务器的主机名或 IP
hostname: 192.168.31.113
# http 端口, 默认 80, 可自行修改如 8081 8082等
http:
port: 80
3、运行安装脚本
# 运行安装脚本
./install.sh
看到下面输出,说明安装成功
[Step 5]: starting Harbor ...
WARN[0000] /data/harbor/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 10/10
✔ Network harbor_harbor Created 0.1s
✔ Container harbor-log Started 0.4s
✔ Container registryctl Started 1.0s
✔ Container redis Started 1.1s
✔ Container harbor-db Started 1.2s
✔ Container harbor-portal Started 1.2s
✔ Container registry Started 1.1s
✔ Container harbor-core Started 1.5s
✔ Container harbor-jobservice Started 2.1s
✔ Container nginx Started 2.1s
✔ ----Harbor has been installed and started successfully.----
4、浏览器访问
# 用服务器 IP(192.168.31.113) 通过浏览器访问 Harbor 控制台,
# 如果上面端口修改为 8081, 访问 http://192.168.31.113:8081
# 默认用户 admin,默认密码 Harbor12345(可在 harbor.yml 中修改)
四、配置 Harbor 的 HTTPS 访问
本文用的是阿里云的免费证书
1、配置 Harbor 组件之间的内部 TLS 通信
默认情况下,Harbor 组件 (harbor-core, harbor-jobservice, proxy, harbor-portal, registry, registryctl, trivy_adapter, chartmuseum) 之间的内部通信使用 HTTP 协议,这对于某些生产环境而言可能不够安全。 从 Harbor v2.0 开始,可以将 TLS 用于此内部网络。 在生产环境中,始终使用 HTTPS 是推荐的最佳实践。
此功能通过 harbor.yml 文件中的 internal_tls 引入。 要启用内部 TLS,请将 enabled 设置为 true,并将 dir 值设置为包含内部证书文件的目录路径。
# 所有证书都可以通过 prepare 工具自动生成。
# 不加 -d 3650 默认有效期一年,加了之后十年
docker run -v /:/hostfs goharbor/prepare:v2.12.2 gencert -p /data/cert/tls/internal -d 3650
2、harbor.yml 文件内容
# Harbor 的目标主机上的 IP 地址、主机名 或 域名
hostname: reg.mydomain.com
# 使用 HTTPS 访问 Harbor 门户和令牌/通知服务。始终在生产环境和没有隔离的环境中使用 HTTPS。
https:
# HTTPS 的端口号,用于 Harbor 门户和 Docker 命令。默认值为 443,但是一定要与 external_url 参数的端口号一致
port: 443
# SSL 证书的路径
certificate: /your/certificate/path
# SSL 密钥的路径
private_key: /your/private/key/path
# 是否启用强 SSL/TLS 加密套件,建议将此选项设置为 true
strong_ssl_ciphers: true
# 使用 HTTPS 在 Harbor 组件之间通信
internal_tls:
# 将此标志设置为 true 表示内部 tls 已启用
enabled: true
# 包含内部证书和密钥的目录的路径
dir: /data/secret/tls/
# 启用此选项以使用外部代理。启用后,将不再使用主机名
external_url: https://reg.mydomain.com:443
# Harbor 系统管理员设置初始密码
# 默认用户名和密码为 admin 和 Harbor12345
# 记住在启动 Harbor 后从 UI 更改管理员密码
harbor_admin_password: Harbor12345
# 使用本地 PostgreSQL 数据库。您可以选择配置外部数据库,在这种情况下,您可以停用此选项。
database:
# 设置本地数据库的 root 密码。您必须为生产部署更改此密码。
password: root123
# 空闲连接池中的最大连接数。如果它 <=0,则不保留任何空闲连接。
max_idle_conns: 100
# 到数据库的最大打开连接数。如果它 <= 0,则对打开连接数没有限制。
max_open_conns: 900
# 连接可以重复使用的最长时间。如果它 <= 0,则连接不会因为连接的年龄而关闭。
conn_max_lifetime: 5m
# 连接可以空闲的最长时间。如果它 <= 0,则连接不会因为连接的空闲时间而关闭。
conn_max_idle_time: 0
# 在目标主机上存储 Harbor 数据的位置。即使 Harbor 的容器被删除和/或重新创建,这些数据也会保持不变。
data_volume: /data/harbor-storage
配置 Trivy(Harbor 的漏洞扫描组件
) 扫描器。
trivy:
# 生产环境建议仅显示有官方修复方案的漏洞
ignore_unfixed: true
# 生产环境必须启用跳过自动更新(需手动维护漏洞数据库)
skip_update: true
# 生产环境建议跳过 Java 数据库自动更新
skip_java_db_update: true
# 启用离线扫描模式(避免依赖外部网络)
offline_scan: true
# 生产环境建议全安全检查(漏洞+配置+密钥)
security_check: vuln,config,secret
# 保持证书验证严格模式
insecure: false
# 根据实际镜像大小调整超时时间(建议 10-15 分钟)
timeout: 15m0s
# 在 air-gapped 环境需要注释以下 token
# github_token: your_github_token
3、运行安装脚本
方式一:默认安装,不含 Trivy
./install.sh
方式二:包含 Trivy 的安装
./install.sh --with-trivy
如果安装成功,您可以在浏览器中访问 https://reg.yourdomain.com 上的 Harbor 界面,将 reg.yourdomain.com 替换为您在 harbor.yml 中配置的域名。如果您未在 harbor.yml 中更改它们,则默认管理员用户名和密码为 admin 和 Harbor12345。
4、常用命令
# cd 到 install.sh 所在目录,停止并删除现有 harbor 服务
docker compose down
# 在后台启动 harbor 服务
docker compose up -d