Dockerベースの別のホームメディアサーバー

こんにちは、Habr。 この記事を書くために、私はUA-IXのかなり有名なex.uaおよびfs.toリソースの閉鎖に促されました。 勇敢な法執行官は価値のある代替手段を提供することを気にしなかったため、そのプロセスを自分の手に取ることに決めました。さらに、長い間、外部プロバイダーから独立したホームストレージ/ファイルストレージを整理したかったのです。 実装の過程で、非常に多くの異なるシステムが試されましたが、最終的にはすべてがそのように構築され、そうでない場合は構築されませんでした。 意見は主観的であり、実装は手頃な価格です。 この記事自体は、実用的なソリューションだけが必要な初心者、またはメディアサーバーについては考えているが、まだ実装を決定していない初心者向けに設計されています。



決定が下されたので、始めましょう。





選択基準は非常に単純でした。コンパクトで、WiFiを使用した通常の操作、静寂。 鉄市場を研究した結果、現在最も幅広い機会が得られている鉄市場について、いくつかの候補が残った。 つまり-HP MicroServer G8、ASUS VivoMini VC65R、そしてもちろんRapsberry Pi 3。



メディアサーバーを作成するために利用可能なソフトウェアを検討した後、ARMベースのRapsberryはトランスコーディングをサポートしていないため、ASUS VivoMini VC65Rで停止することが決定されました。 そのため、VC65Rと4x Samsung ST1500LM006 1.5TBが買収されました。



オペレーティングシステム



一方では、FreeNAS、NAS4Free、OpenMediaVault、Rockstorなど、かなり多くの専門のディストリビューションが市場に出回っています。 一方、システムを完全に制御し、可能であれば、不要なサービスを使用しないようにします。 そのため、選択はUbuntu Server 16.04 LTSに限定されていました。 一般に、Dockerのおかげで結果として得られる構成はオペレーティングシステムに依存しませんが、一部のサービスは何らかの形でディストリビューションに関連付けられているため、この構成を繰り返したい場合は、この点に留意してください。



ファイルを整理するために、次のディレクトリ構造が選択されました。



/ data-メディアデータとバックアップを保存するための独立した論理ボリューム

/データ/メディア-メディアデータ

/データ/ TimeMachine-TimeMachineのバックアップ

/ opt / mediacenter-サービスデータを保存するための独立した論理ボリューム


インストールプロセス自体は、選択するディストリビューションに依存するため、説明する価値はありません。唯一の注意点は、アクセス許可を気にせずにファイルを操作するのが良いため、setfaclを使用してユーザーアクセスを提供することです。



apt-get install acl setfacl -Rm u:<username>:rwx /data setfacl -Rm d:u:<username>:rwx /data setfacl -Rm u:<username>:rwx /opt/mediacenter setfacl -Rm d:u:<username>:rwx /opt/mediacenter
      
      





ソフトウェア



そのため、Mac OS X、iOS、Windows、およびAndroidにはさまざまな機器が存在するという事実を考慮して、このようなメディアサーバーにどのような要件を設定できますか。



-Mac OS X用TimeMachine +シェア用のストレージ

-Windowsで共有

-トレントクライアント

-更新された急流の監視

-パーソナルクラウドストレージ

-メディアサーバー



順番に始めましょう。



TimeMachine + Mac OS X向けのストレージ



インストールは非常に簡単で、以下で説明するすべてのものも同様です。



 apt-get install netatalk avahi-daemon
      
      





このコマンドを使用して、AppleTalkプロトコルとBonjourのオープンソース実装をインストールします。 現在は、/ data / Mediaディレクトリを使用可能な共有リソースとしてエクスポートし、/ data / TimeMachineディレクトリをTimeMachineバックアップに使用可能なものとしてエクスポートするだけです。



これを行うには、ファイル/etc/netatalk/AppleVolumes.defaultを編集して最後に追加します



 /data/TimeMachine "TimeMachine" cnidscheme:dbd options:tm,upriv,usedots volsizelimit:300000 allow:<username> /data/Media "Media" cnidscheme:dbd options:upriv,usedots dperm:0776 fperm:0666 allow:<username>
      
      





TimeMachineで使用可能なスペースを制限するオプションが追加されました。



 volsizelimit:300000
      
      





特定のユーザーのアクセスを制限するオプションが追加されました。



 allow:<username>
      
      





