Найти в Дзене
Linux | Network | DevOps

Домашняя лаборатория DevOps: Proxmox

Главная проблема — для развития DevOps нужна среда, где можно
запускать ПО для исследования. Разработчикам проще: открыл документацию, скачал IDE, начал пробовать и изучать новую технологию. А вот DevOps-инженеру одной только IDE будет мало, так как часть его работы
как минимум завязана на Linux серверах. Поэтому важно не просто знать,
как использовать готовые решения, но и понимать, как они функционируют
на уровне инфраструктуры. Чтобы получить это понимание, нужно уметь разворачивать и настраивать серверы самостоятельно. В этом поможет работа с домашним сервером. Она позволит глубже погрузиться в процессы, увидеть, как все устроено изнутри, и набраться практического опыта для решения реальных задач. На мой взгляд, такой подход гораздо эффективнее, чем просто взаимодействие с облачными сервисами. Эта статья — инструкция, которая поможет начинающим администраторам и
DevOps инженерам расширить свои знания и получить прикладной опыт работы с данным стеком технологий. В качестве бону
Оглавление

Главная проблема — для развития DevOps нужна среда, где можно
запускать ПО для исследования. Разработчикам проще: открыл документацию, скачал IDE, начал пробовать и изучать новую технологию. А вот DevOps-инженеру одной только IDE будет мало, так как часть его работы
как минимум завязана на Linux серверах. Поэтому важно не просто знать,
как использовать готовые решения, но и понимать, как они функционируют
на уровне инфраструктуры.

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

Эта статья — инструкция, которая поможет начинающим администраторам и
DevOps инженерам расширить свои знания и получить прикладной опыт работы с данным стеком технологий. В качестве бонуса в дальнейшем у нас
останется платформа и наработки для быстрого запуска личных проектов и
полезного софта (например, умный дом, медиасервер и т.д.)

Выбираем железо

Сразу небольшое отступление: если хотите сделать кластер с гипервизорами Proxmox (два и больше сервера работают вместе), то лучше всего приобретать железо с процессорами одного производителя. Тогда откроется возможность переезда работающих виртуальных машин с одной ноды кластера без остановки самой виртуальной машины.

Итак, для подобных экспериментов нам понадобится железо,
на котором всё это будет крутиться. Конечно, можно обойтись и просто
домашним ПК, но тот же Virtualbox/Workstation Pro не предназначены для
работы 24/7. Для домашнего гипервизора я выбрал Proxmox, так как у него
хорошая совместимость с доступным для нас железом. Но предлагаю
рассмотреть и другие варианты.

Одноплатные ПК по типу Raspberry pi: сама малинка и её клоны – Orange PI, Banana PI, Potato Pi и т.д. Нам, к сожалению, не подходит, так как зачастую одноплатники используют в качестве диска microSD карточки, менее надежные и медленные, чем HDD/SSD диски.

-2

Мини-ПК китайских брендов: Beelink, Geekom, Minisforum и других. Рынок заполнен экземплярами с ценником от десяти тысяч рублей и до бесконечности. Чаще всего встречаются мини-ПК на процессорах AMD Ryzen от 3000 серии и выше, а также бюджетные варианты с Intel n100. К плюсам подобных машин я бы отнес компактность, доступность, цену и минимальный шум. К минусам — скудный апгрейд, частое отсутствие разъёмов pci-e и посредственную китайскую сборку из б/у или восстановленных комплектующих.

-3

Б/У сервер с Авито. Хорошая опция для энтузиастов,
но найти достойный экземпляр с нормальным ценником сложно. Плюс, если вы живёте в квартире, постоянно шумящий сервер будет раздражать, а
электричества «накрутит» больше, чем другие варианты.

-4
  1. Конструктор Лего. Варианты типа старенького ПК/ноутбука или сборка сервера из китайских комплектующих на базе сокетов 2011 и 2011-v3. Ещё не так давно в продажу на площадках стали поступать б/у серверные материнские платы в формфакторах ATX и EATX на тех же сокетах. Производители: Lenovo, Supermicro, Asus и т.д.
-5

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

Устанавливаем и настраиваем гипервизор Proxmox

Здесь всё достаточно просто: идём на сайт Proxmox и скачиваем установочный ISO файл. Еще нам понадобится флешка размером от 16 гигабайт. Почему такой большой объём: вместо распространенного Rufus для создания загрузочной флешки, мы задействуем Ventoy. Ventoy позволяет нам не записывать ISO-файлы, как это делает Rufus. Он просто размечает флешку на
загрузочный диск, на который можно скопировать ISO файл для его
дальнейшего запуска. Таким образом, на одну среднюю флешку может
поместиться с пяток полезных ISO образов. Например, у меня реализовано
это так:

  • Я взял внешний корпус для nvme диска и установил
    туда nvme SSD диск на 256 гигабайт, получив очень шустрый внешний диск.
    Через разметку Ventoy выделил 50 гигабайт для копирования образов для
    запуска, остальное пространство — мои личные файлы.
