Top.Mail.Ru
Домашний NAS на Debian: S3-хранилище и DLNA-сервер своими руками | Блог Serverflow Скачать
прайс-лист
Бесплатная
доставка по РФ
Скидка
за отзыв!
Distribution of
Server Components
8 (800) 222-70-01 Консультация IT-специалиста Сравнение

Домашний NAS на Debian: S3-хранилище и DLNA-сервер своими руками

~ 15 мин
2926
Средний
Гайды
Домашний NAS на Debian: S3-хранилище и DLNA-сервер своими руками

Введение

Если кто-то не знает, то NAS (Network Attached Storage) — это сетевое хранилище, ваш личный файловый сервер, доступный на всех устройствах в вашей локальной домашней сети. Сейчас на рынке можно найти множество готовых NAS-решений от известных брендов, а также целую россыпь специальных дистрибутивов для быстрого развертывания хранилища. Однако все эти подходы развертывания NAS имеют ряд не самых приятных нюансов: в первом случае мы покупаем “коробку”, и не всегда понятно, что у нее внутри и какие есть ограничения, а во втором случае дистрибутив часто бывает перегружен функциями, которые вам могут никогда не понадобиться: вам ведь нужно NAS-хранилище, а не жнец, чтец, и на дуде игрец? Так или иначе, все эти решения объединяет одно: под капотом у них в большинстве случаев — Linux. Так почему бы нам не взять чистый дистрибутив Debian и не построить на его основе свое собственное хранилище. Команда ServerFlow считает, что так может сделать каждый, поэтому в этой статье мы расскажем вам, как развернуть домашнее NAS-хранилище и правильно настроить его, чтобы злобные корпорации никогда не добрались до ваших личных данных.

План

Сегодня мы не будем вдаваться в подробности о том, что такое NAS, какие NAS бывают и какие файловые системы существуют — об этом мы рассказывали в отдельной статье. Наша задача — объяснить вам все тонкости развертывания NAS, и мы приступаем к ней незамедлительно. Вот какой фронт настроек нам предстоит проделать для достижения цифрового суверенитета:
  • SMB-сервер — для удобного доступа к файлам с Windows и macOS.
  • S3-хранилище (MinIO) — современное объектное хранилище.
  • Zeroconfig (Avahi) — для автоматического обнаружения нашего сервера в сети.
  • Торрент-клиент (Transmission) — здесь объяснения не нужны.
  • DLNA-сервер (MiniDLNA) — для просмотра медиаконтента на телевизоре и других устройствах.
  • Уведомления в Telegram — для получения данных о состоянии дисков.

Шаг 1: Подготовка и установка системы

Переходим от слов к действию и начинаем разбор первого шага — подготовки аппаратного обеспечения и установки Debian.

В нашем случае будет использоваться плата материнская плата Supermicro X10SDV. Почему наш острый глаз пал именно на нее? Все дело в наличии двух 10-гигабитных сетевых портов Ethernet — для коммерческого NAS этого может быть маловато, но под домашнее хранилище хватит с лихвой. Кроме того, эта плата также поддерживает интеграцию модулей оперативной памяти с ECC, что критически важно, если вы не хотите потерять все свои фотографии из папки “Геленджик 2007” из-за системного сбоя. 

Материнская плата Supermicro X10SDV
Материнская плата Supermicro X10SDV для развертывания NAS-хранилища.

В нашем хранилище установлено 64 ГБ RAM ECC, чего более чем достаточно для домашнего NAS. Об установки Debian говорить не будем — гайдов на эту тему в сети пруд пруди. После установки зайдите на сервер по SSH, узнайте IP-адрес, полученный по DHCP, через команду ip a, повысьте привилегии до суперпользователя через su -l, обновите список пакетов вводом apt update и, наконец, установите все необходимые нам пакеты командой apt install mdadm samba avahi-daemon transmission-daemon smartmontools minidlna.

Оперативная память с поддержкой ECC
Модули оперативной памяти с емкостью 32 ГБ и поддержкой ECC.

Шаг 2: Настройка дискового пространства (RAID 5)

NAS-хранилище с дисками RAID-уровней — это кружка с дыркой, поэтому следующим шагом станет настройка дискового пространства и создание RAID-массива. В нашей системе используется 4 диска, из которых мы соберем программный RAID 5 с помощью утилиты mdadm. Почему именно программный, а не аппаратный RAID? Так проще, надежнее и дешевле. Для начала проверим, видит ли система наши диски командой lsblk. В нашем случае используются диски с именами sdb, sdc, sdd и sde.

