bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Настройка приватного Docker Registry (Harbor) на VPS: безопасность и управление образами

calendar_month Jun 06, 2026 schedule 19 мин. чтения visibility 39 просмотров
Настройка приватного Docker Registry (Harbor) на VPS: безопасность и управление образами
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Настройка приватного Docker Registry (Harbor) на VPS: безопасность и управление образами

TL;DR

В этом подробном гайде мы шаг за шагом настроим приватный Docker Registry с использованием Harbor на вашем виртуальном или выделенном сервере. Harbor — это мощная платформа с открытым исходным кодом, которая предоставляет не только хранилище для образов Docker, но и расширенные функции безопасности, сканирование уязвимостей, управление политиками и контроль доступа. В итоге вы получите полностью контролируемое, безопасное и масштабируемое решение для хранения и распространения ваших контейнерных образов, критически важное для CI/CD пайплайнов и обеспечения приватности.

  • Установка и настройка Harbor на Ubuntu 24.04 LTS.
  • Обеспечение HTTPS-доступа к Registry с помощью Caddy для автоматического получения и обновления TLS-сертификатов.
  • Конфигурация базовых политик безопасности и управления доступом.
  • Рекомендации по выбору VPS-конфигурации и оптимизации ресурсов.
  • Стратегии резервного копирования и обслуживания для долгосрочной стабильности.
  • Решение типичных проблем и ответы на часто задаваемые вопросы.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

Мы будем настраивать Harbor — мощный, облачный, приватный реестр контейнеров с открытым исходным кодом, который хранит, подписывает и сканирует образы. Harbor расширяет функциональность стандартного Docker Registry, добавляя к нему корпоративные функции, такие как безопасность, управление проектами, контроль доступа на основе ролей (RBAC), сканирование уязвимостей, репликацию образов и интеграцию с LDAP/AD. Это решение позволяет командам разработчиков безопасно управлять своими контейнерными образами, обеспечивая их целостность и соответствие корпоративным стандартам.

В итоге, вы получите полностью функциональный, безопасный и управляемый приватный Docker Registry, который будет служить центральным хранилищем для всех ваших контейнерных образов. Это особенно важно для CI/CD пайплайнов, где образы должны быть доступны быстро и надежно, а также для сред, где требуется строгий контроль над тем, что развертывается. Вы сможете хранить проприетарные образы, защищать их от несанкционированного доступа, сканировать на наличие уязвимостей до развертывания и контролировать, кто может публиковать или извлекать образы.

Какие альтернативы существуют? Можно использовать облачные managed-сервисы, такие как AWS ECR, Google Container Registry (GCR) / Artifact Registry, Azure Container Registry (ACR) или GitLab Container Registry. Они предлагают удобство, масштабируемость и часто интегрированы с другими облачными сервисами. Однако, self-hosted решение на VPS имеет свои преимущества:

  • Полный контроль: Вы полностью контролируете данные, безопасность и инфраструктуру. Это критически важно для компаний с жесткими регуляторными требованиями или для тех, кто не хочет зависеть от конкретного облачного провайдера.
  • Экономическая эффективность: Для средних и крупных объемов хранения и трафика self-hosted решение может оказаться значительно дешевле облачных аналогов, особенно если у вас уже есть свободные ресурсы на VPS/dedicated сервере.
  • Кастомизация: Возможность тонкой настройки под специфические нужды вашей инфраструктуры, интеграция с внутренними системами аутентификации или уникальными инструментами безопасности.
  • Приватность: Образы хранятся на вашей инфраструктуре, что снижает риски утечки данных через сторонние сервисы.

Выбор self-hosted Harbor на VPS идеально подходит для команд, которым нужен баланс между контролем, безопасностью и стоимостью, а также для тех, кто хочет избежать вендор-лока.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Выбор правильной конфигурации сервера критически важен для стабильной и производительной работы Harbor. Harbor — это не просто хранилище, а целый комплекс сервисов (PostgreSQL, Redis, Notary, Clair, Trivy, Portal), которые потребляют ресурсы.

Минимальные требования (для небольших команд / тестовых сред):

  • CPU: 2 ядра. Harbor выполняет много фоновых задач, таких как сканирование уязвимостей, что может быть ресурсоемким.
  • RAM: 4 ГБ. Это абсолютный минимум, рекомендуется 6-8 ГБ для стабильной работы всех компонентов.
  • Диск: 100 ГБ SSD. Основное потребление дискового пространства приходится на хранение образов. SSD значительно ускоряет операции с файлами и базами данных.
  • Сеть: 100 Мбит/с. Для начального использования этого достаточно, но для активной работы CI/CD или большого количества пользователей потребуется более широкий канал.

Рекомендуемый VPS-план (для продакшн-среды средней нагрузки):

  • CPU: 4 ядра. Обеспечит достаточную производительность для обработки запросов, сканирования и фоновых задач.
  • RAM: 8-16 ГБ. Позволит всем компонентам Harbor работать без своппинга, что критично для производительности.
  • Диск: 250-500 ГБ NVMe/SSD. Объем зависит от количества и размера хранимых образов. NVMe предлагает максимальную скорость ввода-вывода. Важно выбирать диск с возможностью расширения или использовать внешнее хранилище, если планируется очень много образов.
  • Сеть: 1 Гбит/с. Высокоскоростной канал необходим для быстрой загрузки и скачивания образов, что существенно влияет на время сборки и развертывания.

Для аренды VPS с указанными характеристиками, например, 4 ядра CPU, 8-16 ГБ RAM, 250-500 ГБ NVMe/SSD и 1 Гбит/с сетью, можно рассмотреть VPS с указанными характеристиками.

Когда нужен dedicated, а не VPS

Выделенный сервер (dedicated server) становится предпочтительным выбором, когда:

  • Очень высокая нагрузка: Если вы планируете хранить тысячи образов, обслуживать сотни разработчиков, или ваш CI/CD пайплайн постоянно пушит/пуллит образы.
  • Требования к производительности: Когда требуется гарантированная производительность CPU, RAM и дисковой подсистемы без "соседского эффекта" (noisy neighbor) от других пользователей на том же гипервизоре.
  • Большой объем хранилища: Если вам нужно несколько терабайт для образов и долгосрочного хранения.
  • Строгие SLA и изоляция: Для критически важных систем, где требуется максимальная изоляция и контроль над аппаратным обеспечением.

В таких случаях, подходящий dedicated сервер обеспечит необходимую мощь и надежность.

Локация: на что влияет

Расположение вашего VPS или dedicated сервера влияет на несколько факторов:

  • Латентность (ping): Чем ближе сервер к вашим разработчикам и CI/CD агентам, тем меньше задержка при загрузке/выгрузке образов. Это напрямую влияет на скорость работы.
  • Региональные регуляции: В некоторых случаях, из-за законодательства (например, GDPR), данные должны храниться в определенном географическом регионе.
  • Стоимость: Цены на VPS могут варьироваться в зависимости от региона.

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

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

Предполагается, что вы используете свежеустановленный сервер с Ubuntu 24.04 LTS. Эти шаги обеспечат базовую безопасность и подготовят систему к установке Harbor.

1. Обновление системы

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


sudo apt update             # Обновление списка пакетов
sudo apt upgrade -y         # Обновление всех установленных пакетов
sudo apt autoremove -y      # Удаление неиспользуемых пакетов

2. Создание нового пользователя и настройка SSH-ключей

Не рекомендуется работать под учетной записью root. Создайте нового пользователя с правами sudo и настройте аутентификацию по SSH-ключам для повышения безопасности.


sudo adduser harboradmin    # Создание нового пользователя "harboradmin"
sudo usermod -aG sudo harboradmin # Добавление пользователя в группу sudo
sudo mkdir /home/harboradmin/.ssh # Создание директории для SSH-ключей
sudo chmod 700 /home/harboradmin/.ssh # Установка правильных прав доступа
sudo cp ~/.ssh/authorized_keys /home/harboradmin/.ssh/ # Копирование вашего публичного ключа
sudo chown -R harboradmin:harboradmin /home/harboradmin/.ssh # Установка владельца для директории

Важно: После выполнения этих шагов выйдите из текущей сессии root и войдите под новым пользователем harboradmin, используя ваш SSH-ключ. Затем отключите вход по паролю для root и обычным пользователям в файле /etc/ssh/sshd_config.


sudo nano /etc/ssh/sshd_config

Найдите и измените следующие строки:


PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

Перезапустите SSH-сервис для применения изменений:


sudo systemctl restart sshd

3. Установка и настройка Firewall (UFW)

Настройте базовый файрвол для разрешения только необходимых портов. Harbor будет использовать порты 80 (HTTP, для редиректа), 443 (HTTPS) и возможно другие для внутренних сервисов.


sudo apt install ufw -y     # Установка UFW
sudo ufw default deny incoming # Запретить все входящие соединения по умолчанию
sudo ufw default allow outgoing # Разрешить все исходящие соединения по умолчанию
sudo ufw allow OpenSSH      # Разрешить SSH (порт 22)
sudo ufw allow http         # Разрешить HTTP (порт 80)
sudo ufw allow https        # Разрешить HTTPS (порт 443)
sudo ufw enable             # Включить UFW
sudo ufw status verbose     # Проверить статус UFW

4. Установка Fail2Ban

Fail2Ban помогает защититься от атак перебора паролей (brute-force) на SSH и другие сервисы.


sudo apt install fail2ban -y # Установка Fail2Ban
sudo systemctl enable fail2ban # Включение автозапуска Fail2Ban
sudo systemctl start fail2ban  # Запуск Fail2Ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Создание локальной конфигурации

Откройте /etc/fail2ban/jail.local и убедитесь, что секция [sshd] активна (enabled = true) и настройте параметры по своему усмотрению (например, bantime, findtime, maxretry).


sudo nano /etc/fail2ban/jail.local

Пример настройки:


[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 1h
findtime = 10m
maxretry = 5

Перезапустите Fail2Ban для применения изменений:


sudo systemctl restart fail2ban
sudo fail2ban-client status sshd # Проверить статус SSH-фильтра

5. Установка базовых утилит

Некоторые утилиты могут быть полезны в процессе установки и отладки.


sudo apt install curl wget git nano htop net-tools -y # Установка полезных утилит

Теперь ваш сервер готов к установке Docker и Harbor.

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

На этом этапе мы установим Docker Engine, Docker Compose и Harbor. Мы будем использовать актуальные версии, доступные в 2026 году. Для Ubuntu 24.04 LTS это, скорее всего, будет Docker Engine 25.x/26.x и Docker Compose v2.x, а Harbor версии 2.x или 3.x.

1. Установка Docker Engine

Установим Docker из официального репозитория Docker, чтобы всегда иметь актуальные версии.


# Удаляем старые версии Docker, если они есть
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg; done

# Устанавливаем необходимые пакеты для использования репозитория HTTPS
sudo apt install ca-certificates curl gnupg lsb-release -y

# Добавляем официальный GPG ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Добавляем репозиторий Docker в APT sources
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновляем список пакетов и устанавливаем Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Проверим, что Docker установлен и запущен:


sudo systemctl status docker # Проверка статуса Docker
sudo docker run hello-world  # Запуск тестового контейнера

Добавим вашего пользователя в группу docker, чтобы не использовать sudo при каждой команде Docker (необходимо перелогиниться после этого шага):


sudo usermod -aG docker harboradmin # Добавление пользователя в группу docker

Выйдите и снова войдите в систему, чтобы изменения вступили в силу. Затем проверьте:


docker run hello-world # Запуск тестового контейнера без sudo

2. Установка Docker Compose

Docker Compose плагин уже установлен вместе с Docker Engine, но для удобства можно создать символическую ссылку на docker compose как docker-compose.


sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose # Создание символической ссылки
docker-compose version # Проверка версии Docker Compose

3. Загрузка и подготовка Harbor

Harbor распространяется в виде архива с Docker Compose файлами. Мы загрузим последнюю стабильную версию (предполагаем Harbor 2.x или 3.x для 2026 года) с GitHub releases.


# Создаем директорию для Harbor
mkdir -p ~/harbor && cd ~/harbor

# Загружаем последнюю стабильную версию Harbor installer (например, v2.10.x или v3.x)
# Проверьте актуальную версию на GitHub Releases: https://github.com/goharbor/harbor/releases
# Предположим, что в 2026 году актуальной является версия 2.10.0
HARBOR_VERSION="2.10.0" # Замените на актуальную версию
wget https://github.com/goharbor/harbor/releases/download/v${HARBOR_VERSION}/harbor-offline-installer-v${HARBOR_VERSION}.tgz

# Распаковываем архив
tar xvf harbor-offline-installer-v${HARBOR_VERSION}.tgz

# Переходим в директорию с распакованным Harbor
cd harbor

4. Конфигурация Harbor Installer

Основной файл конфигурации Harbor — harbor.yml.tmpl. Мы скопируем его в harbor.yml и отредактируем.


cp harbor.yml.tmpl harbor.yml # Создание файла конфигурации из шаблона
nano harbor.yml               # Редактирование файла конфигурации

В файле harbor.yml необходимо изменить следующие параметры (примеры):

  • hostname: your.domain.com — укажите доменное имя, по которому будет доступен ваш Harbor Registry. Убедитесь, что для этого домена настроена A-запись, указывающая на IP-адрес вашего VPS.
  • http.port: 80 — порт для HTTP-доступа (будет перенаправлен на HTTPS).
  • https.port: 443 — порт для HTTPS-доступа.
  • harbor_admin_password: YourSecurePassword123 — задайте надежный пароль для администратора Harbor.
  • data_volume: /data/harbor — путь, где будут храниться все данные Harbor (образы, база данных и т.д.). Рекомендуется использовать отдельный диск или раздел для данных.
  • external_url: https://your.domain.com — URL, который будет использоваться для доступа к Harbor.

Пример фрагмента harbor.yml:


hostname: your.domain.com

http:
  port: 80

https:
  port: 443
  # Укажем, что TLS будет управляться Caddy, а Harbor будет работать без прямого TLS
  # Для этого мы настроим Caddy как обратный прокси.
  # Пока оставим эти поля закомментированными или пустыми, если Caddy будет обрабатывать TLS.
  # Если бы Harbor сам генерировал сертификаты, то здесь были бы пути к ним.
  # certificate: /your/path/to/server.crt
  # private_key: /your/path/to/server.key

harbor_admin_password: YourSecurePassword123

data_volume: /data/harbor

external_url: https://your.domain.com

Важно: Для продакшн-среды рекомендуется использовать внешнюю базу данных PostgreSQL и Redis для лучшей масштабируемости и управляемости, но для этого гайда мы будем использовать встроенные в Harbor контейнеры.

5. Установка Harbor

После сохранения harbor.yml можно запустить установку. Инсталлятор настроит все необходимые Docker Compose файлы и запустит сервисы.


# Запускаем скрипт установки
sudo ./install.sh --with-clair --with-chartmuseum --with-trivy # Установка с модулями сканирования и ChartMuseum

Скрипт install.sh выполнит следующие действия:

  • Сгенерирует необходимые файлы Docker Compose.
  • Создаст и запустит все контейнеры Harbor.
  • Настроит базовую конфигурацию.

Процесс может занять несколько минут, так как Docker будет скачивать все необходимые образы.

После завершения установки вы можете проверить статус запущенных контейнеров:


docker-compose ps # Проверка статуса всех контейнеров Harbor

Убедитесь, что все контейнеры находятся в состоянии "Up".

Конфигурация

Схема: Конфигурация
Схема: Конфигурация

Теперь, когда Harbor установлен, нам нужно настроить HTTPS доступ и убедиться, что все работает корректно. Мы будем использовать Caddy как обратный прокси с автоматическим получением TLS-сертификатов от Let's Encrypt.

1. Настройка DNS

Прежде чем настраивать Caddy, убедитесь, что ваш домен (например, your.domain.com) имеет A-запись, указывающую на публичный IP-адрес вашего VPS. Это критически важно для работы Let's Encrypt.

2. Установка Caddy

Caddy — это мощный веб-сервер, который упрощает настройку HTTPS благодаря встроенной поддержке Let's Encrypt.


# Устанавливаем Caddy из официального репозитория
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y

3. Конфигурация Caddy для Harbor

Создадим файл конфигурации Caddy (Caddyfile) для работы с Harbor. Caddy будет проксировать запросы к Harbor и автоматически управлять TLS.


sudo nano /etc/caddy/Caddyfile

Удалите существующее содержимое и добавьте следующее, заменив your.domain.com на ваше доменное имя:


your.domain.com {
    reverse_proxy 127.0.0.1:8080 { # Harbor по умолчанию работает на 8080 внутри контейнера
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }
    # Опционально: включение сжатия Gzip
    encode gzip
    # Опционально: логирование
    log {
        output file /var/log/caddy/harbor_access.log
        format json
    }
    # Опционально: базовый Rate Limiting для защиты от DoS
    # rate_limit {
    #     burst 10
    #     rate 5r/s
    # }
}

Создайте директорию для логов Caddy, если вы включили логирование:


sudo mkdir -p /var/log/caddy
sudo chown caddy:caddy /var/log/caddy

Перезапустите Caddy для применения изменений:


sudo systemctl restart caddy
sudo systemctl enable caddy # Включить автозапуск Caddy
sudo systemctl status caddy # Проверить статус Caddy

Убедитесь, что Caddy успешно запустился и получил TLS-сертификаты. Вы можете проверить логи Caddy: sudo journalctl -u caddy --no-pager.

4. Проверка работоспособности Harbor

Теперь, когда Caddy настроен, Harbor должен быть доступен по HTTPS.

  • Доступ через браузер: Откройте https://your.domain.com в браузере. Вы должны увидеть интерфейс Harbor. Войдите с именем пользователя admin и паролем, который вы указали в harbor.yml (harbor_admin_password).
  • Проверка через curl:

curl -I https://your.domain.com/api/v2.0/health # Проверка доступности API Harbor

Вы должны получить HTTP-статус 200 OK. Если нет, проверьте логи Caddy и Harbor.

5. Настройка Docker клиента

Для работы с вашим приватным реестром Docker на локальной машине или CI/CD агентах, вам нужно войти в него:


docker login your.domain.com # Введите имя пользователя (например, admin) и пароль

После успешного входа вы сможете пушить и пуллить образы:


# Пример: пометим существующий образ и загрузим его в Harbor
docker tag hello-world your.domain.com/myproject/hello-world:latest
docker push your.domain.com/myproject/hello-world:latest

# Пример: скачаем образ из Harbor
docker pull your.domain.com/myproject/hello-world:latest

Важно: Создайте проект myproject в веб-интерфейсе Harbor перед тем, как пытаться загрузить в него образы.

6. Секреты и переменные окружения

Пароль администратора Harbor, который вы указали в harbor.yml, является чувствительной информацией. В продакшн-средах рекомендуется использовать Docker Secrets или внешние системы управления секретами. Для Harbor, который запускается через docker-compose, можно использовать файл .env. Хотя Harbor installer не использует его напрямую, вы можете отредактировать сгенерированный docker-compose.yml и использовать переменные окружения для чувствительных данных. Однако, для простоты этого гайда мы оставили пароль в harbor.yml.

Пример использования .env для пароля администратора (не применяется автоматически Harbor installer, но демонстрирует принцип):


# В вашем .env файле (рядом с docker-compose.yml)
HARBOR_ADMIN_PASSWORD=MySuperSecurePassword123

# В docker-compose.yml или harbor.yml (если бы он поддерживал)
# harbor_admin_password: ${HARBOR_ADMIN_PASSWORD}

Для Harbor более безопасным подходом является изменение пароля администратора через веб-интерфейс после установки, а также использование LDAP/OIDC для аутентификации пользователей вместо локальных учетных записей.

Бэкапы и обслуживание

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

Регулярное резервное копирование и обслуживание — это основа надежной работы любого сервиса, включая Harbor. Потеря данных образов или конфигурации может привести к серьезным проблемам.

1. Что бэкапить

Для Harbor критически важны следующие данные:

  • Данные реестра: Сами образы Docker, хранящиеся в /data/harbor/registry (или другом пути, указанном в data_volume).
  • База данных PostgreSQL: Содержит метаданные образов, пользователей, проектов, политики и т.д. Хранится в /data/harbor/database.
  • Конфигурационные файлы: harbor.yml и другие файлы в директории установки Harbor (~/harbor/harbor).
  • Сертификаты TLS: Если вы управляете ими вручную. В нашем случае Caddy управляет ими автоматически, но если вы используете Harbor с собственными сертификатами, их нужно бэкапить.

2. Простой скрипт автобэкапа

Мы создадим простой скрипт, который остановит Harbor, сделает бэкап данных и снова запустит Harbor. Для этого потребуется утилита rsync или tar.


sudo nano /usr/local/bin/backup_harbor.sh

Содержимое скрипта (замените your.domain.com и /path/to/backup/destination):


#!/bin/bash

# Путь к директории Harbor
HARBOR_DIR="/home/harboradmin/harbor/harbor" # Убедитесь, что это правильный путь к распакованной директории Harbor
HARBOR_DATA_VOLUME="/data/harbor" # Путь к тому данных Harbor

# Директория для хранения бэкапов
BACKUP_DESTINATION="/path/to/backup/destination" # Например, /mnt/backup/harbor_backups
BACKUP_TIMESTAMP=$(date +%Y%m%d%H%M%S)
FULL_BACKUP_PATH="${BACKUP_DESTINATION}/harbor_backup_${BACKUP_TIMESTAMP}"

echo "Starting Harbor backup at ${BACKUP_TIMESTAMP}..."

# 1. Останавливаем Harbor сервисы
echo "Stopping Harbor services..."
cd ${HARBOR_DIR}
docker-compose down # Останавливаем все контейнеры Harbor

# 2. Создаем директорию для текущего бэкапа
echo "Creating backup directory: ${FULL_BACKUP_PATH}"
mkdir -p ${FULL_BACKUP_PATH}

# 3. Копируем конфигурационные файлы
echo "Backing up Harbor configuration files..."
cp ${HARBOR_DIR}/harbor.yml ${FULL_BACKUP_PATH}/
cp ${HARBOR_DIR}/docker-compose.yml ${FULL_BACKUP_PATH}/ # Можно добавить другие конфиги, если есть

# 4. Копируем данные Harbor (образы, БД)
echo "Backing up Harbor data volume: ${HARBOR_DATA_VOLUME}"
# Используем rsync для инкрементальных бэкапов или tar для полного архива
# rsync -avh --delete ${HARBOR_DATA_VOLUME}/ ${FULL_BACKUP_PATH}/data/
tar -czvf ${FULL_BACKUP_PATH}/harbor_data.tar.gz ${HARBOR_DATA_VOLUME}

# 5. Запускаем Harbor сервисы
echo "Starting Harbor services..."
docker-compose up -d # Запускаем контейнеры Harbor в фоновом режиме

echo "Harbor backup completed. Backup saved to ${FULL_BACKUP_PATH}"

Сделаем скрипт исполняемым:


sudo chmod +x /usr/local/bin/backup_harbor.sh

Внимание: Остановка Harbor приведет к временной недоступности реестра. Планируйте бэкапы на время наименьшей активности или рассмотрите более сложные методы бэкапа без простоя, если Harbor критичен 24/7.

3. Куда складывать бэкапы

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

  • Внешний S3-совместимый объектный сторадж: AWS S3, MinIO, DigitalOcean Spaces и т.д. Это надежный и масштабируемый вариант. Для этого можно использовать утилиты типа awscli или s3cmd в скрипте бэкапа.
  • Отдельный VPS: Выделенный небольшой VPS для хранения бэкапов, доступный по SSH/SFTP. Можно использовать rsync для копирования бэкапов на него.
  • NFS/SMB хранилище: Если у вас есть централизованное сетевое хранилище.

Пример добавления отправки бэкапа на S3 (требует настройки awscli):


# Добавить в скрипт после tar -czvf ...
echo "Uploading backup to S3..."
aws s3 cp ${FULL_BACKUP_PATH}/harbor_data.tar.gz s3://your-s3-bucket-name/harbor_backups/ --recursive
aws s3 cp ${FULL_BACKUP_PATH}/harbor.yml s3://your-s3-bucket-name/harbor_backups/ --recursive

4. Настройка Cron для автоматического бэкапа

Добавим скрипт в планировщик Cron для ежедневного выполнения (например, в 3 часа ночи).


sudo crontab -e

Добавьте следующую строку в конец файла:


0 3   * /usr/local/bin/backup_harbor.sh >> /var/log/harbor_backup.log 2>&1

Это будет запускать скрипт каждый день в 03:00 и перенаправлять вывод в лог-файл /var/log/harbor_backup.log.

5. Обновления: rolling vs maintenance window

Поддержание ПО в актуальном состоянии критически важно для безопасности и стабильности. Обновлять нужно:

  • Операционную систему: Регулярно запускайте sudo apt update && sudo apt upgrade -y.
  • Docker Engine и Docker Compose: Обновляйте их из официального репозитория Docker.
  • Harbor: Обновления Harbor обычно требуют использования нового инсталлятора и выполнения процедуры миграции. Это часто влечет за собой простой сервиса.

Стратегии обновления Harbor:

  • Maintenance Window: Самый простой подход для большинства self-hosted инсталляций. Планируйте окно обслуживания (например, раз в месяц или квартал), во время которого Harbor будет недоступен. Это позволяет выполнить обновление, протестировать его и откатиться в случае проблем.
  • Rolling Updates (для кластерных развертываний): Если Harbor развернут в кластере (например, Kubernetes), можно выполнять rolling updates без простоя. Однако это значительно усложняет архитектуру и выходит за рамки данного гайда.

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

Troubleshooting + FAQ

Что делать, если Harbor не запускается после установки?

В первую очередь проверьте логи Docker-контейнеров Harbor. Перейдите в директорию установки Harbor (~/harbor/harbor) и выполните docker-compose logs. Это покажет логи всех сервисов. Если проблема с конкретным сервисом (например, core или registry), можно посмотреть его логи отдельно: docker-compose logs core. Частые проблемы включают конфликты портов, неправильную конфигурацию доменного имени или проблемы с доступом к данным.

Почему я не могу получить доступ к Harbor по доменному имени?

Проверьте следующие пункты: 1) Убедитесь, что DNS-запись (A-запись) для вашего домена корректно указывает на IP-адрес вашего VPS. 2) Проверьте статус Caddy (sudo systemctl status caddy) и его логи (sudo journalctl -u caddy --no-pager) — возможно, Caddy не смог получить TLS-сертификат. 3) Убедитесь, что порты 80 и 443 открыты в вашем фаерволе (UFW: sudo ufw status). 4) Проверьте, что hostname в harbor.yml совпадает с вашим доменным именем.