-6
  • На раздел Ventoy сложил несколько нужных мне образов:
-7

При подключении к железу и при запуске с этого внешнего диска они дают следующий результат:

-8

Остаётся просто выбрать образ, с которого мы будем грузиться и устанавливать нужную нам ОС.

Установить Ventoy очень просто:

  • загружаем с официального сайта и разархивируем;
  • вставляем флешку в свободный порт;
  • запускаем Ventoy2Disk и жмём Install.
-9
  • в появившийся раздел Ventoy копируем ранее скачанный нами ISO Proxmox.

Затем вставляем эту флешку в наше железо, загружаемся в Boot Menu,
загружаемся с флешки в Ventoy и выбираем строку с Proxmox iso. Жмём
загрузку с ISO и попадаем в меню установки Proxmox.

-10

Выбираем графическую установку и принимаем лицензионное соглашение (EULA).

-11

Выбираем жёсткий диск для установки Proxmox.

-12

Устанавливаем пароль на root пользователя и вписываем почту.

-13

Далее идёт настройка hostname системы и его статического IP адреса.

-14

На следующей вкладке мы увидим информацию, которую вносили на предыдущих этапах: сверяемся и жмём Install. Установка закончится достаточно быстро, железо перезагрузится, и мы увидим следующий результат:

-15

Дальше идем в браузер. Используя адрес со скриншота (обычно он выглядит как https://ранее_заданный_при_установке_ip:8006/),
попадаем в веб-управление Proxmox, попутно соглашаясь на небезопасное
https-соединение (в дальнейшем пофиксим через SSL-сертификат):

-16

Вводим root в username и тот пароль, который указывали при установке. Попадаем в панель управления, которая предупреждает, что у нас нет подписки на этот сервер Proxmox. Не волнуйтесь, чуть позже уберём и это сообщение.

-17

Обычно при свежей установке я шёл в консоль, открывая попутно вот эту страницу, и менял платные репозитории на бесплатные,  чтобы в дальнейшем получать обновления софта. Но недавно энтузиасты начали распространять в сети сайт Proxmox VE Helper-Scripts, на котором выложены готовые скрипты для настройки свежего Proxmox.

Итак, на этом этапе нас интересует Post Install Script

Заходим и копируем его:

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)"

В Proxmox открываем вверху Shell, вставляем скопированную строчку и запускаем:

-18

Скрипт спросит про отключение платного репозитория, включение бесплатного, включение тестового репозитория (я выбрал — нет), про отключение плашки о том, что вы используете софт без подписки, про включение/отключение высокой доступности (я выбрал оставить). И  напомнит, что нужно поддерживать команду разработки Proxmox.В конце запустит обновление и перезагрузку системы.

-19

После перезагрузки мы получаем работающий гипервизор для домашнего
использования с бесплатными репозиториями для дальнейших обновлений и
без раздражающей плашки о подписке. Дальше я обычно использую самописный скрипт, который на выбор качает облачный образ Ubuntu (22.04 или 24.04), и создаёт готовый шаблон CloudInit на базе этих образов. Это
нужно для быстрого создания серверов на Ubuntu через клонирование
шаблонов. Содержимое скрипта ниже.

#!/bin/bash
# Указываем директорию
DIRECTORY="/root"
# Меню выбора версии Ubuntu
OPTION=$(whiptail --title "Меню выбора версии Ubuntu" --menu "Выберите версию Ubuntu" 15 60 2 \
"1" "Ubuntu 22.04" \
"2" "Ubuntu 24.04" 3>&1 1>&2 2>&3)
case $OPTION in
1)
ISO_FILE="jammy-server-cloudimg-amd64.img"
URL="https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
TEMPLATE_ID=2204
TEMPLATE_NAME="Ubuntu-22.04"
;;
2)
ISO_FILE="noble-server-cloudimg-amd64.img"
URL="https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"
TEMPLATE_ID=2404
TEMPLATE_NAME="Ubuntu-24.04"
;;
*)
echo "Неверный вариант"
exit 1
;;
esac
# Проверка существования шаблона с ID TEMPLATE_ID
if qm list | grep -qw "$TEMPLATE_ID"; then
echo "Шаблон с ID $TEMPLATE_ID уже существует. Пропускаем создание шаблона."
exit 0
fi
# Проверяем, существует ли файл в директории
if [ -f "$DIRECTORY/$ISO_FILE" ]; then
echo "Файл $ISO_FILE уже существует в $DIRECTORY. Пропускаем загрузку."
else
echo "Файл $ISO_FILE не найден в $DIRECTORY. Начинаем загрузку..."
wget -O "$DIRECTORY/$ISO_FILE" "$URL"
if [ $? -eq 0 ]; then
echo "Файл успешно загружен."
else
echo "Ошибка при загрузке файла."
exit 1
fi
fi
# Создание и настройка виртуальной машины
qm create $TEMPLATE_ID --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --name $TEMPLATE_NAME
qm set $TEMPLATE_ID --scsi0 local-lvm:0,import-from=$DIRECTORY/$ISO_FILE
qm set $TEMPLATE_ID --ide2 local-lvm:cloudinit
qm set $TEMPLATE_ID --boot order=scsi0
qm set $TEMPLATE_ID --serial0 socket --vga serial0
qm resize $TEMPLATE_ID scsi0 +30G
qm template $TEMPLATE_ID