Перед созданием массива нужно удалить с дисков старую информацию о других RAID, если таковая имеется. Это делается следующей командой:

mdadm --zero-superblock --force /dev/sd{b,c,d,e}

Удалили? Отлично! Ой, забыли вас предупредить: эта команда полностью стирает все данные с дисковых накопителей! Убедитесь, что используете правильные имена дисков, чтобы не удалить важные файлы.

Если все указано верно, можно приступать к созданию RAID-массива. Введите эту команду:

mdadm --create --verbose /dev/md0 --level=5 --raid-devices=4 /dev/sd{b,c,d,e}

Затем система запросит подтверждение — нужно согласиться. Процесс создания (ресинхронизации) массива может занять весьма продолжительное время, но работать с ним можно уже сейчас. Помните, что во время перестройки массива диски могут сильно нагреться — заранее подготовьте жидкий азот или хотя бы проверьте работу системы охлаждения. 

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

echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

Процесс создания RAID-массива
Создание RAID-5 массива в системе на базе 4 дисков.

Отлично, с RAID закончили, поэтому переходим к развертыванию файловой системы. Мы будем использовать проверенную временем систему ext4, которая широко известна своей отказоустойчивостью. Введите команду mkfs.ext4 /dev/md0, чтобы создать ext4. Теперь настроим автоматическое монтирование нашего раздела при загрузке системы. Для этого создаем директорию для монтирования командой mkdir /mnt/storage. Затем узнаем UUID нашего нового раздела (использовать UUID корректнее, чем имена /dev/md0) командой blkid, скопируйте его и откройте файл /etc/fstab командой nano /etc/fstab. Добавьте в конец файла следующую строку, подставив свой UUID:

UUID="ffa7c082-7613-4dbc-ae62-3f5508652cf6" /mnt/storage ext4 defaults 0 0

Сохраните файл ( CTRL+O ) и выйдите ( CTRL+X ). Осталось только примонтировать все разделы, указанные в fstab, используя команду mount -a, и в конце проверить свободное место на дисках командой df -h. Если вы видите примонтированный раздел со свободным местом (в нашем случае 10 ТБ), значит, все сделано корректно.

Выполнение монтирования разделов файловой системы
Монтирование разделов файловой системы.

Шаг 3: Настройка файлового сервера (Samba)

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

mkdir /mnt/storage/smbshare
mkdir /mnt/storage/downloads
mkdir /mnt/storage/media

Теперь откроем конфигурационный файл Samba с помощью команды nano /etc/samba/smb.conf. Там вы увидите секцию [global], параметры которой должны выглядеть именно так:

workgroup = WORKGROUP
server role = standalone server
unix password sync = yes

В самый конец файла добавьте описание ваших общих папок. У нас это выглядит так: 

Папка [smbshare]:

path = /mnt/storage/smbshare
guest ok = no
writable = yes
browsable = yes

Папка [downloads]:

path = /mnt/storage/downloads
guest ok = no
writable = yes
browsable = yes

Папка [media]:

path = /mnt/storage/media
guest ok = no
writable = yes
browsable = yes

Настройка секции global
Настройка секции global в конфигурационном файле сервиса Samba.

Следующий шаг — создать пользователя для доступа. Важно учесть, что пользователя сначала нужно создать в самой файловой системе, и только потом задать ему пароль для Samba. Пользователь и пароль создаются так:

useradd ИМЯ ПОЛЬЗОВАТЕЛЯ -m -s /bin/bash
passwd ВАШ ПАРОЛЬ

После этого задайте Samba-пароль для созданного пользователя такой командой:

smbpasswd -a ИМЯ ПОЛЬЗОВАТЕЛЯ

Перезапускаем сервис Samba командой systemctl restart smbd и вуа-ля, все готово!

Теперь вы можете зайти с другого компьютера в вашей сети и увидите новые общие папки.

Общая папка файлового сервера
Общая папка, созданная с помощью сервиса Samba.

Шаг 4: Настройка S3-хранилища (MinIO)

Почти половина пути пройдена, но еще осталось несколько преград, одной из которых является настройка S3-хранилища, для чего мы рекомендуем использовать MinIO. MinIO — это популярный сервис объектного хранилища, совместимый с Amazon S3 API. Он идеально подходит для хранения бэкапов, медиафайлов и статики для веб-приложений. По сути, это ваше личное, безопасное и, что не менее важно, бесплатное облако для хранения данных. Приступаем к развертыванию: качаем актуальную версию пакета MinIO на официальном сайте проекта. Затем устанавливаем ее командой:

dpkg -i minio_20250907161309.0.0_amd64.deb