Не могу войти в Harbor через Docker CLI (docker login)

Убедитесь, что вы используете правильное доменное имя (например, your.domain.com) и учетные данные (по умолчанию admin и пароль, указанный в harbor.yml). Если Harbor использует самоподписанные сертификаты (чего мы избежали с Caddy), вам может потребоваться добавить сертификат Harbor в список доверенных сертификатов Docker на вашей клиентской машине. Также проверьте, что Harbor запущен и доступен по HTTPS.

Какой VPS-конфиг минимально подойдёт?

Для тестовых сред или очень небольших команд с минимальным количеством образов и пользователей, минимальный конфиг должен включать 2 ядра CPU, 4 ГБ RAM и как минимум 100 ГБ SSD диска. Однако, такой конфигурации может не хватить при активном сканировании уязвимостей или высокой нагрузке. Для стабильной работы в продуктивной среде рекомендуется 4 ядра CPU, 8-16 ГБ RAM и 250-500 ГБ NVMe/SSD.

Что выбрать — VPS или dedicated для этой задачи?

Выбор между VPS и dedicated сервером зависит от масштаба вашей задачи. VPS достаточен для большинства средних команд и проектов, предлагая хороший баланс стоимости и производительности. Dedicated сервер следует выбирать, если у вас очень большой объем образов (терабайты), высокая и постоянная нагрузка от сотен пользователей или CI/CD агентов, а также если требуются максимальная производительность, изоляция ресурсов и строгие SLA, которые могут быть не гарантированы на VPS из-за "соседского эффекта".

