htpc
htpc
Это мета-роль Ansible Galaxy, предназначенная для установки и управления образцом настройки медиацентра (HTPC).
Цель этого проекта – показать, как можно использовать Ansible для подключения компонентов, необходимых для настройки HTPC. Соединение всех этих частей обычно было самой сложной частью, и, надеюсь, это упростит задачу.
Особенности
- SABnzbd – загрузчик бинарных новостных групп
- SickRage – менеджер видеотеки для ТВ-шоу
- CouchPotato – PVR и менеджер видеотеки для фильмов
- Plex – медиасервер для фильмов, ТВ-шоу, музыки и т.д.
- nginx – прокси-сервер с аутентификацией Google (через OAuth2 Proxy)
- Все задумано для работы на сервере Ubuntu 14.04
Предварительные требования
Вам понадобится домен для размещения – в этом примере используется
htpc-sample.example.org
. Обновите переменнуюhtpc_dns_hostname
своим доменным именем.В данном примере используется аутентификация Google, поэтому вам нужно зарегистрировать веб-приложение OAuth (инструкции здесь) и запомнить Идентификатор клиента и Секрет клиента (соответствующие переменные
htpc_oauth_client_id
иhtpc_oauth_client_secret
).Вы не ограничены только использованием провайдера аутентификации Google, есть и другие действительные варианты! Не забудьте скорректировать переменную
oauth2_proxy_cli_args
, если решите выбрать этот вариант.Создайте случайную строку длиной 32 байта с помощью:
$ date +%s | sha256sum | base64 | head -c 32 ; echo
Используйте это значение как
htpc_oauth_cookie_secret
.Получите https TLS сертификат для выбранного вами домена (
htpc_dns_hostname
). Обновите переменныеhtpc_tls_cert
иhtpc_tls_cert_key
своими сертификатом и приватным ключом.
Переменные роли
Специфические переменные роли htpc
указаны в
defaults/main.yml, а мета-переменные специфические для роли
в meta/main.yml.
Пример
Установите этот модуль из Ansible Galaxy в директорию './roles':
ansible-galaxy install marvinpinto.htpc -p ./roles
Используйте его в плейбуке следующим образом:
- hosts: '127.0.0.1'
become: true
roles:
- role: 'marvinpinto.htpc'
htpc_dns_hostname: 'htpc-sample.example.org'
htpc_oauth_client_id: 'ваш-идентификатор-клиента'
htpc_oauth_client_secret: 'ваш-секрет-клиента'
htpc_oauth_cookie_secret: 'N2U2NTI0NzljNjc2Y2VmNGVlZDZmMDg5'
htpc_authorized_users_emails: |
[email protected]
[email protected]
htpc_tls_cert: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
htpc_tls_cert_key: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
Настройка после установки
SABnzbd
Перейдите по адресу
/sabnzbd
в вашем браузере и следуйте инструкции начальной настройки.В
/sabnzbd/config/general/
вам, вероятно, нужно будет Отключить API-ключ (он не нужен, так как он работает за прокси OAuth2).В
/sabnzbd/config/folders/
:
- Временная папка загрузки:
/opt/downloads/sabnzbd-incomplete
- Папка завершенных загрузок:
/opt/downloads/misc
- Права на завершенные загрузки:
777
- Папка скриптов:
/opt/nzbtomedia
- В
/sabnzbd/config/categories/
:
Обработка фильмов:
- Категория:
movies
- Скрипт:
nzbToCouchPotato.py
- Папка/Путь:
/opt/downloads/unprocessed/movies
- Категория:
Обработка ТВ:
- Категория:
tv
- Скрипт:
nzbToSickBeard.py
- Папка/Путь:
/opt/downloads/tv
- Категория:
Обработка аудио:
- Категория:
audio
- Скрипт:
nzbToHeadPhones.py
- Папка/Путь:
/opt/downloads/unprocessed/audio
- Категория:
- В
/sabnzbd/config/switches/
:
- Действие при загрузке зашифрованного RAR-файла:
abort
- Действие при обнаружении нежелательного расширения:
abort
- Нежелательные расширения:
exe, com
- Обрабатывать только проверенные задания:
off
- Игнорировать образцы:
on
- Список очистки:
nfo, sfv
- В
/sabnzbd/config/special/
:
empty_postproc
:on
SickRage
- Остановите сервис SickRage:
$ service sickrage stop
- Разрешите nginx проксировать запросы к SickRage:
$ sed -i 's/^web_root = ""/web_root = \/sickrage/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^handle_reverse_proxy = 0/handle_reverse_proxy = 1/g' /opt/config/sickrage-config/config.ini
- Другие настройки SickRage:
$ sed -i 's/^use_failed_downloads = 0/use_failed_downloads = 1/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^log_nr = 5/log_nr = 1/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^auto_update =.*/auto_update = 0/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^version_notify =.*/version_notify = 0/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^naming_pattern =.*/naming_pattern = %S.N.S%0SE%0E.%E.N/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^web_host =.*/web_host = 127.0.0.1/g' /opt/config/sickrage-config/config.ini
- Запустите сервис SickRage:
$ service sickrage start
CouchPotato
- Остановите сервис CouchPotato:
$ service couchpotato stop
- Разрешите nginx проксировать запросы к CouchPotato:
$ sed -i 's/^url_base =.*/url_base = \/couchpotato/g' /opt/config/couchpotato-config/settings.conf
$ sed -i 's/^show_wizard =.*/show_wizard = 0/g' /opt/config/couchpotato-config/settings.conf
- Добавьте следующую пару ключ/значение в раздел
[core]
в/opt/config/couchpotato-config/settings.conf
:
host = 127.0.0.1
- Запустите сервис CouchPotato:
$ service couchpotato start
Перейдите к
/couchpotato/settings/general
в браузере и отключите периодическую проверку обновлений.В
/couchpotato/settings/renamer
:
- Переименовать загруженные фильмы:
Enabled
- Запускать каждый:
0
- Из:
/opt/downloads/unprocessed/movies
- В:
/opt/downloads/movies
- Принудительно каждый:
24
- Очистка:
Enabled
- Следующее при неудаче:
Disabled
- Запомните ваш API-ключ и обновите переменную
htpc_couchpotato_api_key
этим значением.
- В
/couchpotato/settings/downloaders
:
- Sabnzbd:
Enabled
- Хост:
127.0.0.1:8080
- Категория:
movies
- Удалить NZB:
enabled
- Удалить неудачные:
enabled
Plex Media Server
Поскольку Plex разрешает административные действия только с локальной подсети, вам нужно создать SSH-туннель к вашей хост-машине для начальной настройки. Обратите внимание, что это требуется только для начальной настройки.
https://support.plex.tv/hc/en-us/articles/200288586-Installation
В общем виде эта команда SSH выглядит примерно так:
ssh ip.address.of.server -L 8888:localhost:32400
Затем, перейдя по адресу http://localhost:8888/web, вы сможете настроить ваше приложение Plex.
В окружении vagrant эта команда SSH выглядит следующим образом:
ssh \
-p <Port> \
-i <IdentityFile> \
-L 8888:localhost:32400 \
<User>@<HostName>
Где Port
, IdentityFile
, User
и HostName
можно найти, выполнив:
vagrant ssh-config
Более подробная информация доступна в документации по установке Plex.
Headphones
- Остановите сервис Headphones:
$ service headphones stop
- Разрешите nginx проксировать запросы к Headphones:
sed -i 's/^http_root =.*/http_root = \/headphones/g' /opt/config/headphones-config/config.ini
sed -i 's/^http_host =.*/http_host = 127.0.0.1/g' /opt/config/headphones-config/config.ini
- Прочие параметры конфигурации:
sed -i 's/^music_encoder =.*/music_encoder = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^preferred_quality =.*/preferred_quality = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^rename_files =.*/rename_files = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^folder_format =.*/folder_format = $Type/$Artist/$Album [$Year]/g' /opt/config/headphones-config/config.ini
sed -i 's/^move_files =.*/move_files = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^cleanup_files =.*/cleanup_files = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^embed_album_art =.*/embed_album_art = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^destination_dir =.*/destination_dir = \/opt\/downloads\/audio/g' /opt/config/headphones-config/config.ini
sed -i 's/^download_dir =.*/download_dir = \/opt\/downloads\/unprocessed\/audio/g' /opt/config/headphones-config/config.ini
sed -i 's/^launch_browser =.*/launch_browser = 0/g' /opt/config/headphones-config/config.ini
sed -i 's/^api_key =.*/api_key = YOURAPIKEY/g' /opt/config/headphones-config/config.ini
sed -i 's/^encoder_multicore =.*/encoder_multicore = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^api_enabled =.*/api_enabled = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^correct_metadata =.*/correct_metadata = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^encoder =.*/encoder = libav/g' /opt/config/headphones-config/config.ini
sed -i 's/^download_scan_interval =.*/download_scan_interval = 0/g' /opt/config/headphones-config/config.ini
sed -i 's/^bitrate =.*/bitrate = 256/g' /opt/config/headphones-config/config.ini
sed -i 's/^wait_until_release_date =.*/wait_until_release_date = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^embed_lyrics =.*/embed_lyrics = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^encoderoutputformat =.*/encoderoutputformat = m4a/g' /opt/config/headphones-config/config.ini
sed -i 's/^sab_host =.*/sab_host = http:\/\/127.0.0.1:8080/g' /opt/config/headphones-config/config.ini
sed -i 's/^sab_category =.*/sab_category = audio/g' /opt/config/headphones-config/config.ini
sed -i 's/^sab_apikey =.*/sab_apikey = sabapi1234/g' /opt/config/headphones-config/config.ini
sed -i 's/^songkick_enabled =.*/songkick_enabled = 0/g' /opt/config/headphones-config/config.ini
sed -i 's/^log_dir =.*/log_dir = \/opt\/config\/headphones-config\/logs/g' /opt/config/headphones-config/config.ini
sed -i 's/^include_extras =.*/include_extras = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^extras =.*/extras = 8/g' /opt/config/headphones-config/config.ini
- Запустите сервис Headphones:
$ service headphones start
Разработка
Используйте предоставленный Vagrantfile
для локальной разработки и тестирования.
$ vagrant up --provision
This is an Ansible Galaxy meta-role of sorts to install and manage a sample Home Theatre PC (HTPC) setup.
ansible-galaxy install marvinpinto/ansible-role-htpc