Windowsで共有



ネットワーク上にWindowsがあるため、Sambaも必要です。 ネットワークでSambaを使用するためのガイドがたくさんあるため、ここではすべてが非常に簡単です。 ただし、記事を完了するには:



 apt-get install samba smbclient
      
      





そして、smb.confの内容



/etc/samba/smb.conf
 [global] workgroup = WORKGROUP server string = Media server netbios name = media dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 panic action = /usr/share/samba/panic-action %d server role = standalone server passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = no security = user unix extensions = no wide links = yes follow symlinks = yes load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes hide dot files = yes server signing = auto name resolve order = bcast host max protocol = SMB2_10 [Media] path = /data/Media valid users = <username> guest ok = no writable = yes browsable = yes hide files = /lost+found/Network Trash Folder/Temporary Items/.Apple*/.DS*/
      
      





トレントクライアントと、トレントとPersonal Cloud StorageおよびMedia Serverのアップグレードの監視



これらはすべてdocker composeに基づいて実装されているため、これらの要件を1つの部分にまとめることが決定されました。実際、これらはすべて1つのコマンドで開始できる1つのファイルです。 dockerとdocker-composeのインストールはおそらく省略します。これらは複雑ではなく、dockerサイトで非常によく説明されているためです。



選択したソフトウェアから始めましょう:



クライアントトレントとして比較的軽量なTransmissionを使用します。



更新されたトレントを監視するために、テスト用にネットワークのロシア語セグメントに特化した2つのソリューション、つまりTorrentMonitorとMonitorrentが選択されました。 現在、これらは両方とも私のメディアサーバーで動作し、その結果、最適な方法で表示されるようになります。 ちなみに、両方のソリューションの作者はHabréにいます。



個人用のドロップボックスとして、ownCloudを使用します。 これが私に100%適したソリューションであるかどうかはわかりませんが、この段階では私に合っています。 または、NextCloud、Pydio、またはSeafileを使用できます。 実際、選択の幅ははるかに広く、市場にはかなりの数の代替品があります。



Plexをメディアサーバーとして使用します。 Embyと呼ばれる代替品もテストされましたが、私は好きではありませんでした。



上記のすべてについて、既製のdockerイメージが既に存在しますが、私が気に入らなかったのはTorrentMonitorのイメージだけなので、自分で作成することにしました。



Dockerfile
 #------------------------------------------------------------------------------ # Set the base image for subsequent instructions: #------------------------------------------------------------------------------ FROM alpine:3.4 MAINTAINER Andrey Aleksandrov <alex.demion@gmail.com> #------------------------------------------------------------------------------ # Install: #------------------------------------------------------------------------------ RUN apk update \ && apk upgrade \ && apk --no-cache add --update -t deps wget unzip sqlite \ && apk --no-cache add nginx php5-common php5-cli php5-fpm php5-curl php5-sqlite3 php5-pdo_sqlite php5-iconv php5-json php5-ctype php5-zip \ && wget -q http://korphome.ru/torrent_monitor/tm-latest.zip -O /tmp/tm-latest.zip \ && unzip /tmp/tm-latest.zip -d /tmp/ \ && mkdir -p /data/htdocs/db /run/nginx \ && mv /tmp/TorrentMonitor-master/* /data/htdocs \ && cat /data/htdocs/db_schema/sqlite.sql | sqlite3 /data/htdocs/db_schema/tm.sqlite \ && apk del --purge deps; rm -rf /tmp/* /var/cache/apk/* #------------------------------------------------------------------------------ # Populate root file system: #------------------------------------------------------------------------------ ADD rootfs / #------------------------------------------------------------------------------ # Expose ports and entrypoint: #------------------------------------------------------------------------------ VOLUME ["/data/htdocs/db", "/data/htdocs/torrents"] WORKDIR / EXPOSE 80 ENTRYPOINT ["/init"]
      
      







リポジトリ自体はここにあります



UPD: nawa / torrentmonitorへのプルリクエストが染色されたため、記事が更新されました。



画像の準備ができたので、docker-compose.ymlを書きましょう



UPD2: DLNAをお持ちでない方は、portsセクションをコメントアウトして、 network_mode:hostのコメントを外してください



