本文目录
- [1. 下载 Harbor 安装包](#1. 下载 Harbor 安装包)
- [2. 解压](#2. 解压)
- [3. 修改配置文件](#3. 修改配置文件)
- [4. 安装 Harbor](#4. 安装 Harbor)
- [5. 修改 docker 配置](#5. 修改 docker 配置)
- [6. docker 登录方式](#6. docker 登录方式)
- [7. 访问 Harbor Web 界面](#7. 访问 Harbor Web 界面)
- [8. 创建证书](#8. 创建证书)
- [9. 生成证书](#9. 生成证书)
- [10. 更新配置](#10. 更新配置)
- [11. 网页登录](#11. 网页登录)
说明:在搭建 Harbor 镜像仓库之前,虚拟机要先安装 docker 和 docker-compose。
本文接下来的命令都是在 root 身份下运行的。
1. 下载 Harbor 安装包
-
直接下载可以使用以下命令:
shellwget https: /github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz
直接在虚拟机内部执行上面这条命令的话,下载速度会很慢,所以此处通过外部主机下载后共享文件夹导入虚拟机中。
2. 解压
-
输入以下命令进行解压:
shelltar -xvf harbor-offline-installer-v2.8.2.tgz
-
新建一个目录,将
harbor
目录下的文件移动到该目录下。依次输入以下命令:shellmkdir /opt/harbor mv harbor/* /opt/harbor cd /opt/harbor
3. 修改配置文件
-
复制一份
harbor
的配置文件并改名harbor.yml
,输入以下命令:shellcp -ar harbor.yml.tmpl harbor.yml
-
进入配置文件,输入以下命令:
shellvim harbor.yml
-
修改
hostname
和port
:yamlhostname: 192.168.138.130 # 这里改为虚拟机的 IP port: 85 # 开放端口 # 注释 https 相关部分,从13行开始
4. 安装 Harbor
-
编辑完配置文件,接下来在
harbor
目录下安装 Harbor。 -
Harbor 安装环境预处理,输入以下命令:
shell./prepare
-
安装并启动 Harbor,输入以下命令:
shell./install.sh
如上图所示,安装并启动成功!
-
检查是否安装成功(应该是启动9个容器)。输入以下命令:
shelldocker-compose ps
5. 修改 docker 配置
-
进入配置文件,输入以下命令:
shellvim /etc/docker/daemon.json
-
在配置文件中添加以下内容(添加阿里云镜像下载地址):
json{ "registry-mirrors": ["https://ov31ob13.mirror.aliyuncs.com"] }
-
重启 docker 和 harbor 容器,依次输入以下命令:
shellsystemctl restart docker docker-compose stop docker-compose up -d
6. docker 登录方式
-
输入以下命令进行登录:
shelldocker login 192.168.138.130:85
然后输入用户名(admin)和密码(Harbor12345)。
-
或者直接输入下面这条命令登录即可:
shelldocker login -u admin -p Harbor12345 192.168.138.130:85
7. 访问 Harbor Web 界面
-
在浏览器输入以下地址:
shhttp://192.168.138.130:85
-
输入用户名和密码,用户名和密码均为默认值:
shell用户名:admin 密码:Harbor12345
至此,CentOS7 搭建 Harbor(http)镜像仓库完成!
接下来在上面操作的基础上搭建 Harbor(https)镜像仓库。
8. 创建证书
-
在工作目录下创建证书存放目录,依次输入以下命令:
shellmkdir ssl cd ssl
配置 Harbor 通过 https 访问时均在新建的
ssl
目录下进行操作。
-
在
ssl
目录下输入以下命令:shellopenssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
注:输入该命令后,一路回车5次直至出现 Common Name 输入(因为是 CA,可不输入 IP 或域名):Harbor Cert Root CA Harbor,为自定义名称。
下面是对该命令的解释:这个命令用于使用 OpenSSL 生成自签名的根证书(Root Certificate)。
openssl
:表示要使用 OpenSSL 命令。req
:表示生成证书签署请求(Certificate Signing Request)。-newkey rsa:4096
:指定生成一个新的 RSA 私钥,并且密钥长度为 4096 位。-nodes
:指定生成私钥时不进行加密,以便后续在没有密码的情况下使用该私钥。-sha256
:使用 SHA256 算法生成证书的摘要。-keyout ca.key
:指定将生成的私钥保存为 ca.key 文件。-x509
:生成自签名的根证书。-days 3650
:指定生成的根证书的有效期为 3650 天(10年)。-out ca.crt
:指定将生成的根证书保存为 ca.crt 文件。执行这个命令后,将获得一个名为 ca.key 的私钥文件和一个名为 ca.crt 的自签名根证书文件。这个根证书可以用于签署其他证书,以建立自己的证书颁发机构(CA)来签发更多的证书。
9. 生成证书
-
生成证书签名请求。在
ssl
目录下输入以下命令:shellopenssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.key -out harbor.csr
注:输入该命令后,一路回车5次出现 Common Name 输入 IP 或域名,此处为:192.168.138.130。
如上图所示,下面是可能会遇到的交互提示及其相应的解释:
Country Name (2 letter code) [XX]:
:输入您所在国家的两个字母的国家代码,例如中国为 "CN"、美国为 "US"。State or Province Name (full name) []:
:输入您所在的省份或州的全名。Locality Name (eg, city) [Default City]:
:输入您所在的城市名称。Organization Name (eg, company) [Default Company Ltd]:
:输入您的组织或公司的名称。Organizational Unit Name (eg, section) []:
:输入您的组织或公司的部门名称,可留空。Common Name (eg, your name or your server's hostname) []:
:输入您或您的服务器的主机名。如果您正在生成证书签署请求,可以使用一个描述性的名称,或者使用您的服务器的域名(如果有)。Email Address []:
:输入与证书相关的电子邮件地址,可留空。A challenge password []:
:留空,直接按回车键继续。An optional company name []:
:可留空,直接按回车键继续。
-
新建文件,在
ssl
目录下输入以下命令:shelltouch extfile.cnf
-
进入文件,输入以下命令:
shellvim extfile.cnf
-
进入该文件后添加以下内容:
yamlsubjectAltName = @alt_names extendedKeyUsage = serverAuth [alt_names] # 域名,如有多个用DNS.2,DNS.3...来增加 DNS.1 = xxx.harbor.cn DNS.2 = *.harbor.cn # IP地址, 服务器的ip IP.1 = 192.168.138.130 IP.2 = 127.0.0.1
-
在
ssl
目录下输入以下命令:shellopenssl x509 -req -days 3650 -in harbor.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor.crt
10. 更新配置
- 查看
harbor.crt
和harbor.key
文件所在的路径,配置文件时需要用。
-
编辑
harbor.yml
文件,修改该文件时需要注意缩进。修改内容如下:shellcd harbor vim harbor.yml
-
在
harbor
目录下执行命令更新配置,使yml
配置文件生效。依次输入以下命令:shell./prepare ./install.sh
11. 网页登录
-
在登录前关闭虚拟机防火墙(或者防火墙在开启状态下允许444端口)。登录地址如下:
shellhttps://192.168.138.130:444
- 用户名和密码不变,还是和前面 Harbor(http)一致。