Как я self-hosted NAS собирал
Table of Contents
Вступление#
Не так давно с идеей приобретения статического IP-адреса появилось желание наконец-то отпустить свой 15-летний слабенький локальный сервер (не все так просто, [статья об этом](“draft.Минимальный Linux для недо-сервера”)) и сделать что-то более серьезное, учитывая все возможности современного open-source на Linux. К тому времени как раз удачно сложились обстоятельства приобретения ПК в интересном формате корпуса (точно SFF, но ни к какому из известных его не отнести)

Нет, серьезно, какой это форм-фактор?
Обнаружил, что сама плата работает, а неисправны только блок-питания и кулер. Купил новые на замену, в довесок поставил 16 ГБ оперативки. Процессор совсем не мощный, для офисных решений скорее, но с низким энергопотреблением.
Ставим систему#
Ну, конечно же, Arch Linux! Какие еще могут быть варианты? На самом деле этому даже есть объяснение (и даже два):
- Самое свежее ядро, все “ванильные” пакеты
- Наиболее подробная и завершенная (среди прочих дистрибутивов) документация по всем пакетам и самая масштабная поддержка (ну ладно, еще Gentoo).
В серверном исполнении, Arch опционально ставится с nginx, docker, mySQL и Cockpit из коробки. Это ли не прекрасно?
Что я в итоге подключил на сервер#
Итак, здесь сразу с места в карьер: я не буду рассказывать про SSH, git, nginx и прочее, всем известное.
В таблице приведены self-hosted решения с открытым исходным кодом, которые я разместил на своём сервере и, тем самым, заменил вообще все облачные сервисы
| Что храню | Где храню |
|---|---|
| Фотографии | Immich |
| Задачи | Vikunja |
| Файловое хранилище | Nextcloud |
| Музыка | Jellyfin |
| Фильмы, сериалы | Jellyfin |
| Книги | Jellyfin |
Для каталогизации статей, документов и книг я также использую Zotero, но это не open-source, да и не серверное решение.
Администрирование: Cockpit#

Здесь я, признаться честно, даже не рассматривал другие варианты (хотя они существуют, например Webmin и Ajenti), т.к. уже долгое время работаю с этим приложением для мониторинга серверов. Достоинства использования Cockpit:
- Легковесный, не требует много ресурсов для работы.
- Осуществляет мониторинг в реальном времени.
- Большое количество возможностей и совместимость с множеством пакетов и сервисов (масштабируемость).
- Удобный, понятный интерфейс.
Хранилище фото: Immich#
В целом, приложений для селф-хостинга фотографий существует великое множество решений. Я попробовал, практически, каждое из списка, но больше всего мне понравился Immich.

Вот ключевые возможности Immich, на основании которых я сделал свой выбор в его пользу:
- Удобный, интуитивно понятный интерфейс.
- Шикарный AI с распознаванием лиц, интеллектуальным поиском.
- Обнаружение дубликатов (даже при условии, что у одинаковых файлов разные названия).
- Поддержка большого количества форматов (работает и с RAW).
- Отыскивает несколько похожих фотографий (когда делается сразу несколько снимков) и предлагает оставить одно, самое лучшее.
- Наличие мобильного приложения.
- Хоть разработчики и пишут про стадию “активной разработки”, никаких багов или ошибок я не наблюдал. С другой стороны, у меня есть ограничения его применения на моём сервере: у меня весьма слабый процессор (зато низкое энергопотребление!) на котором задачи AI даются с большим скрипом. На моменте поиска лиц (после загрузки новых изображений) и интеллектуального поиска фотографий, все ядра процессора заняты на 100%. В остальное время всё нормально.
Ламповый планировщик задач: Vikunja#
Раньше я пользовался локальным task-менеджером ToDoList от AbstractSpoon.

Несмотря на свой интерфейс в стиле “Office 2007”, это максимально удобное приложение для планировки задач как для одного человека, так и на всю команду. Единственным недостатком являлось только то, что ToDoList сделан только под Windows (хоть и прекрасно себя чувствует при запуске через Wine), но и это решение только для одного компьютера, а мне хочется хранить всё на своем сервере.
В итоге я снова попробовал разные решения, в результате чего остановился на Vikunja:
- Красивый, современный интерфейс.
- Есть возможность разделять задачи по проектам, добавлять теги и всё это удобно и без костылей.
- Есть мобильное приложение (хоть и, пока что, не с полным функционалом, но уже работает).
- Ну это же
альпакавикунья! Почти что альпака!

Вот бы почаще видеть планировщик таким, ха-ха

Jellyfin. Хранилище книг, музыки, кино и сериалов#

Перед тем, как импортировать в Jellyfin все свои аудиозаписи, я конвертировал их все в .mp3 (не вижу разницу с .flac на своей технике) с использованием ffmpeg и затем выполнил их сортировку и каталогизацию с использованием beets, приложения, которое автоматически каталогизирует файлы, добавляет теги, обложки и тексты песен.
Сначала настраивается конфигурационный файл, который можно найти следующей командой:
$ beet config -p
В этом файле нужно указать местоположение базы данных, а также путь к итоговой библиотеке. Далее можно импортировать музыкальные файлы:
$ beet -v import -A ~/path_2_files
, где
-v это verbose mode (меня напрягает, что в командной строке долгое время ничего не меняется)
-A (опционально) выключает автоматическое создание тэгов при импорте. Это можно сделать потом, уже после импорта.
В результате, импорт займёт какое-то время.
В моём случае, СПУСТЯ ДВА ДНЯ, импорт завершился. На самом деле, оно того стоило: все файлы отсортированы, дубликаты удалены, обложки загружены, тексты на месте. Теперь можно и теги добавить и загружать в Jellyfin.
То же самое я проделал с видео: конвертировал все имеющиеся видеофайлы в формат mp4 1080p, чтобы хранилище занимало как можно меньше места.
Про NextCloud напишу уже когда-нибудь потом.
Итоги#
В итоге все решения вместились на сервере и даже (в простое) не требуют много ресурсов от процессора. Всё работает стабильно, чего я и добивался. Посмотрим, как всё это будет работать на больших дистанциях.