Как обновить Harbor до новой версии?

Обновление Harbor обычно включает скачивание нового инсталлятора для целевой версии, остановку текущих сервисов Harbor, резервное копирование данных, запуск скрипта prepare из нового инсталлятора для миграции базы данных и затем запуск install.sh. Всегда внимательно читайте официальную документацию по обновлению для конкретной версии Harbor, так как шаги могут отличаться.

Harbor выдает ошибку "no such host" при попытке пуша/пулла образов.

Эта ошибка обычно означает, что Docker клиент не может разрешить доменное имя вашего Harbor Registry. Убедитесь, что DNS-серверы, используемые вашей клиентской машиной, правильно разрешают ваш домен. Проверьте это командой ping your.domain.com или nslookup your.domain.com. Если домен не разрешается, проблема в DNS. Если разрешается, проверьте, что порт 443 открыт и Caddy/Harbor доступны.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно настроили приватный Docker Registry (Harbor) на вашем VPS. Теперь у вас есть безопасное и управляемое хранилище для ваших контейнерных образов, обеспечивающее контроль доступа, сканирование уязвимостей и возможности аудита. Это значительно улучшит ваш CI/CD пайплайн и общую безопасность развертываний.

Следующие шаги для дальнейшего развития вашей инфраструктуры Harbor:

  1. Интеграция с CI/CD: Настройте ваши CI/CD системы (Jenkins, GitLab CI, GitHub Actions) для автоматической сборки, пуша и пулла образов из вашего приватного Harbor Registry.
  2. Управление пользователями и RBAC: Настройте интеграцию Harbor с вашей корпоративной системой аутентификации (LDAP/AD, OIDC) и создайте проекты с соответствующими ролями для команд разработчиков, чтобы обеспечить гранулярный контроль доступа.
  3. Репликация и высокая доступность: Для критически важных продакшн-сред рассмотрите настройку репликации образов между несколькими инсталляциями Harbor или развертывание Harbor в кластере Kubernetes для обеспечения высокой доступности и устойчивости к отказам.

Поделиться этой записью:

настройка приватного docker registry (harbor) на vps: безопасность и управление образами
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.