Как я 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 |
| Музыка | Navidrome |
Для каталогизации статей, документов и книг я также использую 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, чтобы хранилище занимало как можно меньше места.
UPD 26.04.2026: на моём калькуляторе Jellyfin был весьма серьезной нагрузкой: порой Jellyfin давался двухъядерному AMD E-350 настолько тяжело, что при воспроизведении музыки вешалась вся система вплоть до перезагрузки. Дело в том, что Jellyfin использует транскодирования (изменение расширения файла под воспроизведение на конечном устройстве) “на лету”. Выполнение таких операций на процессоре является непростой задачей и для более мощных систем. Были попытки привести всё к единому формату, но они не увенчались успехом: система всё равно грузилась на полную. В конце концов я понял, что нужно переходить на что-то менее ресурсозатратное.
Navidrome. Лёгкий стриминг музыки.#

Я попробовал разные решения помимо Jellyfin, но самым интересным для меня оказался Navidrome. Здесь я нашёл всё, что искал:
- Приятный интерфейс. Есть всё что нужно (плейлисты, избранное, сортировки, быстрый поиск).
- Требует немного ресурсов. Если выключать транскодирование (я заранее все треки конвертировал в MP3 320 Kbit/s), то с Jellyfin просто несравненно: я могу воспроизводить музыку сразу на нескольких устройствах и не бояться “положить сервер”.
- Своего Android-клиента для работы с музыкой у Navidrome нет, но в сторонних сервисах трансляцию можно подключать как Subsonic. Таким образом, я использую клиент Symfonium на Android и это, пожалуй, лучший опыт прослушивания музыки, что у меня когда-либо был. Symfonium имеет очень интересные возможности и приятен в работе. Обязательно попробуйте, если используете свои локальные медиа-сервисы.
Про NextCloud напишу уже когда-нибудь потом.
Итоги#
В итоге все решения вместились на сервере и даже (в простое) не требуют много ресурсов от процессора. Всё работает стабильно, чего я и добивался. Посмотрим, как всё это будет работать на больших дистанциях.