Как стать автором
Обновить

Домашний сервер на базе Proxmox

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров51K

Привет! Меня зовут Александр Щербаков. Я DevOps команд страхования в Банки.ру. На своём карьерном пути я успел поработать эникейщиком, системным администратором и, наконец, DevOps-инженером с несколькими командами разработки. Как и любой инженер, я стремлюсь постоянно совершенствоваться: получать новые знания, изучать как устоявшиеся, так и только появившиеся технологии. 

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

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

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

Еще не так давно вышли обновления популярного софта: Ubuntu 24, аппаратного гипервизора Proxmox 8.2 и Kubernetes 1.30. Хочется попробовать их на практике. 

В статьях раскрою следующие аспекты:

  • Выбор железа. 

  • Установка и настройка Proxmox 8.2.x для работы дома. Создание стандартных образов на базе Ubuntu Server (22 и 24). 

  • Создание и парковка домена у одного из хостеров и получение бесплатного Let’s encrypt wildcard SSL-сертификата на купленный домен. 

  • Сборка и настройка собственного NAS хранилища.

  • Установка сервера Gitlab для обучения CI/CD и хранения написанного кода.

  • Установка Kubernetes: установим runners для Gitlab и сопутствующий софт.

  • Полезные ссылки для самостоятельного изучения.

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

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

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

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

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

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

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

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

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

У меня самого сейчас в наличии Lenovo Thinkstation, который и трудится в качестве домашнего сервера. Параметры следующие:  

  • процессор intel core i3 10105t 4c/8t

  • 32Gb оперативной памяти SODIMM DDR4

  • общий объем дискового пространства в 1,5 TB на nvme и ssd дисках (по факту - что было в наличии)

  • установленный гипервизор Proxmox 8.2.2

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

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

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

  • На раздел Ventoy сложил несколько нужных мне образов:

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

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

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

  • загружаем с официального сайта и разархивируем;

  • вставляем флешку в свободный порт;

  • запускаем Ventoy2Disk и жмём Install. 

  • в появившийся раздел Ventoy копируем ранее скачанный нами ISO Proxmox.

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

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

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

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

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

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

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

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

Обычно при свежей установке я шёл в консоль, открывая попутно вот эту страницу, и менял платные репозитории на бесплатные,  чтобы в дальнейшем получать обновления софта. Но недавно энтузиасты начали распространять в сети сайт 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, вставляем скопированную строчку и запускаем:

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

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

После перезагрузки мы получаем работающий гипервизор для домашнего использования с бесплатными репозиториями для дальнейших обновлений и без раздражающей плашки о подписке. Дальше я обычно использую самописный скрипт, который на выбор качает облачный образ 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 успешно создан."

Базовая установка и настройка 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

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

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

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

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

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

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

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

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

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

pip install -U certbot-dns-duckdns

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

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

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

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

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

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

Если материал окажется интересным и полезным для сообщества, далее планирую показать установку Gitlab и Kubernetes для изучения CI/CD.

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

И множество других мелких статей и видео, из которых я почерпнул информацию 😊

Теги:
Хабы:
Всего голосов 54: ↑52 и ↓2+58
Комментарии139

Публикации

Информация

Сайт
www.banki.ru
Дата регистрации
Дата основания
2005
Численность
501–1 000 человек
Местоположение
Россия