Для обеспечения безопасности запустите MinIO от имени специального пользователя: 

groupadd -r minio-user
useradd -M -r -g minio-user minio-user

Команда для скачивания MinIO на Debian
Команда для скачивания MinIO на Debian с официального сайта проекта. Источник: Min.io.

Теперь создадим директорию для данных S3 и дадим нашему пользователю права на нее через команды:

mkdir /mnt/storage/s3
chown -R minio-user:minio-user /mnt/storage/s3

Отлично, подготовка S3-хранилища завершена, но теперь нужно настроить его. Откройте параметры хранилища с помощью команды nano /etc/default/minio и приведите его к следующему виду, задав логин, пароль и путь к данным:

MINIO_VOLUMES="/mnt/storage/s3"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER="anton"
MINIO_ROOT_PASSWORD="mypasswd"

Затем запустите и добавьте сервис в автозагрузку командами:

systemctl start minio
systemctl enable minio

Теперь откройте браузер и зайдите по адресу http://<IP-адрес-сервера>:9001. Если все настроено верно, вы увидите веб-панель MinIO.

Панель управления MinIO
Панель управления хранилищем MinIO.

Шаг 5: Настройка торрент-клиента (Transmission)

Торрент-клиент очень удобно использовать для создания домашнего NAS, и у этого есть ряд весомых причин:
  • Автоматическое добавление торрент-файлов — клиент сканирует папку для скачивания и импортирует файлы с расширением .torrent напрямую
  • Настройка времени общего пользования — можно указать, сколько часов после завершения скачивания файл будет доступен для отдачи.
  • Можно выбрать ограничение скорости скачивания и выгрузки, а также доступен выбор пула портов bittorrent.
Чтобы настроить торрент-клиент, нужно создать необходимые директории для загрузок через команду:

mkdir -p /mnt/storage/downloads/{completed,incomplete,watch}

Самый важный шаг на этом этапе — выдать права. Сервис Transmission работает от имени пользователя debian-transmission, поэтому для выдачи прав вводим такие команды:

chown -R debian-transmission:debian-transmission /mnt/storage/downloads
chmod -R 777 /mnt/storage/downloads

Теперь отредактируйте файл настроек вводом команд:

systemctl stop transmission-daemon
nano /etc/transmission-daemon/settings.json

Обязательно остановите сервис перед редактированием, иначе ваши изменения будут перезаписаны!

После этого найдите и измените следующие строки:

"download-dir": "/mnt/storage/downloads/completed",
"incomplete-dir": "/mnt/storage/downloads/incomplete",
"incomplete-dir-enabled": true,
"rpc-authentication-required": true,
"rpc-password": "ВАШ_пароль",
"rpc-username": "anton",
"rpc-whitelist-enabled": false,
"watch-dir": "/mnt/storage/downloads/watch",
"watch-dir-enabled": true,

На этом все, сохраняем и запускаем сервис командой:

systemctl start transmission-daemon

Осталось только проверить! Зайдите в браузере по адресу http://<IP-адрес-NAS>:9091. Чтобы проверить автоматическую загрузку, скопируйте .torrent файл в сетевую папку downloads/watch.

Шаг 6: Настройка DLNA-сервера (MiniDLNA)

Мы почти у финиша! Предпоследний шаг — настроить DLNA-сервер, чтобы запускать скачанные кинчики на Smart-TV или смартфоне: 

В первую очередь создадим директории для медиаконтента:

mkdir -p /mnt/storage/media/{video,music,photos}

Затем нужно настроить права доступа. Сервис работает от имени пользователя minidlna, поэтому введите следующие команды:

chown -R minidlna:minidlna /mnt/storage/media
chmod -R 777 /mnt/storage/media

Теперь создайте отдельную папку для базы данных и логов и снова настройте права:

mkdir -p /var/cache/minidlna /var/log/minidlna
chown -R minidlna:minidlna /var/cache/minidlna /var/log/minidlna

Переходим к правке конфигурационного файла. Для этого введите команду nano /etc/minidlna.conf.

Внесите следующие изменения в конфигурацию, внеся комментарии и изменения в следующие строки для указания пути к папкам контента:

media_dir=V,/mnt/storage/media/video
media_dir=A,/mnt/storage/media/music
media_dir=P,/mnt/storage/media/photos

Для создания папки хранения базы данных введите эту команду:

db_dir=/var/cache/minidlna

Нужна еще одна папка для логов:

log_dir=/var/log/minidlna

Теперь установите имя, под которым сервер будет виден в сети:

friendly_name=MyDebianNAS

После этого включите автоматическое обнаружение новых файлов командой:

inotify=yes

В конце сохраните файл и перезапустите сервис:

systemctl restart minidlna

Для проверки закиньте пару фильмов в папку media/video. На вашем Smart TV или смартфоне в разделе “Медиасерверы” должен появиться MyDebianNAS.

Шаг 7: Настройка уведомлений о состоянии дисков в Telegram

Чтобы не допустить ситуации, когда ваши диски неожиданно выйдут из строя, стоит подключить Telegram-уведомления о состоянии дисков через бота. Для начала, такого бота нужно создать:
  • Найдите в Telegram бота @BotFather и отправьте ему команду /newbot.
  • Придумайте имя (например, MyNAS Monitor Bot) и юзернейм (например, mynas_alert_bot).
  • BotFather пришлёт вам токен вида 1234567890:ABC....XYZ. Сохраните его.
  • Найдите своего бота в поиске и отправьте ему любое сообщение (например, /start).
  • Чтобы узнать ваш CHAT_ID, откройте в браузере ссылку, подставив свой токен: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates. В ответе найдите "chat":{"id":<ВАШ_ID>}. Это и есть ваш ID.
Теперь создайте скрипт для отправки уведомлений:

Bash
nano /usr/local/bin/smart-telegram.sh

Вставьте в него следующий код, заменив YOUR_BOT_TOKEN и YOUR_CHAT_ID на ваши данные:

#!/bin/bash
# --- НАСТРОЙКИ ---
TOKEN="YOUR_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
# -----------------

Затем напишите сообщение для уведомления:

MESSAGE="Внимание! Обнаружена проблема с диском на NAS!

\`\`\`
$(/usr/sbin/smartctl -H $SMARTD_DEVICE)

$SMARTD_MESSAGE
\`\`\`
"

Далее отправляем уведомление через curl:

/usr/bin/curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="$MESSAGE" \
-d parse_mode="Markdown" > /dev/null

Если уведомление пришло, сохраните скрипт и сделайте его исполняемым командой:

chmod +x /usr/local/bin/smart-telegram.sh

Теперь настройте smartd для вызова скрипта. Для этого откройте файл командой /etc/smartd.conf, найдите строку DEVICESCAN и приведите её к такому виду (или добавьте, если ее нет): DEVICESCAN -a -H -m root -M exec /usr/local/bin/smart-telegram.sh.
  • -a — отслеживать все атрибуты SMART.
  • -H — следить за общим состоянием здоровья диска.
  • -M exec — выполнять внешнюю команду.
В конце перезапускаем сервис smartmontools командой:

systemctl restart smartmontools

На этом все — если с одним из дисков возникнут проблемы, вы получите уведомление в Telegram.

Выводы

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

Комментарии 3

Написать комментарий
Сергей
Спасибо за статью. Все изложено доступно и хорошо. Одно замечание при настройке Transmission в файле /etc/transmission-daemon/settings.json в самом конце после записи "watch-dir-enabled": true , необходимо убрать запятую. Исправте пожалуйста.
Serverflow
Благодарим за отзыв и за замечание! Проверим корректность команды и, если мы действительно допустили ошибку, внесем изменения!
Вадим
Не очень понятна цель настройки s3 minio. Его использование предполагает работу через сеть интернет? Есть же самба для шары файлов в сети.
Serverflow
Передали Ваш вопрос автору гайда, как получим ответ ответим на почту!
Андрей
Несколько вопросов. 1) Почему не raidZ? 2) Почему не ZFS? 3) Для дома и семьи можно поставить OpenMediaVault, почему вы решили сами собирать?
Serverflow
В целом ZFS была бы в тему, но наш специалист решил остаться на EXT4 для удобства. Причина простая: EXT4 вообще не требует ничего от железа, а вот ZFS требует. Из этого вытекает ответ на первый вопрос: Raid-Z это для ZFS, а не EXT4. Касательно Вашего третьего вопроса: OpenMediaVault противоречит концепции. Мы хотели минималистичный NAS с полной настройкой своими руками. Будут еще вопросы, можете смело писать, постараемся ответить :)
Написать отзыв
До 6 фото, размером до 12Мб каждое
Мы получили ваш отзыв!

Он появится на сайте после модерации.

Написать комментарий

Комментарий появится на сайте после предварительной модерации

До 6 фото, размером до 12Мб каждое
Мы получили ваш отзыв!

Он появится на сайте после модерации.

Мы свяжемся с вами утром

График работы: Пн-Пт 10:00-18:30 (по МСК)

Обработаем вашу заявку
в ближайший рабочий день

График работы: Пн-Пт 10:00-18:30 (по МСК)