Привет, Хабр! в этой статье я попытаюсь я максимально сжатом и доступном формате рассказать про свой небольшой опыт создания homelab.
Важное замечание: на момент написания статьи все виртуальные машины и сервисы были развернуты, a скриншоты я делал уже с боевого сервера, так что не удивляйтесь, если я буду писать о том, что развернул 2 виртуалки, а на скриншоте их будет больше десяти.
Какой опыт я имел на тот момент:
Арендовал кучу VPS для хостинга всего, до чего доходили руки.
Ковырял Raspberry и Arduino.
Настраивал простейшие сети в ВУЗе, в конечном итоге имел почти полный доступ к всей внутренней сети и мог делать что угодно. Здесь нужно отдельное пояснение. Хоть руки и чесались сделать конфетку из старой сети и доступ у меня ко всему был, в итоге я остановился на администрировании отдельного кабинета, так как мне было банально страшно что-то сломать. Возможно, это и была первая причина сборки домашней лабы.
Состав homelab
Первоначально необходимо понять, для чего нам нужна лаба. От этого будем отталкиваться. У меня были 2 основные задачи:
Попробовать те новые продукты, с которыми я не работал
Собрать систему, которая будет информировать о плачевном состоянии этих самых продуктов.
Изначально я прошелся по авито в поисках 1u серверов. Денег мне особо тратить не хотелось (а кому хочется?) да и опыта в таких покупках у меня тоже не было. Выяснилось, что большинство таких железок продается без жестких дисков / ssd и оперативной памяти. Докупать не хотелось, лень и перспектива головной боли при поисках комплектующих для Б/Ушного сервера меня не впечатлила. Кроме того, его где-то надо было хранить, а расположение одноюнитого сервера на шкафу или тумбе как будто бы не особо хорошая идея.
Второй прогон по Авито натолкнул меня на версии домашнего сервера в форм факторе обычного ПК. Из плюсов: его можно было поставить рядом с рабочим компьютером и подключить к монитору. В какой-то момент я уже готов был собирать в таком виде, но столкнулся с тем, что потенциальный сервер будет шуметь, а работать он должен 24/7. Мне было как раз все равно, а вот жена не оценила бы. По этой же причине отвалился и вариант из первого поиска.
Выигрышный вариант
В очередной беседе с коллегами услышал о мини-ПК и предположил, что его покупка решит все мои проблемы, а именно:
Не сильно отразится на цифрах в квитанции за электроэнергию.
Не будет шуметь.
Расположить его можно куда угодно, хоть рядом с роутером повесить.
Из недорогих вариантов можно было найти вот такой аппарат:
На момент покупки стоимость варьировалась в диапазоне от 20 до 30 тыс. рублей. Докупив самую дешевую плашку оперативки на 16 Гб и самый дешевый SSD на 500 Гб, я запустил его.
Начало работы с homelab
Запустить это конечно хорошо, но как...
Передо мной возник вопрос о выборе инструментов с которыми я планирую работать. В качестве гипервизора я выбрал Proxmox 7.4. На тот момент уже вышла 8 версия, но ее я не скачивал из-за предубеждения о том, что последняя версия скорее всего еще сырая. Как оказалось не зря, но об этом дальше. Выбор пал именно на Proxmox по двум причинам. Во-первых, это тот же самый линукс, во-вторых, с ESXi я уже встречался и возвращаться к нему было как-то неинтересно что ли. В итоге скачал образ, подключил монитор, клавиатуру и витую пару через всю квартиру к неттопу. После нехитрых операций гипервизор работал, проверку закончил на пинге восьмерок (8.8.8.8).
После успешной установки я столкнулся с первой проблемой. Во время установки сервера на свое почетное место на шкафу в дальнем углу рядом с роутером я подключил его по витой паре к своему соседу. Сел за компьютер и попытался открыть веб интерфейс проксмокса, он, в свою очередь, старательно сопротивлялся. Выглядело все так, как будто сервер не подключен к сети. Эта ситуация ввела меня в ступор, так как на тот момент локалка у меня была плоская и никаких запрещающих правил на роутере не было. Начал искать проблему на роутере.
Во вкладке с DHCP я обнаружил информацию о присвоении адреса для моей коробочки и начал размышлять уже о том, насколько правильно у меня прошла первоначальная настройка гипервизора, ведь во время установки сервер был точно так же подключен по витой паре и имел доступ в интернет, а значит и в локальной сети он точно присутствует.
Тщательные поиски решения меня привели на один белорусский форум, на котором я узнал, что доступ между узлами, подключенными напрямую к портам роутера провайдера по меди и устройствами в беспроводной сети разграничен. Для того, чтобы настроить обратное мне нужно войти в режим "Суперадмина". Логин и пароль я нашел на том же самом форуме... Сделал настройки и успешно сменил пароли.
На данном этапе мы пришли к некоторому промежуточному результату. Сервер работает, виртуализация доступна, доступ в интернет есть.
Инфраструктура
Помимо купленного сервера у меня уже были 2 арендованные VPS. На одной из них у меня был развернут сервер X-ray по статье, которая уже недоступна на хабре по некоторым законодательным причинам. Другая находилась в России и использовалась уже как OpenVPN сервер для связи с домашним компьютером при необходимости. Друг с другом они у меня никак не связаны, и если с ними что-то произойдет, то я узнаю либо от появившейся ошибки в подключении либо от самого хостинга.
Поразмыслив об этом и о перспективах развития своего сервера я принял следующий план работ:
Развернуть систему мониторинга состояния для своих VPS;
Развернуть пару витруальных рабочих столов (Windows 10 / Ubuntu);
Сделать хоть какое нибудь разграничение доступа;
Развернуть несколько контейнеров под личные задачи.
Плановое размещение виртуалок/контейнеров
Решил начать с мониторинга. Очевидным решением сразу показался Zabbix, он простой и интуитивно понятный, вполне подойдет для простых задач.
Руководствуясь своей безупречной интуицией, я создал виртуальную машину вручную и выделил ей следующие ресурсы:
что привело к следующим результатам:
В свою защиту хочу сказать, что мне это абсолютно никак не мешало, и это была первая виртуалка на сервере. Временное решение оно на то и временное, его потом заменят.
Сервер заббикса был установлен и настроен, такая же ситуация нарисовалась и с агентом забикса на X-Ray сервере.
Кроме того, я сделал минимальные оповещения в телеграмм при проблемах с пингами до VPS с Xray-cервером.
Рядом разметились виртуалки в Win10 и Ubuntu
Эти две машины объединяет подключение к одному и тому же мной созданному интерфейсу с названием"vmbr104". Тут мы плавно подошли к Pfsense. Изначально я планировал спрятать контейнеры и виртуальные машины за ним и при необходимости разрешить необходимый доступ от своего ноутбука / компьютера.
на этом моменте имеем:
2 виртуальные машины которые спрятаны за Pfsense (На самом деле на скриншотах с описанием Win10/ubuntu машин только ubuntu спрятана, я забыл отключить интерфейс который связывает Win10 с внешней локальной сетью);
админка pfsense доступена только из внутренней сети за самим pfsense;
машины доступны с моего компьютера и ноутбука только из моей домашней сети через Port Forwarding;
Замечание
Будьте осторожны с настройками интерфейсов для виртуальной машины вашего Pfsense - есть риск потерять доступ к веб интерфейсу Proxmox. В интернете есть огромное количество гайдов по настройке, например это.
Кроме того при установке Pfsense у меня пропал адрес гипервизора из DHCP роутера, но это все лирика.
Мониторинг работы Xray-прокси
Конкретно этот кейс я постараюсь расписать подробнее, потому что я пока не находил статей с похожим случаем.
Вариант не является идеальным в исполнении, но у него есть одно неоспоримое преимущество - он работает.
Дано:
Наша VPS c установленным 3X-UI по недостурной на хабре статье, но доступной в README файле в репозитории проекта;
Мощности нашего гипервизора.
Задача:
При отсутствии доступа до ресурсов, которые нам обеспечивает наш прокси, получать об этом уведомление в телеграм или хотя бы видеть это на каком-нибудь дашбордике.
Создаем LXC контейнер с Ubuntu, выделяем минимальное количество ресурсов
Устанавливаем Xray-core (репозиторий). Авторы предлагают нам элементарную установку в 1 строку
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
Далее нам необходимо описать свое подключение в json'e. Путь до файла конфига отобразится в конце установки
Так как я использую Vless + Reality, то я иду снова в репозиторий ядра Xray и ищу минимальный пример конфига для этой версии клиента. Вот здесь можно найти все возможные примеры конфигураций.
{
"log": {
"loglevel": "debug"
},
"inbounds": [
{
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"udp": true
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
],
"routeOnly": true
}
}
],
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "123.456.789.0",//Сюда вписываем ip сервера
"port": 443, // Порт, параметр из ключа клиента
"users": [
{
"id": " ", //Должен совпадвть с id на сервере, параметр из ключа клиента
"encryption": "none",
"flow": "xtls-rprx-vision"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"fingerprint": "chrome",
"serverName": "microsoft.com", //из ключа клиента
"publicKey": "", //из ключа клиента
"spiderX": "/", // из ключа клиента
"shortId": "" // из ключа клиента
}
},
"tag": "proxy"
}
]
}
Перезагружаем службу и проверяем что конфиг файл импортировался без ошибок
Служба работает, устанавливаем proxychans4 и редактируем конфиг файл уже для него
apt install proxychains4
nano /etc/proxychains4.conf
В конце файла добавляем локалхост с портом, который указан в inbounds::port в описании конфига Xray и ставим в начале SOCKS5. Главное чтобы новая строчка стояла выше остальных. Так как остальные строчки мне вообще не были нужны, я их удалил. Получилось следующим образом:
Осталость только по Api какого нибудь сайта проверить свой адрес через проксичейнс
proxychains4 curl 'https://api.ipify.org?format=json'
В качестве результата выполнения команды нам должен вывалиться адрес нашего прокси-сервера. У меня так и произошло.
На этом моменте мы вспоминаем как много ресурсов тратит наш заббикс на простые пинги и решаем устранить проблему. Переходим на Prometheus в связке с Grafana.
Отличную статью по этому инструменту можно найти вот здесь. Для отслеживания метрик доступности недоступных ресурсов из дома через наш прокси мы используем blackbox exporter, который можно запустить через proxychains.
Далее на скриншоте я совместил некоторые панели. Показатели потребления русурсов Прометеусом и Графаной. Также на изображении показатели некоторых метрик в Графане, которые я пронумеровал для удобства.
Пронумерованные метрики:
доступность некоторого недоступного из РФ ресурса от VPS за рубежом, на котором поднят X-ray сервер;
доступность некоторого недоступного из РФ ресурса из дома через наш ранее поднятый контейнер x-ray клиента;
доступность контейнера с пустым Nginx web-сервером для линых нужд от VPS за рубежом, на котором поднят X-ray сервер;
доступность контейнера с пустым Nginx web-сервером через наш ранее поднятый контейнер x-ray клиента (т.е. один контейнер проверяет соседний из другой страны).
Сразу можно заметить, что 2 контейнера графаны и прометеуса портебляют меньше, чем ВМ с заббиксом, тут кроется наша микропобеда.
Кусочек DevOps
Все мы сталкивались с мыслью, что иногда проще все разрушить и постоить заново. Потратив значительный промежуток времени разворачивая и уничтожая виртуальные машины и контейнеры, я начал приходить к мысли, что вручную повторять один и тот же процесс разворачивания одинаковых виртуалок ни к чему хорошему не приведет. Под огромным психологическим давлением и парой банок темного нефильтрованного пришлось описать новые раворачиваемы инстансы в Terraform.
В начале статьи я упоминал, что не зря поставил версию 7.4 гипервизора. Дело в том, что на момент установки Proxmox была проблема в его работоспособности версии 8 и доступного провайдера Terraform. Проблема была одна и очень серьезная - провайдер не работал. Используя интернет и очередную статью (Terraform для LXC и ВМ), я описал структуру для быстрого старта новой ВМ или контейнера.
terraform {
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "2.9.14"
}
}
}
provider "proxmox" {
pm_api_url = "https://Адрес_проксмокса:8006/api2/json"
pm_api_token_id = "terraform@pam!terraform"
pm_api_token_secret = "Сгенерированный_в_проксмоксе_ключ"
pm_otp = ""
}
resource "proxmox_lxc" "lxc-test" {
features {
nesting = true
}
hostname = "Ваш_очередной_контейнер"
network {
name = "eth0"
bridge = "vmbr0"
ip = "адрес_с_маской"
gw = "шлюз"
}
rootfs {
storage = "local-lvm"
size = "размер_диска"
}
ostemplate = "ваш_образ_контейнера"
password = "пароль_для_рута"
target_node = "pve"
vmid = ид_контейнера
start = "true"
unprivileged = true
ostype = "ubuntu"
ssh_public_keys = <<ваш_паблик_кей
connection {
type = "ssh"
host = "адрес"
user = "root"
private_key = file("~/.ssh/id_rsa")
timeout = "50s"
}
Всю секретную информацию можно было спрятать в отдельных файлах и переменных окружения, но для удобста публикации я собрал все в один.
Заключение
По итогам эксплуатации минисфорум отключался ровно 1 раз. Причиной являлось отключение электричества. Аптайм на момент написания статьи - 115 дней. На момент предыдущего отключения - 57 дней. В качестве проверки на стресс я запускал все установленные ВМ и контейнеры и забивал все ресурсы. В таком режиме малыш простоял неделю и не имел никаких огорчающих последствий. При грамотном распределении ресурсов имеем тихое и скромное по электропитанию устройство, которое можно держать включенным 24/7 и обучаться на нем чему только пожелаешь.
Комментарии (11)
toxella
18.06.2024 07:33+1Как решение для домашней лабы, где надо что-то быстро поднять затестить - миники вообще норм. В частности, они хотя бы не так сильно шумят и жрут, как полноценные сервера.
Кстати, если вы тоже селфхостер или тащитесь по этим всем домашним лабам, сервачкам и тд - добро пожаловать в уютный чат
kyt001
18.06.2024 07:33+1мало что понимаю в настройке подобного софта, но прочитал с интересом. Мини-ПК оказался неплохим устройством, однако.
Я как-то сам решил собрать себе а-ля мини-сервер, правда не для виртуалок. По факту это обычный миниатюрный ПК с виндой и установленным софтом, который должен работать 24 на 7. Потому поделюсь своим вариантом, может кому пригодится. У автора ценник на минисфорум вышел около 30 тысяч (может чуть больше с учетом ОЗУ и SSD), у меня бюджет был раза в 3 меньше. Собирал в декабре 2023 - январе 2024. Соответственно, искал все на Авито, Озоне.
Вышла такая конфигурация:
mini itx мат плата на чипсете z68,
xeon 1260l первого поколения с теплопакетом в 45 Вт (под нагрузкой где-то 38-40 Вт по данным Аиды64),
16 Гигов DDR3,
корпус Cryptone-I и компактный блок питания.
SSD нашел в своих запасах.
Кому интересно, могут почитать https://360new.ru/kak-sobrat-nedorogoy-server/
Система вышла тихой (ручная регулировка вентилятора), относительно компактной (минисфорум, конечно, будет компактнее). Со своими задачами справляется. Из минусов: нельзя нарастить ОЗУ ибо лишь 2 разъема под память и 16 ГБ максимум, корпус не самый удобный (хотя и неплохой), старая платформа с отсутствием особой перспективы апгрейда. Из плюсов - можно в Cryptone-I поставить компактную видеокарту уровня 1660 / 3050 и запускать нейронки по типу stable diffusion, но и ценник всей сборки уйдет далеко ввысь. Ну и саму платформу можно поменять, поставив условный ryzen с 8 ядрами и mini itx am4 мат.плату
Посмотрел тесты в CPU-Z и Ryzen 5 5625U в однопотоке набрал там 550 баллов. У меня xeon 1260l набирает 300 баллов. По классике прям: хочешь быстрее - плати больше.
Сейчас подобный ПК выйдет подороже, т.к цены и на б/у, и на новое железо выросли. Если кто соберется повторять мой опыт, то сейчас моя сборка вышла бы в 12-14 тысяч рублей ориентировочно
ABy
18.06.2024 07:33+1Если нужен homelab задешево, советую поискать на барахолках списанные корпоративные мини-пк, например HP Elitedesk 800 G4 mini (оптимально по цене/производительности). Если не хотите внешний блок питания, то смотрите в сторону не mini а sff. И лучше с Intel AMT - тогда будет встроенный KVM и даже не нужно будет физически прикасаться к серверу.
Если вам интересна эта тема, смотрите Project TinyMiniMicro
Ooh_whatever Автор
18.06.2024 07:33Думаю, что когда нибудь так и сделаю, но только после покупки второго миника (хочу уйти в отрыв и собрать minisкластер)
Apv__013
Я так и не понял какие важные задачи выполняет ваш хоумлаб. Или это просто реклама?
joni
локальный впс и обход блокировок
Ooh_whatever Автор
По пододу первого - наверное да ( ну тут скорее ВДС, а не ВПС)
По второму - если быть точнее, то часть лабы выполняет роль мониторинга работы моего прокси, ну те просто прорверяет, что все ок или не ок ( надо идти чинить )
Ooh_whatever Автор
Основная - попробовать то, c чем я не сталкивался потратив минимальные средства и как-то связать все мои арендованные VPSки в одну систему так, чтобы ее хоть как то мониторить.
На самом деле я много чего опустил, получилось бы материала на 4 таких статьи и много лишнего:
- о том как я впервые ставил проксмокс
- о том как я его потерял, неправильно установив pfsense
- о том как я разворачивал терраформом контейнеры для всяких внутренних ботов
- о том как я поднял в контейнере вебку через nginx и выпустил ее в интернет через реверс прокси на одной из арендованных VPSок
- о том как я изобретал велосипед с мониторигом этого всего
Выбор того, на чем это все делать обусловлен чисто бытовыми причинами, если бы я не был женат и электричество было бы бесплатным я бы купил какой-нибудь одноюнитовый делл)) у него хоть несколько портов rj 45, в отличие от моей коробочки.
Diesel_Solyar
А сколько он из розетки ест - в простое и под полной нагрузкой?
Ooh_whatever Автор
К сожалению, пока не довелось измерить
Пока могу сказать, что в квитке по электричеству в среднем +20 рублей где то стало и то не факт, возможно я просто чаще гладиться стал.
Хочу как нибудь собраться найти хотя бы тдп по всем комплектующим и прикинуть что должно в теории выходить по потреблению.
kyt001
вроде как tdp 15 ватт должен быть, но в подобных мини-ПК многое отдано на откуп производителя. И уже сам производитель может посредством настроек биос задавать значание tdp "из коробки". Это может быть и 25 ватт, и 15 ватт, и 35 ватт.