Реестр контейнеров Harbor – установка

В этой публикации я расскажу про реестр контейнеров реестр контейнеров Harbor. Точнее про его установку. К сожалению, особо подробно расписывать установку времени нет, но основные моменты я отмечу.

В качестве операционной системы я буду использовать Ubuntu Server 22.04.

Почему Harbor?

Для внутренних нужно нужно было какое-то решение для хранения готовых образов Docker. Изначально планировалось использование репозитория контейнера Gitea, но столкнулись с тем, что почему-то при скачивании образов некоторые слои не удавалось загрузить. Примерно так:

Почему? Возможно, что какой-то баг в репозиториях контейнеров Gitea.

Альтернатива была в виде нативного репозитория Docker Registry. Но, мы решили попробовать решение Harbor, т.к. оно включает в себя веб панель администрирования, возможность создавать проекты, пользователей и много других возможностей.

Предварительные требования

Полный перечень предварительных требований приведен на странице официального руководства.

Аппаратные требования

Аппаратные требования приведены в таблице ниже.

КомпонентМинимальные требованияРекомендуемые требования
Кол-во ЦП, шт.24
Объем оперативной памяти, ГБ48
Объем диска, ГБ40160

Программные требования

Программные требования приведены в таблице ниже.

ПОВерсия
Docker engineВерсия 17.06.0 или новее
Docker ComposeВерсия 1.18.0 или новее

Дополнительно необходима утилита openssl, если вы планируете генерировать самоподписанный сертификат. Я буду устанавливать сертификат от Let’s Encrypt. Соответственно, мне openssl не будет нужен.

Реестр контейнеров Harbor – установка

Я разделил процесс установки Harbor на два этапа – подготовительный и непосредственно саму установку.

Подготовка операциооной системы и установка предварительного ПО

Сначала установим все необходимые обновления на сервер:

sudo apt update
sudo apt -y upgrade

Установим docker и docker-compose

sudo apt install -y docker.io docker-compose

Запустим сервис docker и разрешим его автозапуск:

sudo systemctl start docker && sudo systemctl enable docker

Теперь я скопирую открытый и закрытый ключ SSL сертификата на сервер, чтобы настроить доступ по HTTPS с сертификатом от доверенного центра сертификации:

scp itproblog.crt itproblog.key 10.10.10.22:~

Вы можете выпустить сертификат от Let’s Encrypt или сгенерировать самоподписанный сертификат.

Для размещения Harbor на файловой системе я создам соответствующую директорию в opt:

sudo mkdir /opt/harbor

Также создам отдельную директорию для ключей SSL сертификата и скопирую их туда:

sudo mkdir /opt/harbor/certs
sudo cp $HOME/itproblog* /opt/harbor/certs/

И еще создам директорию для хранения данных приложения:

sudo mkdir /opt/harbor/data

Установка Harbor

Теперь можем приступить к установке Harbor. Сначала загрузим самую последнюю версию дистрибутива с репозитория.

Есть два типа установщика – оффлайн установщик и онлайн установщик. Я буду использовать онлайн установщик. На момент подготовки материала статьи самая последняя версия была v2.6.3. Я буду устанавливать именно её.

cd /opt/harbor/
sudo wget https://github.com/goharbor/harbor/releases/download/v2.6.3/harbor-online-installer-v2.6.3.tgz

Распаковываем архив:

sudo tar xzvf harbor-online-installer-v2.6.3.tgz -C /opt

Создадим конфигурационный файл:

sudo cp harbor.yml.tmpl harbor.yml

В этом конфигурационном файле нам нужно будет сконфигурировать ряд параметров, которые представлены в таблице ниже.

ПараметрНазначениеЗначание
hostnameDNS-имя по которому вы будите обращаться к сервису. Именно на это имя вы долдны выпустить сертификат (либо самоподписанный, либо от стороннего ЦС).cr.itproblog.ru
harbor_admin_passwordПароль пользователя admin для доступа к веб интерфейсу администрированияQwerty123
passwordПароль для доступа в базе данных postgresQwerty123
data_volumeДиректория для хранения данных приложения/opt/harbor/data/
certificateОткрытый ключ SSL сертификата/opt/harbor/certs/itproblog.crt
private_keyЗакрытый ключ SSL сертификата/opt/harbor/certs/itproblog.key