echo "Шаблон с ID $TEMPLATE_ID и именем $TEMPLATE_NAME успешно создан."

-20

Базовая установка и настройка Proxmox закончена. Далее продолжим ставить сопутствующий софт.

Установка NginxProxyManager и получение Wildcard SSL-сертификата от
Let’s Encrypt для использования с приложениями в домашней сети

Сразу предупрежу, что для реализации этой части нужен внешний домен. У меня, например, есть домен k3s.host.

Как видно из названия, это прокси-сервер на Nginx. До знакомства с Proxmox
VE Helper-Scripts я обычно создавал LXC контейнер в Proxmox, а в сам
контейнер уже ставил docker-compose и, следуя
инструкции, создавал прокси-сервер.

Теперь всё намного проще. Нужно скопировать и вставить скрипт в shell Proxmox отсюда.

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nginxproxymanager.sh)"

Скрипт проведёт по меню создания LXC контейнера, спрашивая будущий ID, IP
адрес, ресурсы и прочее, и установит ProxyManager в сам контейнер.
Ссылка для входа на прокси будет такого типа:
http://192.168.0.18:81 (у вас будет другая, но 81 порт на конце останется. Зависит от того, какой адрес задали во время работы скрипта.)

Email: admin@example.com
Password: changeme

После ввода логина и пароля последний нам предложат поменять. Меняем и попадаем в меню управления прокси-сервера.

-21

Дальше нас интересует секция с SSL сертификатами.

-22

На скриншоте видно, что я использую свой лично приобретённый домен в
связке с DNS CloudFlare. Но в статье я опишу бесплатный вариант с
DuckDNS.

Идём на duckdns.org и логинимся любым удобным способом. Попадаем в панель управления DNS.

-23

В пункте domains придумываем домен. Для тестов я успел взять домен k8s-lab.duckdns.org

В настройке домена в секции current ip задаём IP-адрес сервера
nginxproxymanager. У меня это 192.168.0.18. У вас — тот, что вы указали
при установке скриптом. Обязательно запишите токен, он пригодится.

Возвращаемся в открытую вкладку с nginxproxymanager и начинаем создавать наш SSL-сертификат. Жмём add SSL-certificate, выбираем Let’s Encrypt и
заполняем поля в таком виде:

-24

Вписываем ваш свежий домен, email, в DNS провайдерах выбираем DuckDNS и вписываем токен со страницы управления DuckDNS. Нажимаем сохранить и ждём создания вашего сертификата

-25

Возможно, вы можете получить ошибку о том, что certbot ничего не знает про
DuckDNS. Для решения этой проблемы нужно зайти в shell самого
nginxproxymanager и установить пакет duckdns следующей командой:

pip install -U certbot-dns-duckdns

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

-26

Итак, время проверить работоспособность сертификата. Идём в Hosts и выбираем Proxy Hosts. Нажимаем add proxy host, заполняем данные для Proxmox и сохраняем.

-27

Теперь при посещении https://proxmox.k8s-lab.duckdns.org попадаём в панель управления Proxmox.

-28

Смотрим, как обстоят дела с сертификатом.

-29

С ним все отлично — мы получили SSL‑сертификат, который можно будет
использовать для любого сервиса внутри сети через прокси-менеджер.

Итак, в сегодняшней статье мы рассмотрели варианты железа для домашней
лаборатории, установили и настроили Proxmox для дальнейшей комфортной
работы, познакомились с Proxmox VE Helper-Scripts и развернули
прокси-сервер, раздающий сертификаты внутри нашей сети.

Для подготовки статьи я использовал следующие ресурсы: