环境
Linux PXC03 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
硬件配置
| 资源 | 最低 | 推荐 |
|---|---|---|
| CPU | 2 CPU | 4 CPU |
| 内存 | 4 GB | 8 GB |
| 磁盘 | 40 | 160 GB |
软件基础
| 软件 | 版本 | 描述 |
|---|---|---|
| Docker引擎 | > 20.10 | Docker 引擎安装 |
| Docker Compose | > 2.3 | Docker Compose 是 Docker 引擎的一部分 |
| OpenSSL | 最新 | (可选) 用于为 Harbor 生成证书和密钥 |
Tips:
需要docker 和 docker compose 的原因:
Harbor 本身并不是一个直接安装在操作系统上的独立软件,而是一套由多个 Docker 容器组成的复杂应用系统
在 Harbor 的架构中,每一个核心组件都被打包成一个独立的 Docker 容器。这意味着当你安装 Harbor 时,实际上是在你的服务器上启动一系列相互协作的 Docker 容器。
通过命令(如 docker-compose up -d)来一键启动、停止或重启整个 Harbor 集群,极大地简化了部署和运维的复杂度。
安装
有了以上基础后,进入安装流程
一种在线安装,一种离线安装
安装包地址:https://github.com/goharbor/harbor/releases
下载好之后,直接解压后,得到如图文件
tar xzvf harbor-offline-installer-version.tgz

其中 install.sh是安装脚本,prepare 是在修改配置后,重新生成配置的脚本
安装时可选择是否要安装 Trivy ,默认是不安装
./install.sh # 不安装Trivy
./install.sh --with-trivy # 安装Trivy
Tips:
在更新了 /etc/docker/daemon.json 时,必需重启 Docker Engine 和 Harbor,命令如下:
systemctl restart docker # 重启Docker Engine
docker-compose down -v # Harbor 停止并删除
docker-compose up -d # Harbor 启动
配置Harbor
harbor.yml.tmpl 文件为提供的配置文件模板
关于高可用的 Harbor 配置,参考:https://goharbor.cn/docs/2.13.0/install-config/harbor-ha-helm/
配置Https访问
配置访问地址:hostname
配置http 或https 信息
证书要先生成,并把放证书的目录配置到此图中

配置管理员密码[harbor_admin_password],账号为: admin
生成SSL自签证书
生成证书颁发机构证书
生成 CA 证书私钥
openssl genrsa -out ca.key 4096生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=MyPersonal Root CA" \ -key ca.key \ -out ca.crt
生成服务器证书
生成私钥。
openssl genrsa -out harbor.rojers.com.key 4096生成证书签名请求 (CSR)。
openssl req -sha512 -new \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.rojers.com" \ -key harbor.rojers.com.key \ -out harbor.rojers.com.csr生成 x509 v3 扩展文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.rojers.com
DNS.2=PXC03
EOF
使用 v3.ext 文件为 Harbor 主机生成证书。
openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in harbor.rojers.com.csr \ -out harbor.rojers.com.crt向 Harbor 和 Docker 提供证书,将服务器证书和密钥复制到 Harbor 主机上的证书文件夹中
cp harbor.rojers.com.crt /data/cert/ cp harbor.rojers.com.key /data/cert/将 harbor.rojers.com.crt 转换为 harbor.rojers.com.cert,供 Docker 使用。
Docker 守护程序将 .crt 文件解释为 CA 证书,将 .cert 文件解释为客户端证书。openssl x509 -inform PEM -in harbor.rojers.com.crt -out harbor.rojers.com.cert将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中
关于win环境信任证书问题,若不是标准的80和443端口来运行harbor,只能配置“insecure-registries” 参数来解决登陆时提示证书错误的问题,原因为:win环境不支持目录名里面有“:”冒号,导致Docker Desktop无法读取到证书cp harbor.rojers.com.cert /etc/docker/certs.d/harbor.rojers.com:3443/ cp harbor.rojers.com.key /etc/docker/certs.d/harbor.rojers.com:3443/ cp ca.crt /etc/docker/certs.d/harbor.rojers.com:3443/配置结果
/etc/docker/certs.d/ └── harbor.rojers.com:port ├── harbor.rojers.com.cert <-- Server certificate signed by CA ├── harbor.rojers.com.key <-- Server key signed by CA └── ca.crt <-- Certificate authority that signed the registry certificate
内部组件中的TLS访问
默认是通过 http 的方式进行通信
通过 harbor.yml 文件中的 internal_tls 引入。要启用内部 TLS,请将 enabled 设置为 true,并将 dir 值设置为包含内部证书文件的目录路径。
配置文件解读
问题记录:
登陆失败,提示核心服务不可用

检查:
docker-compsoe ps -a # 查看所有启动的容器是否都是健康状态(healthy)
# core 服务一直是 starting 状态,没有启动成功,查看日志说是链接不上redis报错
# 重启整个服务,命令如下
docker-compose down -v # 停止服务,并删除容器
docker-compose up -d # 后台启动
docker-compose ps -a # 查看所有容器的状态
关于使用
如下图中的复制,复制出来的地址,为一个拉取镜像地址,带有一个 hash值,不是标签

原因
标签(Tag)是会变的:比如 v1.0.0 这个标签,理论上可以被删除,然后重新打给一个新的镜像。
哈希值(Digest)是永久不变的:sha256... 代表了这个镜像的唯一内容。无论标签怎么变,只要这个哈希值不变,镜像的内容就绝对没变。
使用哈希值拉取的好处是:绝对精准,永远不会拉错版本。
返直觉:拉取成功后,因没有标签,并不能通过 docker images -a 命令能查看到,
但可以直接通过 docker run 的方式来运行
全部安装的操作
删除 Harbor 数据库和镜像数据
rm -r /data/database
rm -r /data/registry
rm -r /data/redis
数据目录的用途说明
[root@PXC03 harbor_data]# ll
total 0
drwxr-xr-x 2 10000 10000 6 Apr 13 19:52 ca_download # Harbor 支持内容信任(Notary)或者某些客户端需要下载 CA 证书来信任 Harbor,证书文件会放在这里供下载
drwx------ 3 polkitd input 18 Apr 13 19:52 database # 元数据 运行的是 PostgreSQL
drwxr-xr-x 2 10000 10000 6 Apr 13 19:52 job_logs # 后台任务的日志,不是容器的日志
drwxr-xr-x 2 polkitd input 22 Apr 14 16:16 redis # 缓存数据和任务队列
drwxr-xr-x 3 10000 10000 20 Apr 13 20:12 registry # 实际文件 里面是 Docker Distribution(开源的 Docker 仓库软件)的数据 保存真正的镜像文件(Blob 数据)
drwxr-xr-x 6 root root 58 Apr 14 10:39 secret #敏感信息 存放 Harbor 内部各组件之间通信需要的密钥、令牌(Token)或者证书