/opt/mediacenter/docker-compose.yml
 version: '2' services: # Plex media server plex: container_name: plex hostname: plex image: plexinc/pms-docker:plexpass restart: unless-stopped # If you need DLNA you need to comment ports section and use host network mode. #network_mode: host ports: - 32400:32400/tcp - 33400:33400/tcp - 3005:3005/tcp - 8324:8324/tcp - 32469:32469/tcp - 1900:1900/udp - 32410:32410/udp - 32412:32412/udp - 32413:32413/udp - 32414:32414/udp environment: - TZ=Europe/Kiev - ADVERTISE_IP=http://<YOUR ADDRESS>:32400/ - PLEX_UID=1000 - PLEX_GID=1000 volumes: - /opt/mediacenter/plex-config:/config - /opt/mediacenter/plex-transcode:/transcode - /data/Media:/Media # Monitoring of torrent sites for update torrentmonitor: container_name: torrentmonitor hostname: torrentmonitor image: nawa/torrentmonitor ports: - 8080:80/tcp volumes: - /opt/mediacenter/torrentmonitor-torrents:/data/htdocs/torrents - /opt/mediacenter/torrentmonitor-db:/data/htdocs/db links: - transmission monitorrent: container_name: monitorrent hostname: monitorrent image: werwolfby/alpine-monitorrent ports: - 6687:6687/tcp volumes: - /opt/mediacenter/monitorrent-db:/db environment: - MONITORRENT_DB_PATH=/db/monitorrent.db links: - transmission # Torrent client transmission: container_name: transmission hostname: transmission image: linuxserver/transmission ports: - 9091:9091/tcp - 51413:51413/tcp - 51413:51413/udp volumes: - /opt/mediacenter/transmission-config:/config - /data/Media/Downloads:/downloads - /data/Media/Torrents:/watch environment: - PGID=1000 - PUID=1000 - TZ=Europe/Kiev # Personal file share owncloud: container_name: owncloud hostname: owncloud image: owncloud ports: - 8081:80/tcp volumes: - /opt/mediacenter/owncloud-config:/var/www/html/config - /opt/mediacenter/owncloud-apps:/var/www/html/apps - /data/Media/ownCloud:/var/www/html/data - /data/Media/:/Media links: - mysql # Database server mysql: container_name: mysql hostname: mysql image: mariadb environment: - MYSQL_ROOT_PASSWORD=<mysql password> volumes: - /opt/mediacenter/mariadb-data:/var/lib/mysql
      
      







追加のアクション
ownCloudを初めて起動するときは、データベースを作成するための一連の手順が必要になります。

[ストレージとデータベース]-> [データベースの構成]-> [MySQL / MariaDB]を選択する必要があります

データベースユーザー:ルート

データベースパスワード:P @ ssw0rd

データベース名:任意

データベースホスト:mysql



デフォルトのパスワード
TorrentMonitor:torrentmonitor

Monitorrent:monitorrent



物議を醸す問題について少し説明。
トレントの重複を避ける必要があるため、/ opt / mediacenter / torrentmonitor-torrentsディレクトリは別のマウントポイントに移動され、/ data / Media / Torrentsにリンクされていません。 転送は、ディレクトリ/データ/メディア/トレントをそれぞれ監視するように設定されており、このディレクトリに分類されるすべての.torrentファイルが処理されます。 TorrentMonitorはRPCを介したTransmissionで動作する必要があるため、Transmissionが処理するディレクトリに.torrentファイルを保存する必要はありません。


次に、メタデータとメディアデータを保存するためのディレクトリ構造を作成する必要があります。



 mkdir -p /opt/mediacenter/{mariadb-data,monitorrent-db,owncloud-apps,owncloud-config,plex-config,plex-transcode,torrentmonitor-db,torrentmonitor-torrents,transmission-config} mkdir -p /data/Media/{Anime,Books,Documents,Downloads,Games,Home\ Videos,Movies,Music,ownCloud,Photos,Torrents,TV\ Shows}
      
      





そして、完全な利便性のために、systemdサービスを作成します



/etc/systemd/system/mediacenter.service
[単位]

説明= Mediacenterサービス

後= docker.service

必要= docker.service



[サービス]

ExecStartPre =-/ usr / local / bin / docker-compose -f /opt/mediacenter/docker-compose.yml down

ExecStart = / usr / local / bin / docker-compose -f /opt/mediacenter/docker-compose.yml up

