Найти в Дзене
Олег.Кряхтит.Онлайн

Как начать селфхостить: аппаратная инфраструктура

Оглавление

С вопросом "зачем селфхостить что-то" мы определились, перейдём понемногу к вопросу "где". Основные варианты размещения ПО:

  1. в облаке, но на арендуемом VPS;
  2. на дополнительном компьютере, который работает дома 24/7;
  3. десктопное ПО и локальная файловая система на том самом компьютере, где вы работаете.

Можно не останавливаться на чём-то одном, эти варианты можно совмещать. Разберём их подробнее.

Аренда VPS (Virtual Private Server)

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

Плюсы:

  • электричество и износ оборудования становится чужой заботой;
  • домашний IP-адрес не "светится", если публикуете сетевое ПО, вроде блогов, сайтов итд;

Минусы:

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

На что смотреть при выборе VPS:

  • Диск. Объём, скорость чтения и записи. SAS диски не так плохи, как кажутся, но всё же медленнее SSD. SSD включаются по-разному - через SATA или PCI. PCI быстрее. Слепо верить хостеру - плохая идея. После покупки стоит провести проверку:

    apt install fio
    fio --name=test --ioengine=libaio --rw=randwrite --bs=4k --direct=1 --size=200M --numjobs=1 --runtime=60 --time_based

    Не забудьте удалить временные файлы.
  • Оперативная память - объём и частота. С объёмом всё просто. Недостаток объёма можно компенсировать swapfile'ом, но каждый мегабайт swapfile отнимает место на диске, а если диск - HDD (SAS) производительность (при выходе в swap) резко падает. Linux без SWAP сомнительная затея, хотя бы 1гб выделить стоит, даже если он будет пустовать 99.9% времени. С частотой сложнее, 99% хостеров сдают в аренду DDR4. На старой работе я анализировал опыт эксплуатации самопальных сборок с DDR1, DDR2, DDR3 и DDR4. Если между DDR3 и DDR4 разница практически незаметна, с DDR1 и DDR2 - беда, вызванная скорее сочетанием со старыми материнскими платами и процессорами.
  • Процессор - число ядер процессора, частота и гарантии владения этими ядрами. У провайдеров бизнес-модель сильно зависит от плотности виртуальных машин, расположенных на физических серверах. Экономическая суть хостинга VPS - накормить толпу двумя хлебами. Вопрос в том, хватит ли вам этих крошек. Размещать требовательное к ресурсам ПО на одном ядре процессора, которое делят между собой ещё пять человек, неприятно. Всё зависит от соседей, но этого мы не контролируем, а гарантия в 50-100% уже лучше, чем ничего.
  • IP адрес. Для публикации скорее всего нужен выделенный белый IPv4 адрес, чтобы прикрутить к нему домен. Некоторые провайдеры предоставляют их как дополнительную услугу.
  • Расположение. Есть категория людей, которым важно ни байта не хранить на территории России, готовы заморачиваться за оплату криптой, чтобы сервер размещался в святых Нидерландах. Перед покупкой задумайтесь, ок вам или нет, если ваши данные попадут к товарищу майору, но помните, что нахождение их вне РФ ничего не гарантирует.
  • Цена. Не смотрите на промо-тарифы и предложения вроде "первый месяц 100 рублей". Рассчитывайте на долгосрочное сотрудничество, представьте, приемлемо вам или нет платить эту сумму каждый месяц. Умножьте на 12, годовой ценник иногда отрезвляет. Некоторые провайдеры дают скидки при оплате на год. У меня вот проблема: мне жалко денег на VPS с 2гб оперативной памяти и хотя бы 20гб диском. Если чем-то жертвую - начинаются эксплуатационные проблемы.

Я пока что остановился на netangels, но я просто симпатизирую этой компании, так как они мои земляки и давно на слуху. Раньше пользовался vscale, теперь он переехал под крыло selectel, но у них ценник пугает, то что раньше стоило 200 рублей, сейчас стоит 500. У Netangels VPS с 1гб оперативной памяти, 10гб диском и 2 ядрами + 1 белым IPv4 обходится в 310 рублей в месяц. Можете поискать сайты-агрегаторы VPS.

Совет: не держите на одном сервере публикуемые сервисы и VPN, через который выходите в Интернет на значимые ресурсы. Оба сервера могут взломать, несмотря на принимаемые меры по защите, но в случае если вы не светите в публичном пространстве адресом сервера с VPN, вы хотя бы не привлекаете к нему лишнего внимания. Security by obscurity, конечно.

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

Определитесь с форм-фактором.

Одноплатник

Наличие Ethernet в какой-то момент меня очень здорово выручило. Питание через MicroUSB подавал от роутера.
Наличие Ethernet в какой-то момент меня очень здорово выручило. Питание через MicroUSB подавал от роутера.

Моя Raspberry Pi 3b+ лежит выключенная уже второй год.

Плюсы: размер и энергопотребление. Совместимость - я ни разу не упирался в архитектуру процессора, когда крутил свои проекты на python на Raspberry Pi. На этом плюсы заканчиваются.

Минусы:

  • Соотношение вычислительной мощности к цене не такое уж выгодное.
  • С охлаждением беда, похожая на CAP-теорему, только надо выбрать любые два из тройки "компактное, тихое, холодное". Пассивное охлаждение на радиаторах позволит добиться около 55 градусов в простое, под нагрузкой около 80.
  • Плохой USB-кабель может подарить кучу проблем с недостатком питания и непонятными ошибками, лучше питать через специальный адаптер.
  • Полноценных дисков много не подключишь. Можно попробовать внешний SSD по USB, но для него должно хватать питания.
  • Иногда могут быть проблемы с нестабильным соединением по Wi-Fi.

Если будете покупать - не забудьте про корпус, радиаторы и блок питания.

Готовый файловый сервер

Synology DiskStation DS923+
Synology DiskStation DS923+

Опыта использования нет, я только смотрел и облизывался.

Плюсы: Synology делает неплохие вещи. Работают из коробки, корзинки удобные, можно вставить много 3.5" дисков и в веб-интерфейсе натыкать, как их сконфигурировать в рейд, чего получим. Софт ставится через ту же панельку управления.

Минусы:

  • Цена. И это диски в комплект не входят.
  • Не знаю, насколько глубоко можно лезть в систему.
  • В комплекте часто идёт очень слабый процессор. Это даёт хорошие показатели энергосбережения, но не даст использовать много дополнительных сервисов.

Самопальный компактный файловый сервер

Я писал в начале, что не обязательно останавливаться на одном из подходов. Помимо VPS у меня есть файловый сервер, расскажу о нём подробнее.

Плюсы:

  • Возможность апгрейда. Я могу воткнуть процессор помощнее, но пока мне этого не требуется.
  • Самое главное - root-права. Что хотите - то и делаете.
  • Ну и компактность.

Минусы:

  • Сложно выбирать, много вариантов, все чем-то да плохи. Компактная система - это компромисс на компромиссе.
  • Высокие цены.
  • Компактность ограничивает выбор и число дисков.
  • Плохое охлаждение.
ASRock Deskmini 310.
ASRock Deskmini 310.

Вернёмся к моему выбору. Суммарно файловый сервер обошёлся мне в 45000 рублей.

  • Корпус: ASRock Deskmini 310. Взял по акции за 8000р. Вероятно стоило взять вариант с AMD (A300), на 4000р дороже, но получил бы возможность использовать AM4-процессоры. К счастью пока CPU не был ограничением. Минусы — диски сзади материнской платы не продуваются; большой
    внешний блок питания, размером почти с сам корпус, что снижает привлекательность форм-фактора mITX.
  • Материнская плата: ASRock H310M. Шла в комплекте с корпусом.
  • Процессор Intel Pentium Gold G5400, взял за 3799р. Для задач NAS - оверкилл, можно было взять попроще-подешевле, но для
    дополнительных задач типа виртуальных машин хочется иметь
    запас производительности. Могу заменить на Core i3 8100, но не требуется.
  • Кулер: сперва взял DEEPCOOL Theta 9 350, оказался шумным, продан на Avito и заменён на Noctua L9h за 4300р.
  • Оперативная память: проапгрейдился до 2х16гб, DDR4, 2400MHz, нужны SO-DIMM модули, обошлось в 12000р. Объём оверкилл, заплатил чтобы не думать о том, влезает что-то в память или нет. Оказалось очень кстати, когда играл в World of Warcraft.
  • Диски: под хранение 2 x Toshiba L200 HDWL120EZSTA, 2.5", 2Tb, тогда стоили 4890р, замену покупал уже по 6500р за шт. Собирай я сервер сегодня, купил бы корпус с салазками под 3.5 жёсткие диски. 2.5" непопулярно, а потому дорого в пересчёте на гигабайты. Собрал диски в RAID1. Считал что 2Tb хватит, но уже тесно. Под систему NVMe формата 2280 на 128гб. Часть виртуалок, требовательных к скорости чтения, живут на нём же.
  • Wi-Fi адаптер. Intel AC 9560NGW. Моя большая ошибка - Wi-Fi адаптеру
    нужна антенна (до этого никакого опыта работы с беспроводным
    оборудованием не было), а в комплекте её не было. Заказал что-то на
    алиэкспрессе, не осилил подключение (похоже надо было паять), теперь NAS живёт в серверном шкафу в кладовке и подключен напрямую к роутеру по Ethernet. Зато надёжно.
  • OS. Ubuntu 24.04. Я не то чтобы сильно гик, работает и ладно.

Самопальный некомпактный файловый сервер

-5

Если нужны нейронки - понадобится видеокарта и хорошее питание. А лучше даже две видеокарты и очень хорошее питание. Здесь компактным размером уже не обойтись. Соберите сервер в корпусе от старого компьютера, можно даже не собирать, а использовать его как есть. Или купите Б/У Xeon'ы предыдущих поколений с маркетплейсов и соберите двухпроцессорную систему с ECC-памятью за копейки. Я сам не пробовал, бенчмарки в руках не держал, так что не осуждаю.

Плюсы:

  • Вторая жизнь для железок.
  • Больше SATA-портов - больше дисков. Больше дисков - выше надёжность, за счёт многократного резервирования. Рекомендую посмотреть на ZFS - это идеальный проект для "второй жизни старых ненадёжных дисков", можно собирать очень гибкие конфигурации для хранилищ.
  • Хорошее охлаждение.
  • Доступность - десктопное железо легко найти.

Минусы: потребление электричества - работа в режиме 24/7 начнёт выпадать в небольшую копеечку.

Полноценный сервер

-6

Мне в голову не приходит идей о том, зачем полноценная серверная платформа дома, но это тоже вариант. Вдруг вам нужно очень много дисков? 4U дисковая полка в помощь. Может хочется своими руками пощупать с чем вы работу работаете. Без серверного шкафа с вентиляцией и шумоизоляцией я бы не покупал. Можно брать железо 1-2 годовалой давности на вторичном рынке.

Плюсы: надёжность.

Минусы: цены, доступность - кажется сейчас с свежим серверным железом в России дела стали сильно хуже, шум - за тишину в серверном железе никто не заморачивается.

На своём компьютере

Можно вообще не покупать второй компьютер. Вы можете использовать в качестве "сервера" свой собственный. Если вам не нужен доступ с других железок - можете хостить всё прямо на локалхосте.

Используйте десктопное ПО, оно тоже классное.

  • Перейдите с Google-таблиц в LibreOffice, если вам не надо делиться ими с другими людьми.
  • Медиасервера - смотрите сериалы и фильмы на телевизоре (см. Kodi, Samba, DLNA).
  • Календари - Evolution и Thunderbird, честно говоря, выглядят скверно. Но у thunderbird прикольный RSS и почтовый клиент.
  • Заметки - Obsidian неплох, хоть и проприетарен. Синхронизацию с телефоном можно организовать через кабель, считая то, что на компьютере мастер-копией и периодически копируя новые файлы с телефона. Позже я напишу про него отдельную статью.
  • Нейронки - запускайте Ollama локально, если они нужны периодически, а не постоянно. Играть в видеоигры и при этом использовать LLM не получится.

Диски

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

  • Вместо облачного хранилища для фотографий купите себе диск побольше.
  • Если хочется больше надёжности, соберите RAID из нескольких дисков прямо в своём компьютере.
  • Холодные бэкапы записывайте на съёмный жёсткий диск, который после снятия будет храниться на другом адресе. Простое копирование может быть долгим, изучите rsync. В подавляющем большинстве случаев хватит `rsync -a --delete --progress`. Если раньше не пользовались - обязательно потренеруйтесь на папках, которые не жалко с вложенными структурами, чтобы понять как работают "/" в конце директорий в аргументах.
  • Наведите порядок в вашей структуре хранения фоток. Этот совет подходит и при использовании файлового сервера и с облачным хранилищем. Мне удобнее всего структура вида "2023/2023.06 - Зюраткуль/*.jpg" для событий вроде поездок и "2024/Внешний мир/" для категорий фоток, которые не так сильно привязаны к дате.

Плюсы: не вносится никаких сетевых задержек. Конфиденциальность выше - данные вообще не передаются по сети. Вы можете заморочиться за шифрование системы (LUKS для Linux) и меньше бояться получения злоумышленниками физического доступа. Если вы не опытный пользователь, риск лишиться данных выше, лучше пока проигнорировать.

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

Безопасность

Если взялись селфхоститься - теперь только вы отвечаете за неё. Самый простой способ - считать всё по-умолчанию взломанным. Хорошо принимать решения, исходя из модели угроз. Но её сперва нужно построить, а это уже требует небольших навыков в инфобезе. Из простого:

  • Используйте сложные пароли,
  • для SSH используйте вместо них ключи (запретив вход по паролю),
  • настраивайте firewall, минимизируйте число открытых для мира портов,
  • изолируйте сервисы друг от друга,
  • отделяйте личное и публичное.

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

Выводы и советы

  • Чем ближе, тем лучше. Я рекомендую сперва пытаться использовать личный компьютер. В случае если всплывают проблемы и неудовлетворённые требования - переключаться на домашнюю файлопомойку и лишь потом на VPS.
  • Используйте уже имеющиеся ресурсы. Соберите рабочую систему на старом компьютере перед тем, как покупать одноплатник или арендовать VPS, опробуйте софт, который хотели туда воткнуть.
  • Не забывайте о безопасности. Для предыдущего пункта есть и исключения. Не стоит пытаться публиковать в Интернете сервисы, разворачивая их на своём компьютере или файловом сервере.
  • Комбинируйте подходы. Никто не заставляет вас переносить всё ПО на VPS, одноплатник, личный компьютер или файловый сервер.
  • Не надо абсолютизма - там где облачное ПО не получается заместить своим - лучше продолжить пользоваться им, чем грызть кактус.
  • Селф-хостинг — это марафон, а не спринт. Начните с одного сервиса, добейтесь того, чтобы он был вам удобен и только потом переходите к другим. Не хватайтесь за всё и вся. Скорее всего получится плохо.
  • Считайте деньги. Селфхостинг не бесплатен. Оцените срок службы комплектующих. Вычислите сколько будет стоить выбранное решение в пересчёте на месяц и год использования. Сравнивайте варианты и выбирайте лучшее.
  • Настроенный и отлаженный софт - это уйма вложенных усилий. Берегите их. Настройте бэкапы вне зависимости от выбранного варианта.