Skip to content

离线安装Harbor1.9.0

不建议使用1.x这里是历史文档,建议使用2.x,2.x有很多新的东西

前置条件:Docker安装

docker-compose安装

下载

https://github.com/docker/compose/releases

上传改名加权限

bash
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v # 测试

下载离线二进制包

harbor v1.9.0 · harbor · 页面:https://github.com/goharbor/harbor/releases/tag/v1.9.0

harbor离线安装包下载链接:https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.0.tgz

解压harbor

tar -xvf harbor-offline-installer-v1.9.0.tgz

修改harbor.yml

进入harbor目录:vi harbor.yml

hostname: xxx # 有域名就配域名,没有域名就配IP

# Https配置[可以不做] 如果配置参考下面的步骤
# 不使用https参照这篇 https://goharbor.io/docs/2.8.0/install-config/run-installer-script/
将https、port、certificate、private_key解开注释
	port https的端口,默认443
	certificate 	SSL 证书的路径
	private_key 	SSL 密钥的路径

harbor_admin_password: 登录harbor密码

配置https

openssl的安装包在此目录下有openssl.tar,使用解压后的文件安装即可,在线安装直接yum安装即可

生成证书颁发机构 证书

1、生成CA证书私钥

bash
openssl genrsa -out ca.key 4096

2、生成 CA 证书

bash
# 注意修改 yourdomain.com 有域名用域名,没有域名用IP

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
 -key ca.key \
 -out ca.crt

问题:

  1. Can't load /root/.rnd into RNG

    bash
    # 解决办法:
    cd /root
    openssl rand -writerand .rnd

    重新执行即可

生成服务器证书

1、生成私钥

bash
# 注意修改 yourdomain.com 有域名用域名,没有域名用IP
openssl genrsa -out yourdomain.com.key 4096

2、生成证书签名请求 (CSR)

bash
# 注意修改 yourdomain.com 有域名用域名,没有域名用IP
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
    -key yourdomain.com.key \
    -out yourdomain.com.csr

3、生成 x509 v3 扩展文件

bash
# 注意修改 yourdomain.com 有域名用域名,没有域名用IP
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

问题:

  1. 域名方式

    DNS.x可以继续加授信域名

  2. IP方式

    bash
    cat > v3.ext <<-EOF
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = IP:xxx.xxx.xxx.xxx
    EOF

4、使用 v3.ext 文件,为 Harbor 主机生成证书

bash
# 注意修改 yourdomain.com 有域名用域名,没有域名用IP
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt

向 Harbor 和 Docker 提供证书

生成后 ca.crt, yourdomain.com.crtyourdomain.com.key,必须将它们提供给 Harbor 和 Docker,并重新配置 Harbor 。

1、将服务器证书和密钥复制到 Harbor 主机上的证书文件夹中。

bash
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/

2、转换 yourdomain.com.crtyourdomain.com.cert, 供 Docker 使用。

Docker 守护程序解释 .crt 文件 作为 CA 证书和 .cert 文件作为客户端证书

sh
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

3、将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。您必须先创建相应的文件夹。

sh
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/

如果将默认端口 443 映射到其他端口,请创建文件夹,或

bash
nginx /etc/docker/certs.d/yourdomain.com:port /etc/docker/certs.d/harbor_IP:port

4、重新启动 Docker

bash
systemctl restart docker

部署或重新配置Harbor

如果尚未部署 Harbor,请参阅 配置 Harbor YML 文件:https://goharbor.io/docs/2.8.0/install-config/configure-yml-file/ 有关如何通过指定harbor.yml中的属性: hostnamehttps

1、运行脚本以启用 HTTPS

bash
./prepare
./install.sh

2、如果 Harbor 正在运行,请停止并删除现有实例docker stop $(docker ps -q) & docker rm $(docker ps -aq)

您的镜像数据保留在文件系统中,因此不会丢失任何数据

bash
docker-compose down -v

3、重新启动Harbor

bash
docker-compose up -d

docker-compose命令:

bash
docker-compose ps		
docker-compose up -d 	# 后台启动,如果容器不存在根据镜像自动创建
docker-compose down -v	# 停止容器并删除容器
docker-compose start	# 启动容器,如果容器不存在就无法启动,不会自动创建镜像
docker-compose stop		# 停止容器
docker-compose logs		# 查看日志(harbor日志存放地址/ver/logs/harbor)

1、使用IP或域名访问WEB、登录

2、docker登录

bash
docker login xxx.xxx.xxx.xxx

输入账号密码

推送镜像

创建项目——>xxx

1、制作镜像标签

bash
docker tag 镜像名:标签 IP/项目名/镜像名:标签

推送镜像

bash
docker push IP/项目名/镜像名:标签

如果在其他地方连接说不安全,可以将ca证书安装即可,

如果使用证书颁发者的中间证书,请将中间证书与您自己的证书合并以创建证书捆绑包。运行以下命令

bash
cat intermediate-certificate.pem >> yourdomain.com.crt

当 Docker 守护程序在某些操作系统上运行时,您可能需要在操作系统级别信任证书。例如,运行以下命令

Ubuntu

bash
cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt 
update-ca-certificates

Red Hat (CentOS 等)

bash
cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt
update-ca-trust

win直接下载ca根证书安装,安装完证书后重启Docker

重新安装

bash
systemctl stop harbor # 停止现有的服务
docker stop `docker ps -q`
docker stop `docker ps -qa`
docker rmi `docker images`

再重新安装即可

配置开机启动

bash
vi /etc/systemd/system/harbor.service

添加:

bash
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f 安装目录/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f 安装目录/docker-compose.yml down

[Install]
WantedBy=multi-user.target

配置权限

chmod 755 harbor.service   # 配置权限

systemctl daemon-reload    # 重载

systemctl enable harbor    # 开机启动

systemctl status harbor    # 查看状态

配置完成检查发现harbor状态没有,是停止的,但是手动执行docker-compose ps检查发现是正常运行的

使用 systemctl restart harbor 重启一次就好了

问题记录

Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-cbded1298bf1 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

说明docker网关是关闭的,docker network无法对新的container进行网络配置,重启一下docker就行。

systemctl restart docker

Docker http登录Harbor

新建或修改

bash
vi /etc/docker/daemon.json
json
{
  "insecure-registries":["IP"],
  "live-restore": true
}

Harbor仓库迁移

这里是以http部署的迁移,https的迁移可以参考一下

前置条件:有Docker环境,与原版本建议相差不要太大

安装docker-compose

下载

https://github.com/docker/compose/releases

上传改名加权限

bash

$ mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose -v # 测试

停止原Harbor仓库

bash
$ systemctl stop harbor # 有配置的话
# 没有的话到 /.../Harbor/harbor目录下执行
$ docker-compose down

Harbor数据迁移

将原来的Harbor数据打包,我是整个目录打包,整个目录结构大致如下

bash
Harbor
├── data    # 数据目录
├── harbor  # harbor离线包解压出来的目录
│   ├── common
│   ├── docker-compose.yml # docker-compose用到的文件
│   ├── harbor.v1.9.0.tar.gz # 离线镜像包,docker load使用
│   ├── harbor.yml # harbor的配置文件
│   ├── install.sh # harbor安装脚本【除了第一次后面不要执行,执行会导致原来的数据不可用】
│   └── prepare
├── harbor-offline-installer-v1.9.0.tgz
└── logs

导入离线镜像

/.../Harbor/harbor目录下执行

bash
$ docker load -i harbor.v1.9.0.tar.gz

调整配置

修改/.../Harbor/harbor目录下的harbor.yml文件

bash
hostname: llk.harbor.com
data_volume: /data/Harbor/data
log:
    location: /var/log/harbor

hostname:如果原来配置的是IP地址,必须修改,如果是域名,根据需要看是否调整解析/调整hosts等

data_volume:新的数据目录

https的:除了以上内容外,还需要调整证书的路径

修改完毕执行

bash
$ ./prepare

配置开机启动

bash
vi /etc/systemd/system/harbor.service

添加:

bash
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f /.../Harbor/harbor目录/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /.../Harbor/harbor目录/docker-compose.yml down

[Install]
WantedBy=multi-user.target

配置权限

bash
$ chmod 755 harbor.service   # 配置权限

$ systemctl daemon-reload    # 重载

$ systemctl enable harbor    # 开机启动

$ systemctl status harbor    # 查看状态

$ systemctl start harbor    # 启动

$ systemctl stop harbor    # 停止