Как сделать домашний медиа сервер

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

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

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

Установка Linux

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

Домашний медиа-сервер общий доступ с компьютера на телевизор


# This is the network config written by ‘subiquity’ #ens34 network: ethernets: ens34: addresses: — 192.168.31.5/24 gateway4: 192.68.31.1 nameservers: addresses: [192.168.31.1, 8.8.8.8] optional: true version: 2

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

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

Теперь настрою файл ~/.ssh/config

Host home HostName 192.168.31.5 User maks IdentityFile /home/maks/.ssh/home

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

%sudo ALL=(ALL:ALL) NOPASSWD:ALL

Еще по теме:  Mag254 настроить на ТВ

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

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

$ sudo apt update sudo apt upgrade -y sudo apt install -y transmission-daemon

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

$ sudo systemctl stop transmission-daemon.service

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

Как создать домашний медиа сервер DLNA на компьютере, чтобы смотреть видео на смартфоне или ТВ


$ mkdir -p /media/torrent/

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

$ sudo chown -R debian-transmission:debian-transmission /media/torrent

Теперь можно приступать к настройке 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-password»: «включите transmiss-daemon то пароль автоматически зашифруется
  • «rpc-username»: «transmission» — указываем логин для авторизации
  • «rpc-whitelist-enabled»: true — опять-таки отключаем авторизацию по разрешенным ip-адресам меняя true на false соответственно

И запуск transmission

sudo systemctl start transmission-daemon.service

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

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

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

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

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

Еще по теме:  Какой самый лучший ТВ проигрыватель

sudo apt install -y nginx-full

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

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

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

user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events < worker_connections 768; >http < sendfile on; tcp_nopush on; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/home.conf; >

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

server < listen 80; root /var/www/home; server_name home.ru; location / < index index.html; try_files $uri $uri/ =404; >>

Немного объясню файл. 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

location /transmission/ < proxy_pass http://localhost:9091 ; >

transmission-daemon просит X-Transmission-Session-Id

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

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

server < listen 80; root /var/www/home; server_name home.ru; location / < index index.html; try_files $uri $uri/ =404; >location /transmission/ < proxy_read_timeout 300; proxy_pass_header X-Transmission-Session-Id; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:9091/transmission/web/; >location /rpc < proxy_pass http://127.0.0.1:9091/transmission/rpc; >location /upload < proxy_pass http://127.0.0.1:9091/transmission/upload; >>

transmission заработал

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

Так сложилось, что у меня телевизор Samsun толком не воспроизводит видео в формате avi, а если и воспроизводит то как то криво. Нельзя перемотать, длительность фильма такая — что люди стока не живут, да и самое неприятное заключается в том что посреди фильма он может просто оборваться. А вот формат mkv он ест нормально.

Еще по теме:  Asus роутер настройка ТВ приставки

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

Возвращаемся к папке, теперь смотрим на содержимое папки, если файлы avi то конвертируем их через ffmpeg в конечную папку, если в папке файлы mkv то просто перемещаю их, но если там то-то другое, просто кидаю в /tmp для дальнейшего анализа. Теперь возвращаемся к началу скрипта, если же это не папка, а файл то, смотрим на формат и при необходимости конвертируем. Вроде ничего сложного, вот сам скрипт

#!/bin/bash COMPLETE=»путь_к_конечным_файлам» CHAT_ID=»сюда_чат_айди» TELEGRAM_BOT=»сюда_айди_телеграм_бота» #Функция для обработки папки dir () < #Создаю папку для медиасервера mkdir $COMPLETE/$TR_TORRENT_NAME #Прохожу по всем файлам в папке for movie in $(ls $TR_TORRENT_DIR/$TR_TORRENT_NAME) do #Если фильм ави if [[ $movie == *avi ]]; then #Конвертирую его в mkv ffmpeg -i $TR_TORRENT_DIR/$TR_TORRENT_NAME/$movie $COMPLETE/$TR_TORRENT_NAME/$movie.mkv #Если фильм mkv elif [[ $movie == *mkv ]]; then #Перемещаю фильм в конечную папку mv $TR_TORRENT_DIR/$TR_TORRENT_NAME/$movie $COMPLETE/$movie #Если непонятный файл, отправляю его в /tmp else mkdir /tmp/$TR_TORRENT_NAME mv $TR_TORRENT_DIR/$TR_TORRENT_NAME/$movie /tmp/$TR_TORRENT_NAME/$movie echo -e «$movienбыл непонятен скрипту. Нужно сюда заглянутьn/tmp/$TR_TORRENT_NAME/$movie» >> /tmp/$TR_TORRENT_NAME.message fi done echo -e «Торентn$TR_TORRENT_NAMEnзагружен» >> /tmp/$TR_TORRENT_NAME.message > #Если скачался просто файл file () < #Так же проверяю на формат if [[ $TR_TORRENT_DIR/$TR_TORRENT_NAME == *avi ]]; then #Крнвертирую ffmpeg -i $TR_TORRENT_DIR/$TR_TORRENT_NAME $COMPLETE/$TR_TORRENT_NAME.mkv elif [[ $TR_TORRENT_DIR/$TR_TORRENT_NAME == *mkv ]]; then #Перемещаю mv $TR_TORRENT_DIR/$TR_TORRENT_NAME $COMPLETE/$TR_TORRENT_NAME else mkdir /tmp/$TR_TORRENT_NAME mv $TR_TORRENT_DIR/$TR_TORRENT_NAME /tmp/$TR_TORRENT_NAME/$TR_TORRENT_NAME echo -e «Торрентn$TR_TORRENT_NAMEnзагружен и не понятен скрипту» >> /tmp/$TR_TORRENT_NAME.message fi echo -e «Торрентn$TR_TORRENT_NAMEnзагружен» >> /tmp/$TR_TORRENT_NAME.message > send_message () < curl https://api.telegram.org/bot$TELEGRAM_BOT/sendMessage?parse_mode=markdown -d chat_id=$CHAT_ID -d text=»$(

Оцените статью
Добавить комментарий