marvinpinto.htpc
htpc
Jest to meta-rola Ansible Galaxy, która służy do instalacji i zarządzania przykładową konfiguracją komputera do kina domowego (HTPC).
Celem tego projektu jest pokazanie, jak można używać Ansible, aby połączyć wszystkie komponenty potrzebne do konfiguracji HTPC. Łączenie wszystkich elementów zawsze było najtrudniejszą częścią, więc mam nadzieję, że to ułatwi sprawę.
Funkcje
- SABnzbd - program do pobierania z grup dyskusyjnych
- SickRage - menedżer biblioteki wideo dla programów telewizyjnych
- CouchPotato - PVR i menedżer biblioteki wideo dla filmów
- Plex - serwer multimedialny dla filmów, programów telewizyjnych, muzyki, itd.
- nginx - proxy przednie z autoryzacją Google (poprzez OAuth2 Proxy)
- Wszystko zaprojektowane do działania na serwerze Ubuntu 14.04
Wymagania wstępne
Będziesz potrzebować domeny, pod którą to będzie hostowane - w tym ustawieniu używamy
htpc-sample.example.org
jako przykładu. Zaktualizuj zmiennąhtpc_dns_hostname
z Twoją domeną.Domyślne ustawienie tutaj korzysta z autoryzacji Google, więc będziesz musiał zarejestrować aplikację webową OAuth (instrukcje tutaj) i zanotować Identyfikator klienta oraz Klucz klienta (odpowiednie zmienne to
htpc_oauth_client_id
orazhtpc_oauth_client_secret
).Nie musisz ograniczać się do korzystania z dostawcy autoryzacji Google, są inne opcje również! Pamiętaj, aby dostosować zmienną
oauth2_proxy_cli_args
, jeśli wybierzesz tę opcję.Wygeneruj losowy ciąg 32-bajtowy używając:
$ date +%s | sha256sum | base64 | head -c 32 ; echo
Użyj tej wartości jako swoje
htpc_oauth_cookie_secret
.Uzyskaj certyfikat TLS HTTPS dla domeny, którą wybrałeś (
htpc_dns_hostname
). Zaktualizuj zmiennehtpc_tls_cert
ihtpc_tls_cert_key
swoimi certyfikatem i kluczem prywatnym (odpowiednio).
Zmienna roli
Zmienna specyficzna dla roli htpc
jest określona w
defaults/main.yml, podczas gdy zmienne meta-specyficzne roli znajdują się w meta/main.yml.
Przykład
Zainstaluj ten moduł z Ansible Galaxy do katalogu './roles':
ansible-galaxy install marvinpinto.htpc -p ./roles
Użyj go w playbooku jak poniżej:
- hosts: '127.0.0.1'
become: true
roles:
- role: 'marvinpinto.htpc'
htpc_dns_hostname: 'htpc-sample.example.org'
htpc_oauth_client_id: 'twój-identyfikator-klienta'
htpc_oauth_client_secret: 'twój-klucz-klienta'
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-----
Konfiguracja po ustawieniu
SABnzbd
Przejdź do
/sabnzbd
w przeglądarce i postępuj zgodnie z wstępną konfiguracją.W
/sabnzbd/config/general/
prawdopodobnie chcesz Wyłączyć klucz API (nie jest potrzebny, ponieważ działa za proxy OAuth2).W
/sabnzbd/config/folders/
:
- Tymczasowy folder pobierania:
/opt/downloads/sabnzbd-incomplete
- Folder zakończonych pobrań:
/opt/downloads/misc
- Uprawnienia dla zakończonych pobrań:
777
- Folder skryptów:
/opt/nzbtomedia
- W
/sabnzbd/config/categories/
:
Przetwarzanie filmów:
- Kategoria:
movies
- Skrypt:
nzbToCouchPotato.py
- Folder/Ścieżka:
/opt/downloads/unprocessed/movies
- Kategoria:
Przetwarzanie TV:
- Kategoria:
tv
- Skrypt:
nzbToSickBeard.py
- Folder/Ścieżka:
/opt/downloads/tv
- Kategoria:
Przetwarzanie audio:
- Kategoria:
audio
- Skrypt:
nzbToHeadPhones.py
- Folder/Ścieżka:
/opt/downloads/unprocessed/audio
- Kategoria:
- W
/sabnzbd/config/switches/
:
- Akcja, gdy pobierany jest zaszyfrowany RAR:
abort
- Akcja, gdy wykryto niepożądane rozszerzenie:
abort
- Niepożądane rozszerzenia:
exe, com
- Tylko przetwarzanie zweryfikowanych zadań:
off
- Ignorowanie próbek:
on
- Lista czyszczenia:
nfo, sfv
- W
/sabnzbd/config/special/
:
empty_postproc
:on
SickRage
- Zatrzymaj usługę SickRage:
$ service sickrage stop
- Pozwól nginx na proxy żądań do 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
- Inne ustawienia 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
- Uruchom usługę SickRage:
$ service sickrage start
CouchPotato
- Zatrzymaj usługę CouchPotato:
$ service couchpotato stop
- Pozwól nginx na proxy żądań do 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
- Dodaj poniższy klucz/wartość pod sekcją
[core]
w/opt/config/couchpotato-config/settings.conf
host = 127.0.0.1
- Uruchom usługę CouchPotato:
$ service couchpotato start
Przejdź do
/couchpotato/settings/general
w przeglądarce i wyłącz okresowe sprawdzanie aktualizacji.W
/couchpotato/settings/renamer
:
- Zmień nazwę pobranych filmów:
Włączone
- Co:
0
- Z:
/opt/downloads/unprocessed/movies
- Do:
/opt/downloads/movies
- Wymuszenie co:
24
- Czyszczenie:
Włączone
- Następne po niepowodzeniu:
Wyłączone
- Zrób notatkę swojego Klucza API i zaktualizuj zmienną
htpc_couchpotato_api_key
tą wartością.
- W
/couchpotato/settings/downloaders
:
- Sabnzbd:
Włączone
- Host:
127.0.0.1:8080
- Kategoria:
movies
- Usuń NZB:
włączone
- Usuń nieudane:
włączone
Plex Media Server
Ponieważ Plex pozwala na administracyjne akcje tylko z lokalnej podsieci, będziesz musiał stworzyć tunel SSH do swojego hosta dla początkowej konfiguracji. Zauważ, że to tylko potrzebne przy początkowej konfiguracji.
https://support.plex.tv/hc/en-us/articles/200288586-Installation
W ogólnej formie, ten polecenie SSH wygląda mniej więcej tak:
ssh ip.adres.serwera -L 8888:localhost:32400
Następnie przeglądanie pod http://localhost:8888/web powinno umożliwić Ci skonfigurowanie aplikacji Plex.
W środowisku vagrant, to polecenie ssh wygląda tak:
ssh \
-p <Port> \
-i <IdentityFile> \
-L 8888:localhost:32400 \
<User>@<HostName>
Gdzie Port
, IdentityFile
, User
i HostName
można znaleźć wykonując:
vagrant ssh-config
Więcej informacji można znaleźć w dokumentacji instalacji Plex Installation Docs.
Headphones
- Zatrzymaj usługę Headphones:
$ service headphones stop
- Pozwól nginx na proxy żądań do 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
- Inne opcje konfiguracyjne
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
- Uruchom usługę Headphones:
$ service headphones start
Rozwój
Użyj dostarczonego Vagrantfile
do lokalnego rozwoju i testowania.
$ 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.htpc