Обзор развертывания KVM Web Management на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания системы управления виртуализацией KVM с веб-интерфейсом Cockpit необходимо выполнить следующие условия:
- Операционная система: Ubuntu (поддержка пакетов
apt). - Права доступа: Требуется доступ с правами
rootили возможность использованияsudo. - Сетевые порты: Порты
80и443должны быть свободны для получения и обновления сертификатов Let's Encrypt. - Доменное имя: Должно быть настроено DNS-запись, указывающая на IP-адрес сервера. Формат домена:
<префикс><id_сервера>.<зона>. - Docker: Должен быть установлен и запущен демон Docker для работы контейнеров Nginx и Certbot.
Структура файлов и каталогов¶
Конфигурация и данные приложения распределяются по следующим директориям:
/root/nginx/: Каталог для запуска контейнеров прокси-сервера. Содержит файлcompose.yml./data/nginx/user_conf.d/: Директория для пользовательских конфигурационных файлов Nginx./etc/cockpit/ws-certs.d/: Каталог для хранения сертификатов и ключей, используемых веб-интерфейсом Cockpit./etc/letsencrypt/: Хранилище сертификатов Let's Encrypt (подключается как том в контейнер Nginx)./etc/hosts: Файл для настройки локального разрешения доменных имен.
Процесс установки приложения¶
Установка включает в себя настройку базовых пакетов виртуализации и веб-интерфейса, а также развертывание прокси-сервера в контейнере.
- Установка пакетов виртуализации и управления:
qemu-kvmlibvirt-daemon-systemlibvirt-clientsbridge-utilsvirtinstcockpitcockpit-machinescertbot-
pip -
Настройка имени хоста:
- Системное имя хоста устанавливается в формате
<префикс><id_сервера>.<зона>. -
Запись добавляется в файл
/etc/hostsдля локального разрешения. -
Получение SSL-сертификата:
- Используется утилита
certbotв режимеstandaloneдля получения сертификата от Let's Encrypt. -
Сертификат выдается для доменного имени, сформированного на этапе настройки хоста.
-
Развертывание прокси-сервера:
- Создается каталог
/root/nginx. - Генерируется файл
compose.ymlс конфигурацией контейнераnginx-certbot. - Запускается контейнер через
docker compose.
Базы данных¶
В предоставленных конфигурационных данных отсутствуют сведения о подключении к внешним базам данных или настройке хранилищ данных для приложения. Система управления KVM использует локальные хранилища Libvirt.
Контейнеры Docker и их запуск¶
Для обеспечения работы веб-интерфейса и автоматического обновления сертификатов используется контейнер Nginx с Certbot.
Конфигурация контейнера описана в файле /root/nginx/compose.yml:
volumes:
nginx_secrets:
external: true
services:
nginx:
image: jonasal/nginx-certbot:latest
restart: unless-stopped
environment:
- CERTBOT_EMAIL=hkadm@hostkey.com
env_file:
- /data/nginx/nginx-certbot.env
network_mode: host
volumes:
- nginx_secrets:/etc/letsencrypt
- /data/nginx/user_conf.d:/etc/nginx/user_conf.d
Запуск контейнера выполняется командой:
Команда выполняется из директории /root/nginx.
Прокси серверы¶
В качестве прокси-сервера используется контейнер jonasal/nginx-certbot:latest. Он работает в режиме host для прямого доступа к портам.
- Домен: Конфигурация прокси настраивается для домена, соответствующего имени хоста сервера.
- SSL: Сертификаты Let's Encrypt автоматически обновляются и используются для шифрования трафика.
- Маршрутизация: В конфигурационном файле
/data/nginx/user_conf.d/<префикс><id_сервера>.hostkey.in.confдобавляется правило пересылки запросов: - Запросы на корневой путь
/пересылаются наhttp://127.0.0.1:3000.
Настройки прав¶
Права доступа к файлам и директориям устанавливаются следующим образом:
- Директория
/root/nginx: Владелецroot, группаroot, права0755. - Файл
/root/nginx/compose.yml: Владелецroot, группаroot, права0644. - Директория
/etc/cockpit/ws-certs.d: Владелецroot, группаroot, права0755. - Файлы сертификатов в
/etc/cockpit/ws-certs.d/: - Владелец
root, группаcockpit-ws. - Права доступа
640.
Запуск, остановка и обновление¶
Управление сервисами осуществляется через стандартные утилиты системы и Docker.
- Запуск и остановка контейнера прокси:
- Запуск:
docker compose up -d(из директории/root/nginx). -
Остановка:
docker compose down. -
Управление службами системы:
- Служба
libvirtd: должна быть запущена и включена в автозагрузку. - Служба
cockpit.socket: должна быть запущена и включена в автозагрузку. -
Перезапуск
cockpitпосле обновления сертификатов:systemctl restart cockpit. -
Обновление сертификатов:
- Осуществляется автоматически контейнером
nginx-certbotсогласно расписанию Let's Encrypt. - При необходимости ручное обновление сертификатов выполняется через
certbot certonlyв режимеstandaloneс последующей перезагрузкой службыcockpit.