С момента моего погружения в мир Linux, я периодически приходил к мысли о том, что было бы неплохо прикупить домашний сервер, ибо штука это очень полезная. Так как квартира небольшая и стационарного ПК дома нет (только ноутбуки, мой и жены), то конечно хотелось бы какое-то компактное решение. Однако периоды таких размышлений ограничивались только размышлениями и не приводили к целенаправленной деятельности, но до определенной череды событий...

Дисклеймер

Я честно не ожидал, что статья окажется такой большой, поэтому предлагаю запастись терпением. Надеюсь, она понравится тем, у кого руки не для скуки =)

Прогрев

Первые звоночки поступили в момент, когда мне нужно было найти какой-нибудь старый файл/программу, которая находилась на съёмном жестком диске. Приходилось сначала искать этот хард, потом подключать, потом уже файл искать. Но, благо, приходилось так делать довольно редко. Второй момент, как бы это странно ни прозвучало - цензура. Есть некоторый набор любимых фильмов/сериалов, которые иногда хочется пересмотреть с любимой озвучкой, однако, на стриминговых сервисах либо могли просто блокировать нужную аудиодорожку, либо запикивать некоторые фразы. В какой-то момент, просматривая очередную серию Кремниевой долины, я заметил, что будто бы пропустил небольшой кусок, хотя смотрел неотрываясь. И тут же понял, что из серии вырезан фрагмент, который попадает под действие новых прекрасных законов. Для меня это стало последней каплей.

Я начал консультироваться по вопросам домашних серверов с коллегами и тут образовалось два лагеря, сформировавших отдельные стратегии:

  1. Покупка б/у серверной материнской платы, процессоров и сборка этого хозяйства в корпусе кастомного дизайна (ну то есть самостоятельного изготовления) и стопроцентно самостоятельная настройка софта. Человек, реализовавший такое у себя очень сильно замотивировал, но очень сильно напрягало то, что мне будет некуда встроить такое решение.

  2. Покупка готового решения, например Synology. Если не хочется переплачивать за подписку - накатить на него прошивку Xpenology. Концепция супер, но глядя на ценник (хоть он и не сильно кусается), проступала скупая мужская слеза из-за душащей жабы тратить на это больше, чем 10 тысяч.

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

Неожиданное решение

И вот спустя буквально пару месяцев летним вечером 2025 года я проводил ревизию своих запасов электроники: копался среди кучи одноплатников (как производительных, так и не очень), Arduino-контроллеров (ATmega, ESP32, ESP8266, RPI Zero) и прочей рассыпухи. По итогу заметил, что львиная доля этого добра вообще никак не используется в домашнем хозяйстве, хотя это было и не удивительно - весь мой 8-летний опыт работы до Linux был связан с embedded-разработкой, и, как следствие, тогда зависая на маркетплейсах, я что-то покупал себе по скидке, но при этом довольно быстро остывал к задумке, ради которой всё закупалось.

Здесь меня осенило: зачем искать что-то на стороне, когда я могу из имеющихся компонентов собрать то, что нужно, при этом не потратив ни копейки! Сразу же взгляд упал на залежавшийся NanoPC-T4. Вообще у меня был и Raspberry Pi 3B+, но я его иногда возил на работу, как резервный ПК и хотел найти ему другое применение.

NanoPC-T4
NanoPC-T4

Для домашнего NAS в нем было всё плюс-минус необходимое:

Характеристики
  • RAM: Dual-Channel 4GB LPDDR3-1866

  • Flash: 16GB eMMC 5.1 Flash

  • Ethernet 1 Gigabit, Wi-Fi, Bluetooth 4.1, HDMI, USB 2.0, USB 3.0, USB Type-C, PCIe

  • microSD Slot x 1

  • 40Pin GPIO Extension ports

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

Как заставить камни подключаться к Wi-Fi?

Честно говоря, было очень неожиданно споткнуться на самом первом этапе: с нужного раздела на сайте Armbian скачал образ ОС, накатил на SD-карту, запустил плату и... не смог подключиться к Wi-Fi. Как выяснилось, был косяк в самой прошивке.

После этого практически сразу нашелся официальный сайт производителя платы FriendlyElec с разделом конкретно под эту железку. Уже там есть ссылка на папку с официальными образами, с которой я успешно стянул Debian 13. С ним уже проблем не возникло - запуск и подключение к сети прошло без проблем

Примерно так выглядит рабочий стол (так же, как и на оф.сайте)
Примерно так выглядит рабочий стол (так же, как и на оф.сайте)

Первые успехи

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

С подключением возиться долго не пришлось, впрочем как и с настройкой доступа, так как мой текущий рабочий опыт подсказал поставить Samba и не париться. Для тех, кто не в курсе - это консольная утилита для Linux, предоставляющая разграниченный доступ к ресурсам на сервере.

Настройка сервера для удаленного подключения к папке

Устанавливаем samba:

 sudo apt install samba

Далее заводим пользователя сначала в системе:

sudo adduser test-user

Затем вводим его в Samba (и вводим тот же пароль):

sudo smbpasswd -a test-user

С пользователем разобрались, теперь создаем тестовую папку для нашего пользователя:

sudo mkdir /opt/shared_test
sudo chmod 775 /opt/shared_test

Затем правим конфиг Samba smb.conf. На всякий случай создаем копию этого файла, например smb.conf.bak и затем правим оригинал:

# Переименовываем файл: smb.conf -> smb.conf.bak
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak

# Создаем заново smb.conf
sudo vim /etc/samba/smb.conf

Вставляем туда следующее наполнение:

[global]
   workgroup = WORKGROUP
   security = USER
   server string = %h server
   bind interfaces only = no
   log file = /var/log/samba/log.%m
   log level = 1
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   usershare allow guests = yes
   map to guest = bad user
   idmap config * : backend = tdb
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

[shared_test]
   comment = Test Folder
   path = /opt/shared_test/
   read only = no
   guest ok = no
   writable = yes
   admin users = test-user

Далее проверяем конфигурацию утилитой testparm:

$ sudo testparm

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
	log file = /var/log/samba/log.%m
	logging = file
	map to guest = Bad User
	max log size = 1000
	obey pam restrictions = Yes
	pam password change = Yes
	panic action = /usr/share/samba/panic-action %d
	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
	passwd program = /usr/bin/passwd %u
	security = USER
	server role = standalone server
	server string = %h server
	unix password sync = Yes
	usershare allow guests = Yes
	idmap config * : backend = tdb


[printers]
	browseable = No
	comment = All Printers
	create mask = 0700
	path = /var/spool/samba
	printable = Yes


[print$]
	comment = Printer Drivers
	path = /var/lib/samba/printers


[shared_test]
	admin users = test-user
	comment = Test Folder
	path = /opt/shared_test/
	read only = No

И наконец перезапускаем службы:

sudo systemctl daemon-reload
sudo systemctl restart smbd

Теперь всё готово для проверки удаленного подключения

После настройки смотрим ip-адрес нашего сервера, чтобы потом использовать его при подключении. Нас интересует поле inet:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.0.185/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
       valid_lft 69670sec preferred_lft 69670sec

Видим адрес 192.168.0.185 и сохраняем/запоминаем.

После настройки сервера подключаемся к расшаренной папке, но так как подключение с Windows немного отличается от того, как это делается в Linux, рассмотрим оба этих варианта:

Подключение с Windows

Открываем проводник, правой кнопкой щелкаем по иконке "Этот компьютер" и в появившемся меню кликаем по опции "Подключить сетевой диск"

Далее появится диалоговое окно с подключением. Как указано в примере нужно ввести данные так: \\<ip-адрес сервера>\<имя папки>.
В нашем случае это будет \\192.168.0.185\shared_test.

После нажатия кнопки Готово появится диалоговое окно с учетными данными пользователя. Нужно ввести его имя и пароль, то есть test-user и тот пароль, который задали ранее.

После успешной аутентификации Проводник покажет директорию с её наполнением:

Подключение с Linux через проводник

Изначально всё практически также: открываем проводник и кликаем внизу на клавищу "Other Locations"

Далее в окне внизу пишем адрес сервера по следующему шаблону:
<протокол>://<пользователь>@<ip-адрес сервера>/<имя папки>/

То есть в нашем случае:
smb://test-user@192.168.0.185/shared_test/

Затем нажимаем клавишу Connect. Затем появится форма аутентификации.
Поле Domain оставляем, как есть. В поле Password пишем пароль пользователя test-user, и нажимаем Connect.

В случае успешной аутентификации Проводник покажет папку с содержимым:

(Бонус) Подключение с Linux из командной строки

Для подключения из командной строки необходимо установить утилиту smbclient:

sudo apt install smbclient

После установки вводим следующую команду:

smbclient \\\\192.168.0.185\\shared_test --user test-user

Далее вводим пароль пользователя test-user по подсказке системы. После успешного прохождения в терминале будет так:

smb: \> 

Если ввести команду просмотра текущей локации ls, то мы увидим содержимое папки:

smb: \> ls
  .                                   D        0  Mon Mar 16 20:37:05 2026
  ..                                  D        0  Sat Feb 28 20:19:33 2026
  test-text.txt                       A        0  Mon Mar 16 20:36:59 2026
  test1                               D        0  Mon Mar 16 20:10:15 2026

		10596556 blocks of size 1024. 9392628 blocks available
smb: \> 

Отмечу сразу, что команды утилиты smbclient отличаются от стандартных в Bash/Zsh и т.д. Чтобы вызвать короткую справку о командах, пишем help:

smb: \> help
?              allinfo        altname        archive        backup         
blocksize      cancel         case_sensitive cd             chmod          
chown          close          del            deltree        dir            
du             echo           exit           get            getfacl        
geteas         hardlink       help           history        iosize         
lcd            link           lock           lowercase      ls             
l              mask           md             mget           mkdir          
more           mput           newer          notify         open           
posix          posix_encrypt  posix_open     posix_mkdir    posix_rmdir    
posix_unlink   posix_whoami   print          prompt         put            
pwd            q              queue          quit           readlink       
rd             recurse        reget          rename         reput          
rm             rmdir          showacls       setea          setmode        
scopy          stat           symlink        tar            tarmode        
timeout        translate      unlock         volume         vuid           
wdel           logon          listconnect    showconnect    tcon           
tdis           tid            utimes         logoff         ..             
!     

Есть неплохой материал по командам smbclient, если есть неукротимое желание работать с файлами из терминала.

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

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

Домашний NAS: Mark 0.1.0
Домашний NAS: Mark 0.1.0

(Без)башенный сервер

Однако дома нашелся еще один хард, поэтому стало очевидно, что нужно всё-таки заказать корпус Mini-Tower (навскидку самый оптимальный вариант), чтобы и блок питания разместить, и всё остальное туда уложить.

Корпус Mini-Tower
Корпус Mini-Tower

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

Домашний NAS: Mark 0.2.0
Домашний NAS: Mark 0.2.0

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

Пришлось думать "с запасом", потому что на тот момент я еще не знал, как буду подключать второй хард. Поэтому заказал и установил стандартный блок питания на 750 Вт, который вообще непонятно, как подключать к одноплатнику. Пришлось разбираться в этом бесконечном пучке проводов и коннекторов.

Пучок коннекторов
Пучок коннекторов

А разбираться пришлось потому, что если просто так взять и подключить блок питания в розетку и включить тумблер питания, то... питания на кабелях не будет! Поэтому первым делом берем 24-контактный разъём, скрепку и соединяем контакт PS_ON (16) с соседней линией COM (17). И вуаля - питание присутствует на всех кабелях.

Затем разбираемся с одноплатником. По спецификации он запитывается от 12В. Смотрим на схему (Пучок коннекторов) и тыкаем пальцем в molex-коннектор (второй слева), в котором есть линиии для 5В (контакт 1) и 12В (контакт 4). Но на нашем одноплатнике стоит разъём питания DC, а значит придется наше соединение как-то заколхозить: купить molex-разветвитель (чтобы не издеваться над встроенным в блок питания кабелем) и соединить его с кабелями питания DC.

Для тех кто не в курсе:
У DC-разъёмов линия GND - это внешний контакт, питание идет по внутреннему

Molex-разветвитель и кабели питания DC
Molex-разветвитель и кабели питания DC

Теперь разбираемся с проводами. У Molex-разветвителя отрезаем один разъём и припаиваем кабели питания так, чтобы один давал 12В, а второй - 5В, места пайки закрываем термоусадкой.

Спайка molex-разветвителя и кабелей питания
Спайка molex-разветвителя и кабелей питания

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

Домашний NAS: Mark 0.3.0
Домашний NAS: Mark 0.3.0

Больше дисков - больше проблем

Теперь наконец-то добрался до жестких дисков. Это оказалось то еще приключение, потому что изначально я думал в сторону каких-то плат-расширений на подобии Penta SATA HAT.

Внешний вид SATA-расширения
Внешний вид SATA-расширения

На сайте производителя указана полная совместимость с моделями:

  1. Raspberry Pi 5 (Radxa ROCK 5C)

  2. Radxa ROCK 5A

  3. Radxa ROCK 3C

  4. Radxa ROCK 4A / 4B / 4A+ / 4B+ / 4SE / 3A

Ну и, естественно, ни слова про NanoPC-T4. Так что нужно искать что-то другое. Наверное пару недель я точно был сконцентрирован именно на таких встриваемых решениях, потому что мне казалось, что готовых устройств для таких целей почему-то нет. Как же было приятно узнать, что я ошибался.

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

Варианты различных докстанций на маркетплейсах
Варианты различных докстанций на маркетплейсах

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

Док-станция после распаковки
Док-станция после распаковки

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

Снова берёмся за питание. У докстанции присутствуют два разъёма:

  • USB 3.0 для подключения к ПК

  • Разъём Kycon 4pin для 12-вольтного питания

Согласно задумке, запитываться нужно от внутреннего источника питания, поэтому снова придется колхозить molex-разветвитель: к паре 12В - GND припаять разъём Kycon. Но здесь нужно быть аккуратным, так как у одного и того же разъёма может быть разная полярность:

Варианты полярности Kycon-разъёма: слева - горизонтальная распиновка, справа - вертикальная
Варианты полярности Kycon-разъёма: слева - горизонтальная распиновка, справа - вертикальная

Изначально я заказал кабель с горизонтальной распиновкой, но после обнаружения другого варианта раписновки пришлось идти за мультиметром и проверять, как обстоят дела на самом деле. Эмпирически выяснилось, что у докстанции она вертикальная, поэтому пришлось заказать другой Kycon-кабель с соответствующей распиновкой.

После получения кабеля, снова беремся колхозить наш molex-разветвитель, к 12-вольтной линии которого припаиваем Kycon-кабель.

Слева - итоговый вариант распайки molex-разветвителя, справа - схема расположения разъёмов питания
Слева - итоговый вариант распайки molex-разветвителя, справа - схема расположения разъёмов питания

Далее подсоединям все компоненты к нашему силовому кабелю и вуяля: одноплатник и докстанция запитаны от внутреннего источника питания и аккуратно расположены внутри корпуса:

Впихиваем невпихуемое в корпус домашнего NAS Mark 0.4.0
Впихиваем невпихуемое в корпус домашнего NAS Mark 0.4.0

После подключения дисков к одноплатнику смотрим, что произошло в системе с помощью dmesg:

$ sudo dmesg

[ 1938.453154] scsi 0:0:0:0: Direct-Access     External USB3.0 DISK00    0103 PQ: 0 ANSI: 6
[ 1938.453621] scsi 0:0:0:1: Direct-Access     External USB3.0 DISK01    0103 PQ: 0 ANSI: 6
[ 1938.456445] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[ 1938.456826] sd 0:0:0:0: [sda] Write Protect is off
[ 1938.456840] sd 0:0:0:0: [sda] Mode Sense: 2b 00 00 00
[ 1938.457165] sd 0:0:0:0: [sda] No Caching mode page found
[ 1938.457285] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1938.459085] sd 0:0:0:1: [sdb] 500118192 512-byte logical blocks: (256 GB/238 GiB)
[ 1938.459615] sd 0:0:0:1: [sdb] Write Protect is off
[ 1938.459639] sd 0:0:0:1: [sdb] Mode Sense: 2b 00 00 00
[ 1938.460135] sd 0:0:0:1: [sdb] No Caching mode page found
[ 1938.460152] sd 0:0:0:1: [sdb] Assuming drive cache: write through
[ 1938.484603] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 1938.484812] sd 0:0:0:1: Attached scsi generic sg1 type 0
[ 1938.570609]  sda: sda1
[ 1938.579943]  sdb: sdb1
[ 1938.581575] sd 0:0:0:0: [sda] Attached SCSI disk
[ 1938.583328] sd 0:0:0:1: [sdb] Attached SCSI disk

Особенно обращаем внимание на строчки следующее.
То есть система помимо обнаружения и подключения двух дисков (строки 3-4):

[ 1938.453154] scsi 0:0:0:0: Direct-Access     External USB3.0 DISK00    0103 PQ: 0 ANSI: 6
[ 1938.453621] scsi 0:0:0:1: Direct-Access     External USB3.0 DISK01    0103 PQ: 0 ANSI: 6

автоматически их примонтировала (строки 17-18):

[ 1938.570609]  sda: sda1
[ 1938.579943]  sdb: sdb1

Проверим это через утилиту lsblk:

$ sudo lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda            8:0    0 465.8G  0 disk 
`-sda1         8:1    0 465.8G  0 part /media/pi/AD EXT
sdb            8:16   0 238.5G  0 disk 
`-sdb1         8:17   0 238.5G  0 part /media/pi/SSD

То есть дисковое устройство sda было автоматически примонтировано к папке /media/pi/TOSHIBA EXT. А устройство sdb - к папке /media/pi/SSD. Как правило автоматическое монтирование присуще полноценным ОС типа Debian/Ubuntu и т.д., но при условии, что это распространенные устройства. Что-то более менее кастомизированное придется монтировать вручную.

Окей, ничего вручную монтировать нужно, осталось только донастроить конфигурацию в Samba. Дописываем в конец файла smb.conf следующие блоки:

[shared_toshiba]
	comment = Toshiba External SATA Disk
	path = "/media/pi/TOSHIBA EXT"
	read only = no
    guest ok = no
    writable = yes
    admin users = test-user

[shared_ssd]
    comment = Toshiba External SATA Disk
    path = /media/pi/SSD
    read only = no
    guest ok = no
    writable = yes
    admin users = test-user

И наконец перезапускаем Samba:

sudo systemctl daemon-reload
sudo systemctl restart smbd

Дружим физические бэк и фронт

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

  1. Открутить болты и снять боковую панель корпуса

  2. Отодвинуть закрывающие одноплатник и нависающие на докстанцию провода

  3. Нажать на кнопку запуска на одноплатнике

  4. Вернуть провода в исходное положение

  5. Закрыть крышку, закрутить болты

Выглядит (и не только) всё это так себе. Сделаем запуск сервера с одной кнопки. Для начала рассмотрим принципиальную схему от производителя. Там кнопка питания - это фактически разрыв линии. По такому же принципу работает кнопка питания на лицевой панели корпуса системного блока:

Кнопка питания на схеме слева и на физически на плате справа
Кнопка питания на схеме слева и на физически на плате справа

Проверим на всякий случай тестером при выключенном питании нажатие кнопки. Сигнал о контакте при нажатии кнопки дает подтверждение, что всё так и есть. Поэтому делаем следующее: впаиваем в это место два провода с ответной частью разъёма для соединения с кнопкой питания:

На изображении слева после пайки, конечно же, флюс был убран =)
На изображении слева после пайки, конечно же, флюс был убран =)

После установки подключаем провода к кнопке на передней панели. Теперь с конструкцией можно успокоиться. Теперь это похоже на обычный ПК, который запускается с одной кнопки

Домашний NAS, замаскированный под обычный ПК
Домашний NAS, замаскированный под обычный ПК

Настраиваем медиа-сервер (наконец-то)

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

К тому же наличие личной жизни тоже накладывает отпечаток: пока дойдут руки до этого пет-проекта, пройдет пара месяцев. Ну да ладно...

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

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

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

И так, заходим в раздел Загрузки на официальном сайте и устанавливаем по инструкции Debian and Ubuntu в разделе Install Instructions. То есть выполняем команду ниже и ждем окончания установки

curl -s https://repo.jellyfin.org/install-debuntu.sh | sudo bash

По окончании установки в самом конце в выводе терминала будет следующее:

● jellyfin.service - Jellyfin Media Server
     Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/jellyfin.service.d
             └─jellyfin.service.conf
     Active: active (running) since Tue 2026-03-17 16:03:12 MSK; 16s ago
   Main PID: 42618 (jellyfin)
      Tasks: 19 (limit: 4571)
     Memory: 89.8M
        CPU: 15.643s
     CGroup: /system.slice/jellyfin.service
             └─42618 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg

Mar 17 16:03:25 NanoPC-T4 jellyfin[42618]: [16:03:25] [INF] There are 0 migrations for stage PreInitialisation.
Mar 17 16:03:25 NanoPC-T4 jellyfin[42618]: [16:03:25] [INF] Setting cache path: /var/cache/jellyfin
Mar 17 16:03:25 NanoPC-T4 jellyfin[42618]: [16:03:25] [INF] Loading assemblies
Mar 17 16:03:26 NanoPC-T4 jellyfin[42618]: [16:03:26] [INF] Defined LAN subnets: ["127.0.0.1/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
Mar 17 16:03:26 NanoPC-T4 jellyfin[42618]: [16:03:26] [INF] Defined LAN exclusions: []
Mar 17 16:03:26 NanoPC-T4 jellyfin[42618]: [16:03:26] [INF] Used LAN subnets: ["127.0.0.1/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
Mar 17 16:03:26 NanoPC-T4 jellyfin[42618]: [16:03:26] [INF] Filtered interface addresses: ["127.0.0.1", "192.168.0.185"]
Mar 17 16:03:26 NanoPC-T4 jellyfin[42618]: [16:03:26] [INF] Bind Addresses ["0.0.0.0"]
Mar 17 16:03:26 NanoPC-T4 jellyfin[42618]: [16:03:26] [INF] Remote IP filter is Allowlist
Mar 17 16:03:26 NanoPC-T4 jellyfin[42618]: [16:03:26] [INF] Filtered subnets: []
-------------------------------------------------------------------------------

You should see the service as 'active (running)' above. If not, use https://jellyfin.org/contact to find us for troubleshooting.

You can access your new instance now at http://192.168.0.185:8096 in your web browser to finish setting up Jellyfin.

Thank you for installing Jellyfin, and happy watching!

То есть всё установлено. В 27-й строке написано, по какому адресу Jellyfin доступен: http://192.168.0.185:8096

Можно на всякий случай проверить командой netstat:

$ sudo netstat -tunlp | grep jellyfin
tcp        0      0 0.0.0.0:8096            0.0.0.0:*               LISTEN      42618/jellyfin      
udp        0      0 0.0.0.0:7359            0.0.0.0:*                           42618/jellyfin

Открываем браузер, вводим туда адрес: http://192.168.0.185:8096 и видим окно настройки:

Жмем Next и создаем учетную запись администратора медиа-сервера

Жмем Next и проваливаемся в окно добавления медиа-библиотек:

Разрешения для сервера

Здесь возникла заминка, потому что при попытке найти примонтированные каталоги через интерфейс Jellyfin в папке /media/pi, приложение выдало пустоту:

Тогда делаем проверку, но сначала короткая справка:

Справка

В Linux есть возможность создания учетной записи пользователя для приложений. Например установили в систему, допустим, tcpdump. В файле /etc/passwd находим о нем информацию:

$ sudo cat /etc/passwd | grep tcpdump
tcpdump:x:109:117::/nonexistent:/usr/sbin/nologin

Информация о пользователе предоставляется в виде:

имя:пароль:UID:GID:комментарий:домашний_каталог:оболочка
│   │      │   │   │           │                └─ /usr/sbin/nologin
│   │      │   │   │           └─ /nonexistent
│   │      │   │   └─ пусто
│   │      │   └─ 117
│   │      └─ 109
│    └─ x (хеш пароля хранится в файле /etc/shadow)
└─ tcpdump

Та же самая учетная запись заведена и для Jellyfin:

$ sudo cat /etc/passwd | grep jellyfin
jellyfin:x:111:118:Jellyfin default user,,,:/var/lib/jellyfin:/bin/false

Значит мы можем работать над разрешениями Jellyfin, как для пользователя

Более подробно про разрешения можно почитать в этой статье.

Проверяем, доступна ли папка пользователям pi и jellyfin:

$ sudo -u pi ls /media/pi/SSD
'$RECYCLE.BIN'  'System Volume Information'   Video
$ sudo -u jellyfin ls /media/pi/SSD
ls: cannot access '/media/pi/SSD': Permission denied

Вероятнее всего проблема с разрешениями в самой папке /media/pi. Проверим её разрешения:

sudo ls -ld /media/pi
drwx---r-x 5 root root 4096 Mar 18 20:12 /media/pi

Видим, что для раздела группы всё убрано, проблема действительно в этом. Навесим на неё разрешение 755 и снова проверим:

sudo chmod 755 /media/pi/SSD
$ sudo -u jellyfin ls /media/pi/SSD
'$RECYCLE.BIN'  'System Volume Information'   Video

Ну и закрепляем результат проверкой на вебморде:

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

И теперь самое главное - у Jellyfin существуют приложения для мобильных устройств и smart TV. Так что смотреть контент очень удобно.

Экономика

Скажу сразу, что в таблице не будет стоимости одноплатника, так как он достался мне с рук за бесплатно в хорошем состоянии, но вообще NanoPC-T4 - одноплатник сам по себе не дешевый, так как в нем 6 ГБ оперативы. На мой взгляд по минималке достаточно 4ГБ (т.к. 2ГБ будет совсем мало), такие одноплатники стоят в среднем 5500-7000 рублей. Но это если у вас нет цели гонять 4К видео.

Чтобы не быть голословным, возьмем Orange Pi 4 Pro c 4GB RAM за 6514 рублей, то получится 17161 на сегодняшние деньги. Теперь давайте сравним с имеющимися на рынке NAS

Сервер

Примечание

Стоимость в рублях

Наш кустарный сервер

8 ядер, 4GB RAM, 4 диска

17161

Synology DS124

4 ядра, 1GB RAM, 1 диск

18936

Synology DS223

4 ядра, 2GB RAM, 2 диска

33018

В настоящее время (03.2026) всё, что дешевле 18 тысяч - это докстанции для HDD, которые нельзя назвать самостоятельными NAS-серверами, так как они требуют внешнего подключения к компьютеру для управления содержимым дисков.

Заключение

Внимательный читатель скажет:

Эй, ты же в начале статьи писал, что не хотел сильно возиться с самодельной конструкцией. А по итогу вышло обратное!

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

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

Буду рад ответить на вопросы =)

P.S. В процессе написания статьи стало понятно, что из этой истории было бы лучше сделать пошаговую инструкцию, как собрать такое "сокровище", без воды регистрации и смс. Если хотите, тогда голосуем!

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Делаем отдельную инструкцию?
56.67%Да34
43.33%Нет26
Проголосовали 60 пользователей. Воздержались 7 пользователей.