Внесем изменения в конфигурационный файл:

sudo nano harbor.yml
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: cr.itproblog.ru

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /opt/harbor/certs/itproblog.crt
  private_key: /opt/harbor/certs/itproblog.key

<...>

# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Qwerty123

# Harbor DB configuration
database:
  # The password for the root user of Harbor DB. Change this before any production use.
  password: Qwerty123
  # The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.
  max_idle_conns: 100
  # The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.
  # Note: the default number of connections is 1024 for postgres of harbor.
  max_open_conns: 900

# The default data volume
data_volume: /opt/harbor/data/

Сохраняем внесенные изменения.

Теперь все готово к тому, чтобы запустить установку Harbor. Команда для запуска установки:

sudo ./install.sh --with-notary --with-trivy --with-chartmuseum
Status: Downloaded newer image for goharbor/chartmuseum-photon:v2.6.3
Creating harbor-log ... done
Creating chartmuseum   ... done
Creating harbor-db     ... done
Creating registryctl   ... done
Creating redis         ... done
Creating registry      ... done
Creating harbor-portal ... done
Creating notary-signer ... done
Creating trivy-adapter ... done
Creating harbor-core   ... done
Creating notary-server     ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
✔ ----Harbor has been installed and started successfully.----

Дожидаемся окончания процесса установки. В процессе установки скрипт install.sh выполнит загрузку необходимых образов, настройки и создаст файл docker-compose для последующего запуска или остановки сервисов.

Теперь можем попробовать запустить веб панель администрирования. В моем случае адрес будет следующий:

https://cr.itproblog.ru/

Логин – admin. Стандартный пароль Harbor12345, я его изменял в конфигурационном файле выше. С настройками, как я приводил выше информация по подключению будет следующая:

login: admin
password: Qwerty123

В случае успешного запуска и логина вы увидите первоначальный экран веб интерфейса администрирования:

Кстати, обратите внимание, что в первоначально директории (из которой мы запускали установку) был создан файл docker-compose для запуска и остановки всех сервисов:

roman@harbor:/opt/harbor$ ls
LICENSE  common     data                harbor-online-installer-v2.6.3.tgz  harbor.yml.tmpl  prepare
certs    common.sh  docker-compose.yml  harbor.yml                          install.sh
roman@harbor:/opt/harbor$

Теперь вы можете подключаться к doker репозиторию и выполнять все рядовые операции – загружать образы, выгружать образы и т.д.:

sudo docker login cr.itproblog.ru

Устранение возможных проблем после перезагрузки сервера

В ходе использования репозитория контейнеров Harbor я столкнулся с тем, что после перезагрузки сервера иногда веб панель администрирования может быть не доступна.

Если посмотреть статус контейнеров, то можно увидеть, что один из контейнеров (nginx) не может запуститься успешно:

В его журнале можно увидеть следующие ошибки:

sudo docker logs nginx
2023/01/13 16:48:58 [emerg] 1#0: host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2
nginx: [emerg] host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2
2023/01/13 16:49:50 [emerg] 1#0: host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2
nginx: [emerg] host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2
2023/01/13 16:50:50 [emerg] 1#0: host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2
nginx: [emerg] host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2
2023/01/13 16:51:51 [emerg] 1#0: host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2
nginx: [emerg] host not found in upstream "notary-server:4443" in /etc/nginx/conf.d/notary.upstream.conf:2

Насколько я понял – эта ошибка возникает из-за порядка запуска сервисов. Как её устранить? Об этом чуть ниже.

Решение

Я победил её следующим образом – в файле crontab для события перезагрузки системы настроил остановку и запуск всех сервисов через docker-compose.

Сначала нужно добавить новую запись в файл crontab. Сначала переключимся в контекст супер пользователя:

sudo su

И добавим новую запись в crontab:

crontab -e
@reboot docker-compose -f /opt/harbor/docker-compose.yml down; docker-compose -f /opt/harbor/docker-compose.yml up -d

После сохранения файла и выхода из режима редактирования вы должны увидеть сообщение о том, что запить добавлена в crontab.

roman@harbor:~/harbor$ sudo su
root@harbor:/home/roman/harbor# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
root@harbor:/home/roman/harbor# 

После внесенных изменений проблем с доступностью сервиса я не наблюдал.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *