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

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

На кой черт это надо?

Так сложились обстоятельства, что мне удалось скоммуниздить старенький ПК, да и чтобы он просто не пылился, так как такое старье продавать за 5-7 тысяч (цена в моем регионе за подобную конфигурацию) мне стыдно, а получать за него 3 тысячи — ну такое. Я решил, сделаю дома небольшую библиотеку фильмов, музыки, да и у жены очень много фотографий, которые её очень дороги. Задумка была следующей.

Некий медиа сервер, который будет транслировать медиаконтент на телевизор.

Некое локальное хранилище для файлов, порой приходится с флешками побегать, а то жесткого диска на 500ГБ не хватает.

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

Цели поставлены, осталось их реализовать. Вряд ли опытные пользователи найдут здесь что-то полезное для себя, наверное, только начинающие пользователи Linux, так как все действия очень простые в исполнении.

Установка Linux

То, как поставить линукс, я думаю, не стоит говорить. Я просто опишу что я сделал после установки. Во-первых, пока компьютер был возле меня, я настроил статический адрес в файле /etc/netplan/00-installer-config.yaml

Думаю, тут вроде понятно, что где что и как. Конечно, правильнее было бы привязать ip-адрес через роутер, но у меня роутер Xiaomi, и там все в иероглифах. Я просто сделал статический ip-адрес на компьютере. После этого я его отнес в подвал и подключил к роутеру и сел за рабочую машину. Теперь стоит создать пару ssh-ключей для удобства

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

Теперь настрою файл

И теперь для подключения достаточно написать ssh home ,и последний момент, которой наверное не стоит делать, это убрать ввод пароля при использовании sudo. Для этого достаточно добавить NOPASSWD в файл /etc/sudoerc что бы вышло так

Установка transmission-daemon

И так, начну с торрент-клиента transmiss-daemon.

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

Если править файл конфигурации /etc/transmission-daemon/settings.json в тот момент как демон работает, изменения не сохранятся. И так мне надо поправить несколько строк, но для начала создам папки куда будет все качаться. Я создам все папки для медиа контента в /media и будет /media/torrent/downloads для загружаемых файлов и /media/torrent/complete для файлов которые уже загрузились

сразу сменю владельца на папки для загрузки на debian-transmission

Теперь можно приступать к настройке transmission. Как уже говорилось, все настройки хранятся в файле /etc/transmission-daemon/settings.json . Нам необходимо поправить несколько строк, а именно

«download-dir»: «/var/lib/transmission-daemon/downloads» — указываем папку куда будут помещаться загруженные файлы, у меня в /media/torrent/complete Лучше указывать полный путь

«incomplete-dir»: «/var/lib/transmission-daemon/Downloads» — указываем папку в которой будут храниться не докачавшиеся файлы, у меня /media/torrent/downloads

«incomplete-dir-enabled»: false — указываем true что бы хранить скачавшиеся файлы отдельно

«rpc-authentication-required»: true — меняем на false для отключения авторизации по логину и паролю, это пожеланию

«rpc-host-whitelist-enabled»: true — меняем на false для отключения использования «белого списка ip-адресов»

«rpc-username»: «transmission» — указываем логин для авторизации

«rpc-whitelist-enabled»: true — опять-таки отключаем авторизацию по разрешенным ip-адресам меняя true на false соответственно

И запуск transmission

и захожу в web-панель transmission по ip-адресу и порту 9091, у меня это 192.168.31.5:9091

web-интерфейс transmission

transmission почти готов теперь настрою проксирование через NGINX

Установка NGINX и настройка проксирования

Я поставил весь nginx, но в теории достаточно и самого пакета nginx

После установки проверю, работает ли веб сервер зайдя на ip-адрес машины

Приветственное сообщение от Nginx

Теперь выполню настройку nginx. Все конфигурационные файлы находятся в /etc/nginx/* . Для начала я удалю все лишнее из файла /etc/nginx/nginx.conf и приведу его к такому виду

И создам файл /etc/nginx/sites-enabled/home.conf с базовым содержимым

Немного объясню файл. listen 80 указываем на каком порту будет слушаться сайт, root /var/wwww/home я создал папку от имени root и поместил туда простую страницу html взятую из интернета для проверки как будет все работать.

html страница скачанная из интернета

Так же я добавил строку 192.168.31.5 home.ru в рабочей машине в файл /etc/hosts для того что бы сайт мог открываться в браузере с рабочей машины по адресу home.ru что и указал в файле home.conf server_name home.ru

Настройка проксирования transmission-daemon через nginx

NGINX вообще мощная фигня, и для того что бы открывать web-панель transmisson через http://home.ru/transmission/ его будет более чем достаточно. Все правки я буду делать в файле /etc/nginx/sites-enabled/home.conf для начала добавлю новый location и в нём укажу что бы он проксировал запрос с home.ru/transmission/ на 127.0.0.1:9091

блок location для transmission

Перенаправление пошло, но вот только transmission жалуется на отсутствие хедера X-Transmission-Id . Немного поковырявши хедеры, так же добавив 2 блока location мне удалось завести transmission. Вот полный файл конфигурации

Читайте также:  Зажимы для рихтовки авто своими руками

полный файл home.conf

Написание скрипта

Так сложилось, что у меня телевизор Samsung толком не воспроизводит видео в формате avi, а если и воспроизводит то как то криво. Нельзя перемотать, длительность фильма такая — что люди стока не живут, да и самое неприятное заключается в том что посреди фильма он может просто оборваться. А вот формат mkv он ест нормально. И поэтому я решил написать небольшой скрипт на bash который будет запускать сам transmission-daemon после загрузки файла. Немного подумав над логикой и посмотрев как качаются разные файлы, выстроил себе цепочку действий. Во-первых надо понять, скачалась папка или файл. Если папка, то создать такую же папку в директории для DNLA сервера, если файл, то пропускаем. Возвращаемся к папке, теперь смотрим на содержимое папки, если файлы avi то конвертируем их через ffmpeg в конечную папку, если в папке файлы mkv то просто перемещаю их, но если там то-то другое, просто кидаю в /tmp для дальнейшего анализа. Теперь возвращаемся к началу скрипта, если же это не папка, а файл то, смотрим на формат и при необходимости конвертируем. Вроде ничего сложного, вот сам скрипт

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

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

и меняю владельца

После останавливаю transmission-daemon

и меняю 2 параметра в /etc/transmission-daemon/setings.json

done-enabled перевожу на true, то-есть включаю активацию скрипта по окончанию загрузки, а done-file указываю полный путь к файлу, можно указать только название файла если файл лежит в папке transmission, но мне легче указать полный путь.

Установка медиа сервера

В качестве медиа сервера DNLA я выбрал minidlna. Ставится из репозитория ubuntu, прост в настройке.

Файл конфигурации находится /etc/minidlna.conf , я в нем внес несколько правок, а именно, указал где находятся медиаконтент

Указал где хранить базу данных файлов minidlna

Указал куда писать логи

и указал имя сервера

и в конце перезапустил сервер

И получил результат

Напоследок

Писать о том как я настроил временно samba не буду. Есть очень много мануалов в котором все описано куда лучше, чем смогу описать я, но хочу поделится несколькими мыслями на будущие) Целый комп для этого излишнее, тем более у меня есть роутер с прошивкой OpenWRT на котором можно все это реализовать, но жена мне раз дала идею сделать мониторинг цен. Я такое уже делал, написал небольшой скрипт на bash который парсил страницу, брал оттуда название товара, картинку и цену. Скрипт запускался через cron. Идея неплохая, но для каждого сайта необходимо делать свой шаблон. И скорее всего сайты по типу Wildberries при авторизации будут показывать другую цену. Идею думаю реализовать на C++, которые будут брать ссылку для просмотра из БД и смотреть на цену. Если цена записанная в БД будет больше, то отправлять сообщение в том же телеграме о том что на такой-то товар ценна изменилась. Да и для разных экспериментов и обучения можно поднимать сервере виртуальную машину и её ковырять. Так же есть идея реализовать некую запись телепередач. У нас нет обычного телевидения, есть всего 1 канал XD, и жена смотрит несколько передач. Думаю просто настроить запись их в тот же медиа сервер. Но все это планы, желание на исполнения не много.

Я впервые пишу такой длинный текст, и вообще в первые куда-то пишу по мимо личных сообщений. Не судите строго.

Источник

Собираем из старого сервера домашний NAS с медиаплеером на XPEnology

Содержание статьи

Не фонтан, конечно, — всего четыре SATA и нет поддержки RAID, но зато малое энергопотребление. Цену на сегодняшний день определить не удалось, но когда-то она стоила 220 долларов. В идеале бы, конечно, лучше иметь мать с возможностью подключения шести дисков и поддержкой RAID. Но такое удовольствие обойдется в некислую сумму. Попробуем прикинуть из того, что есть на рынке б/у. Предложили комплект на Intel 7600 + мать Asus можно приобрести за 1500–2000 рублей (напомню, что это б/у).

До замены корпуса система состояла из Ubuntu-сервера, шары на ней — и, собственно, все. Внутри было два диска по 500 Гбайт. Сейчас приобретен новый корпус, установлена еще пара жестких дисков. Итого три HDD по 500 Гбайт и один на 1,5 Гбайт.

Хотелки

Из задач, которые должен решать медиасервер, выделим следующие:

  • само собой, Samba, раздача медиаконтента по сети, об этом чуть ниже;
  • виртуализация различного уровня: пара виртуальных машин, внутри может быть 1С-сервер Linux, Docker-контейнеры;
  • чтобы не надо было настраивать каждый домашний узел для сервисов, маленький DNS с зоной что-нибудь.local.
Читайте также:  Бутоньерка для свидетельницы своими руками

Требования к аппаратной части:

  • бесшумность;
  • удобная установка/замена HDD;
  • компактность.

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

Пара фраз о корпусе

Производитель и модель: Raijintek Metis, с окном
Материал: алюминий, сталь
Габариты: 190 x 254 x 277 мм (Ш x В x Г)
Форм-фактор: Mini-ITX
Отсеки накопителей: 1 x 2,5/3,5″ (внутри), 2 x 2,5″ (внутри)
Вентиляторы: 1 x 120 мм (сзади, предустановлен)
Вес: около 2,8 кг

Классный дизайн и цвет отлично смотрятся практически везде, а стоимость весьма демократична. К слову, мне такой корпус обошелся всего в 4000 рублей. Приобретался на Avito, доставка почтой. Подробнее с корпусом можно познакомиться на сайте производителя. Чуть не забыл про память! На момент написания статьи было установлено 2 Гбайт (две планки по 1 Гбайт). Сейчас уже заказываю две плашки по 2 Гбайт.

Реализация программной части

Итак, что самое главное хочется от сервера? Чтобы был легко масштабируемый, в ногу со временем, приятый и удобный в использовании/администрировании. Желательно привлекательная веб-морда.

  • Вариант 1: поставить Ubuntu Server c панелью управления Ajenty 2 и все необходимое доставлять руками.
  • Вариант 2: поставить OpenMediaVault. Морда в наличии, много плагинов/расширений для увеличения функциональности, в основе лежит Debian, соответственно, всегда есть возможность доставить или допилить руками.
  • Вариант 3: поставить FreeNAS. Чуть меньше плюшек, но можно доставить все руками, правда — чуть сложней. Базируется на FreeBSD.
  • Вариант 4: поставить XPEnology. Огромное количество плюшек, репозиториев с дополнениями. Поддержка виртуальных машин и Docker.

После долгих мучений выбор пал на четвертый вариант. На нем и будем поднимать домашний сервер далее. Почему именно так? Первый вариант хорош сам по себе, но в то же время хочется минимум усилий и максимум возможностей без дополнительного рукоприкладства. К тому же Ajenty не дает гибко обращаться к серверу, так и хочется залезть в консоль и сделать все руками оттуда. А потом зайти в панель и просто любоваться :). Среди оставшихся вариантов победу одержал XPEnology. Предоставляет максимум сервисов при минимуме настроек.

Взлетаем

Итак, перво-наперво идем на сайт xpenology.me в раздел downloads и скачиваем набор для развертывания.

XPEnoboot — это образ загрузочного диска для установки и загрузки/перезагрузки сервера.

DSM — сама система. Synology Assistant — опционально, программа обнаруживает серверы XPEnology/Synology, установленные или готовые к установке узлы. Я устанавливал через веб-интерфейс — как говорится, на вкус и цвет все фломастеры разные.

ISO-образ нужно распаковать на флешку и использовать при каждом перезапуске сервера, что не совсем удобно. Либо подарить флешку серверу и сделать ее приоритетной при загрузке. Есть второй путь. В предыдущих выпусках журнала «Хакер» я писал про организацию PXE-сервера с различными вариантами загрузки. Если есть такой сервис, то можно с легкостью отдать это ему. За загрузку в XPEnology отвечают два файла (как и в любом линукс-дистрибутиве): zImage и rd.gz. Располагаем их в директории PXE-сервера, в меню дописываем:

Из меню понятно расположение файлов в подкаталоге xpenology, относительно корня TFTP-сервера. Информация была найдена на сайте xpenology.com. Рекомендую ознакомиться.

Первый вариант не сработал. Пробую по-другому. Распаковываю ISO, беру оттуда файл меню isolinux.cfg, копирую менюшку в свое меню PXE, с поправкой пути до файла ядра zImage. Копирую zImage на PXE-сервер. Вот этот вариант сработал как надо, после начала установки даже pat-файл операционной системы не потребовался. Сервер сам скачал его с сайта synology.com, что не может не улыбнуть :). В процессе установки сервер попросит ввести учетные данные администратора. После установки получаем полностью готовый к работе сервер Synology на обычном железе. Тем, кто не знаком с этой ОС, очень рекомендую! Огромное сообщество. Как результат — большое количество репозиториев, которые в разы расширяют штатную функциональность.

Рекомендую следующие списки репозиториев:

На всякий случай ко всему нужно иметь рабочую систему Ubuntu Server. Поэтому первым делом ставлю Docker и добавляю контейнер Ubuntu.

Меню с приложениями XPEnology

Xakep #215. Второй фактор

Если нужна виртуализация, в XPEnology есть VirtualBox. Кто хочет Archipel, есть Docker (ссылка для любителей CentOS). Понятно, что внутри хоть KVM, хоть еще что можно крутить. У меня таким образом в Ubuntu-контейнере крутится веб-клиент uTorrent.

Вот так легко и непринужденно управляем контейнерами в XPEnology.

Скриншот работы Docker-контейнера в XPEnology

Из центра пакетов следом за «Докером» рекомендую подборку:

  • DNS Server (для настройки домашней зоны, опционально);
  • Plex Media Server;
  • DLNA Server (опционально, в Plex’е уже есть);
  • Download Station — менеджер закачек на самом сервере;
  • MariaDB;
  • PHP PEAR;
  • Midnight Commander;
  • phpMyAdmin;
  • Transmission;
  • VirtualBox;
  • Tor;
  • Python;
  • антивирус на выбор.

Настройка DNS

Открываем DNS Server во вкладке «Зоны», сразу жмем «Создать», «Основная зона», вводим имя зоны. Далее двойным кликом открываем и вносим необходимые записи.

Пример настройки DNS в XPEnology

Далее открываем вторую вкладку «Разрешение». Включаем службы разрешения. Включаем серверы пересылки и вводим адреса вышестоящих DNS-серверов, к которым следует обращаться, если в своей базе данные отсутствуют. На очередной вкладке можно посмотреть журнал, а на следующей — создать ключи. Далее вкладка «Представление». Переходим и создаем запись. Приоритет будет выставляться в порядке создания. Далее вводим имя представления, есть опция ограничения IP-служб. Для настройки отдельных серверов пересылки переходим во вкладку «Выберите зону» и выбираем нужные зоны для этой записи. В последней вкладке, «Настройки», можно настроить размер журнала, TTL кеша, кеш, число рекурсивных клиентов и максимальное число TCP-подключений.

Читайте также:  Домик для морских свинок сделать своими руками

Следующим шагом нужно автоматизировать скачивание сериалов с отслеживанием новых версий и последующей передачей медиа Plex-серверу. Для этого нужен веб-сервер, который уже предусмотрен в DSM, торрент-качалка Transmission с веб-интерфейсом: того, что сериалы мониторятся и скачиваются автоматически, точно окажется мало — обязательно возникнет необходимость скачать еще какой-нибудь торрент. И собственно сам TorrentMonitor, написанный на PHP. У этого приложения очень хороший набор функций при минимальной нагрузке на сервер. TorrentMonitor позволяет мониторить не только сериалы на популярных трекерах, но и раздачи с таких сервисов, как rutor.is или rutracker.org. У проекта есть живой сайт и форум, на котором можно довольно быстро получить консультацию, если что-то пошло не так.

Хочется выразить огромную благодарность разработчику. В общем, очень полезная штуковина. Рекомендую!

Ради самообразования поставим к Transmission еще uTorrent-веб, пусть TorrentMonitor грузит через Transmission, а для админских качалок без ограничений будем качать uTorrent’ом.

TorrentMonitor

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

Идем в «Панель управления», раздел «Веб-службы». Включаем Web Station. Добавляем виртуальные хосты. Указываем имя каталога, имя хоста, протокол и порт. Указанное имя каталога создается по следующему пути: /web/имя_каталога . Поскольку сервер домашний, то с HTTPS не буду заморачиваться, но для особо искушенных такая возможность есть и при желании включается в пару кликов.

TorrentMonitor распаковываем в соответствующий хост (у меня это torrent.homeserver.local ) имя каталога tm-latest. Не заморачивался особо, распаковал архив с TorrentMonitor’ом и прямо эту папку указал в virtual host. Настраиваем БД по желанию. В моем варианте MariaDB-server + phpMyAdmin, оба пакета устанавливаются из центра приложений XPEnology. Для особо экзотических есть SQLite, меня, правда, производительность не устроила. Как работать с phpMyAdmin, информации в интернетах полно, поэтому не буду заострять внимание.

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

С этим разобрались, переходим к uTorrent WebUI. Здесь можно пойти тем же путем. А можно поднять контейнер с Ubuntu 14.04 в Docker и запустить внутри uTorrent WebUI, что я и сделаю.

Интерфейс uTorrent WebUI

Итак, ставим Docker из «Центра приложений». После запуска переходим в «Реестр». Ищем Ubuntu, ставим понравившийся образ: я выбрал widerplan/ubuntu-14.04. При запуске подключаем общий том с хостовой системой и нужные порты, выбрал 2222-й для SSH, 8088-й для 80 и 8080-й — на нем будет работать uTorrent WebUI.

Docker-контейнер с указанием подключения томов Docker-контейнер с указанием подключения портов Консоль управления в контейнере Ubuntu

Далее заходим по SSH и качаем архив с сайта TorrentMonitor.

Распаковываем по пути /var/www/html/utorrent . Ставим LAMP, правим конфиги Apache 2. Все это сто раз рассказано в интернетах, поэтому трудностей возникнуть не должно. Итак, торренты качаются, сериалы мониторятся. Теперь надо бы все это дело более-менее прилично раздавать по сети. В качестве медиасервера будем использовать Plex Media Server. Преимуществ масса. Самое главное — сам сканирует папки, качает обложки, сортирует сериалы по сезонам и сериям, музыку по исполнителям и альбомам. Качает к фильмам трейлеры, описание, список актеров, рейтинги. И это далеко не предел. Внутри из коробки доступен DLNA, но использовать в качестве DLNA-сервера мы будем внешний. Устанавливаем его также из «Центра приложений». Если позволяет сеть, то можно организовать доступ к Plex-серверу извне, что сделает его доступным из сети Интернет, и ты сможешь делиться медиатекой с друзьями. Клиентские приложения есть практически под любое устройство.

Пример веб-клиента Plex Media Server

После установки Plex’a добавляем каталоги с указанием содержимого. Отдельно рекомендую указать папку, в которую скачиваются торренты по умолчанию, а также добавить каталоги, куда скачивание идет через TorrentMonitor. Когда количество контента перевалит уже за терабайт, будет проще разбираться с файлами, чем искать все в «файлопомойке».

Заключение

Конечно, это далеко не предел для такой системы, как DSM (XPEnology). Здесь можно наворотить и мониторинг, и Proxy, и сервер резервного копирования как для обычных систем, так и для Apple-устройств. На лету можно установить CMS-ки, такие как площадка DokuWiki, Joomla, форум PHPBB, Drupal, BitTorrent Sync, IP-телефонию Asterisk, UniFI, VirtualBox и еще очень много всего. Возможности этой системы просто поражают именно потому, что все сделано с красивыми рюшечками и кнопочками в интерфейсе.

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

P.S. Надеюсь, ты не потратил время зря ;). Всем спасибо!

Александр «Plus» Рак

Участник сообщества OmskLUG. Инженер отдела электронного взаимодействия МКУ «Информационно-технического управления».

Источник

Оцените статью