ExecStop = / usr / local / bin / docker-compose -f /opt/mediacenter/docker-compose.yml stop



[インストール]

WantedBy = multi-user.target



今やる:



 systemctl daemon-reload systemctl enable mediacenter systemctl start mediacenter
      
      





Docker composeは、Dockerハブから画像をダウンロードし、サービスを開始します。 現在、それらは次の場所で入手できます。



プレックス :http:// <YOUR_IP>:32400

送信 :http:// <YOUR_IP>:9091

TorrentMonitor :http:// <YOUR_IP>:8080

Monitorrent :http:// <YOUR_IP>:6687

ownCloud :http:// <YOUR_IP>:8081



まあ、すべてが始まって機能しているようです。 これで、テストを開始できます。たとえば、.torrentファイルをTorrentsディレクトリに保存します。 送信によりダウンロードが開始され、ダウンロードされたファイルがDownloads / completeディレクトリに表示されます。



これで、ダウンロードした映画/テレビ番組/音楽を認識する際にメディアサーバーの作業を容易にするための最後のステップが残ります。 これを行うために、TheTVDBなどのオープンソースからの情報に基づいてファイルの名前を変更できるFileBotという優れた製品を使用します。



インストールは簡単です:



 apt-get install openjdk-8-jdk mediainfo openjfx wget -O filebot_4.7.5_amd64.deb http://downloads.sourceforge.net/project/filebot/filebot/FileBot_4.7.5/filebot_4.7.5_amd64.deb?r=http%3A%2F%2Fwww.filebot.net%2F&ts=1482609251&use_mirror=heanet dpkg -i filebot_4.7.5_amd64.deb
      
      





名前の変更の便宜上、いくつかのエイリアスを作成します。



〜/ .bash_aliases
エイリアスanime-test = 'filebot --action test --conflict skip --format "{plex}" --db AniDB -r -non-strict --output / data / Media -rename'

エイリアスseries-test = 'filebot --action test --conflict skip --format "{plex}" --db TheTVDB -r -non-strict --output / data / Media -rename'

エイリアスmovie-test = 'filebot --action test --conflict skip --format "{plex}" --db TheMovieDB -r -non-strict --output / data / Media -rename'

エイリアスmusic-test = 'filebot --action test --conflict skip --format "{plex}" --db AcoustID -r -non-strict --output / data / Media -rename'

エイリアスanime-hardlink = 'filebot --action hardlink --conflict skip --format "{plex}" --db AniDB -r -non-strict --output / data / Media -rename'

エイリアスseries-hardlink = 'filebot --action hardlink --conflict skip --format "{plex}" --db TheTVDB -r -non-strict --output / data / Media -rename'

エイリアスmovie-hardlink = 'filebot --action hardlink --conflict skip --format "{plex}" --db TheMovieDB -r -non-strict --output / data / Media -rename'

エイリアスanime-move = 'filebot --action move --conflict skip --format "{plex}" --db AniDB -r -non-strict --output / data / Media -rename'

エイリアスseries-move = 'filebot --action move --conflict skip --format "{plex}" --db TheTVDB -r -non-strict --output / data / Media -rename'

エイリアスmovie-move = 'filebot --action move --conflict skip --format "{plex}" --db TheMovieDB -r -non-strict --output / data / Media -rename'

エイリアスmusic-move = 'filebot --action move --conflict skip --format "{plex}" --db AcoustID -r -non-strict --output / data / Media -rename'



ここで、たとえば、シリーズを操作するには、次のコマンドを使用できます。



 series-test <PATH_TO_SERIES_DIR>
      
      





作業の結果が私たちに合わない場合は、-qおよび--filterオプションを使用して検索条件を変更できます。 作業の結果が適切であれば、次のコマンドを実行します。



 series-move <PATH_TO_SERIES_DIR>
      
      





その結果、シリーズのファイルはディレクトリ/データ/メディア/テレビ番組/シリーズ名になります。 さて、ongamingを使用している場合、または配布を継続したい場合は、次のコマンドを実行できます。



 series-hardlink <PATH_TO_SERIES_DIR>
      
      





その結果、ハードリンクは/ data / Media / TV Shows / Series Nameディレクトリに表示されます。



一般に、独自のメディアサーバーを迅速かつ簡単に作成するためのこのような簡単な方法。



All Articles