簡単な紹介#
展開
全体方案#
展開
方案はインターネット上の既存のチュートリアルに基づき、仮想化方式で独自のストリーミングメディアを構築して実践することを目的とし、自動化された視聴体験を実現しながら、仮想化やサーバー関連の知識を学ぶことができます。
ストリーミングサービスの全体フレームワークは以下の通りです:
- proxmoxが仮想化を支える
- dockerまたはk8sがサービス運用の基盤プラットフォーム
- qbittorrentがダウンローダーとして機能
- jackettがサブスクリプションインデクサーを担う
- radarrとsonarrが映画やシリーズのスクレイピングを行う
- overseerrがスクレイピング統合サービスを提供
- plexとembyがメディアセンターサービスを担当
- bazarrが字幕情報をマッチング
以上は X99 プラットフォームの 2U サーバーに基づいていますが、必ずしもラックマウントサーバーである必要はなく、他の DIY デバイスでもこのセットアップを実現できます。コア数が十分で、メモリが大きければ、仮想化を動かすことができます。
使用するプロジェクトはすべて世界最大のオープンソースコミュニティで見つけることができます。
フローチャート#
Q&A:#
展開
Q: なぜ unraid、黒群、openmediavault、turnas などの NAS 製品を使わないのですか?
A: NAS 製品はより良いエコシステムサポート、充実した操作体験、比較的低い学習コストを持っていることは否定できません。特に黒群 unraid ですが、NAS 製品を使用すると一部の遊び心が失われてしまいます😑。仮想化の方法を選択することはより煩雑ですが、このプロセスで遭遇するさまざまな問題や問題解決の過程が、私にとっては最大の楽しみです。これにより、サーバー運用に関する多くの知識を得ることができます🤩。
Q: このセットアップの視聴体験にはどんな利点と欠点がありますか?
A: 利点は設定が比較的簡単で、ページが美しく、操作が簡単で、整備が完了すれば、overseerr で見たい番組をクリックするだけで qb にダウンロードを送信できます。他の操作は必要ありませんが、欠点も明らかです。sonarr は中国語をサポートしていないため、アニメや国産、日韓ドラマのリネーム方式がすべて英語になります。長すぎるファイル名は emby で表示されるときにあまり美しくありません。新しいリソースは効果的にサポートされますが、PT サイトのリソースがない場合、比較的古い映画リソースを見つけるのは非常に難しいです。(どのようなセットアップでもこの問題はありますね😟)
Q: 他の拡張機能については?
A: たとえば、ダウンローダーには utorrent などの拡張があり、メディアセンターには kodi や jillyfin などを追加できます。また、webhook メッセージプッシュを通じてモバイル端末での動画サブスクリプションを実現できます。アニメシリーズに関しては AutoBangumi を通じてサブスクリプション方式を拡張することもできます。要するに、まだ多くの遊びの余地があります。このセットアップはあくまで基本的なものであり、始まりに過ぎません。今後も多くの探求の余地があります😉。
Q: 他の自動化ソリューションは?
A: 自動化された視聴体験の核心は、動画のスクレイピングにあります。メディアセンターが映画情報を認識できるようにすることです。スクレイピングのポイントは、動画ファイルまたはその親ディレクトリのリネームにあります。この観点から、nastools や tMM などのツールが代替として使用できます。字幕に関しては、ChineseSubFinder が代替として使用できます。仮想化に関しては、proxmox も exsi を代替として使用できます。
仮想化基盤システム編#
proxmox に関するいくつかの注意点
展開
- イメージファイルのダウンロードリンク:proxmox VE
- USB 起動ツールの作成:Rufus または Ventoy 後者を推奨
- proxmox はデフォルトで操作ページがありません。システムインストール後に提供されるリンクを使用して Web 端で制御できます。デフォルトは https://ip:8006/
- ソースの変更
企業ソース
## 自動的に提供されるソースを削除 rm /etc/apt/sources.list.d/pve-enterprise.list ## 公式の非サブスクリプションソースを追加(以下の国内非サブスクリプションソースと二者択一) echo 'deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription' >> /etc/apt/sources.list.d/pve-no->subscription.list ## これは国内の非サブスクリプションソースです echo 'deb http://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription' >> /etc/apt/sources.list.d/pve->no-subscription.list
ソフトウェアソース
## ソースファイルを編集:/etc/apt/sources.list cp /etc/apt/sources.list /etc/apt/sources.list.bak && vim /etc/apt/sources.list ## ファイル内のすべての内容を削除するか、#でコメントアウトし、以下の内容を追加 deb https://mirrors.aliyun.com/debian bullseye main contrib deb https://mirrors.aliyun.com/debian bullseye-updates main contrib deb https://mirrors.aliyun.com/debian-security bullseye-security main contrib
- 複数のディスクを RAID5 に構成することで、仮想マシンに十分なストレージスペースを提供しつつ、データストレージの相対的な信頼性を確保できます。
仮想マシン編#
Linux の管理およびこのセットアップに必要な設定について
展開
仮想マシンは少なくとも 3 台作成する必要があります。
157.20.20.1 --> jumpserver --> リモート運用用のバリアントサーバー
157.20.20.2 --> nfs --> nfs ファイル共有システム
157.20.20.3 --> docker --> ストリーミングメディアに必要なコンテナを専用にデプロイ
k8s の方式を選択する場合、少なくとも 2 台の仮想マシンを仮想化する必要があります。
157.20.20.3 --> k8s-master --> k8s のマスターノード
157.20.20.4 --> k8s-node01 --> k8s のワーカーノード
157.20.20.4 --> k8s-node02 --> k8s のワーカーノード
この中で、jumpserver は少なくとも 4C8G のリソースが必要で、他の仮想マシンには少なくとも 2 つのコアを割り当て、メモリは必要に応じて割り当てます。特別な要求がない限り、k8s 環境の場合、マスターノードは少なくとも 2C6G、ノードは少なくとも 2C4G が必要です。
複数の仮想マシンを作成する理由:機能に応じてスペースを分け、操作ミスによるサーバーファイルの損傷によってすべてのコンポーネントが使用できなくなるのを避けるためです。このような状況が発生した場合、修復とメンテナンスが非常に面倒になります。
仮想マシンの作成#
pve のローカルに ISO イメージをアップロードして、基本的なオペレーティングシステムをインストールする必要があります。
各種基本イメージのダウンロードリンク:CentOS7、Rocky Linux 、Debian
右上の「仮想マシンの作成」をクリックし、適切なイメージを選択してインストールします。
jumpserver のインストール#
簡単な紹介
飛致云のオープンソースバリアントサーバー製品で、各種 ssh、scp ツールよりも便利です。公式サイト
デプロイ
curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash
████████████████████████████████████████ 100%
[Success]: download install script to /opt/jumpserver-installer-v3.2.0
[Info]: Start executing the installation script.
[Info]: In an automated script deployment, note the message prompts on the screen.
████████████████████████████████████████ 100%
[Success]: The Installation is Complete.
For more commands, you can enter jmsctl --help to view help information.
インストールが完了したら、ブラウザでhttp://157.20.20.1 にアクセスし、デフォルトのアカウント admin/admin でログインします。
最初の資産を作成する
資産管理 --> 資産リストで資産を追加します。
権限管理 --> 資産承認でユーザーに資産の承認ルールを作成します。
承認が完了したら、右上でコンソールに入ることができ、仮想マシンにログインするなどの操作ができます。柔軟性と便利さは ssh ツールよりも高いです。これで jumpserver のデプロイが完了しました。
nfs 共有ファイルサーバーの作成#
2 台目の Linux 仮想マシンを作成し、十分なディスクスペースを割り当てます。データスペースとメディアスペースを事前に計画し、管理を容易にし、混乱を避けます。
システム内に media フォルダーと storage フォルダーを作成し、それぞれストレージスペースとメディアスペースとして使用し、ディスクをマウントします。
## マウントするスペースを確認
$ lsblk
## メディアフォルダーとストレージフォルダーを作成
$ cd /mnt && mkdir media && mkdir storage
## ディスクをフォーマットして、オペレーティングシステムがアクセスできるようにマウント
## ファイルシステムのフォーマットはxfsまたはext4などから選択できます
$ mkfs.xfs /dev/sdb
$ mkfs.xfs /dev/sdc
$ mount /dev/sdb /mnt/storage && mount /dev/sdc /mnt/storage
## /etc/fstabを変更して、起動時に自動マウントを保証
$ vim /etc/fstab
/dev/sdb /mnt/storage xfs defaults 0 2
/dev/sdc /mnt/media xfs defaults 0 2
nfs サーバーをデプロイします。rocky linux を例にします。
- NFS サーバーコンポーネントをインストール:
$ yum install nfs-utils
- 共有するディレクトリの権限を設定:
$ chmod 777 /mnt/storage
$ chmod 777 /mnt/media
- NFS アクセス権限ファイル /etc/exports を設定します。例えば:
$ vim /etc/exports
/mnt/storage 157.20.20.0/24(rw,sync,no_subtree_check)
/mnt/media 157.20.20.0/24(rw,sync,no_subtree_check)
## これにより、157.20.20.0/24サブネットのクライアントに読み書きアクセスが提供されます
- NFS サービスを起動:
$ systemctl start nfs-server
$ systemctl enable nfs-server # 起動時に自動起動を設定
- ファイアウォールで NFS 接続のポートを開放:
$ firewall-cmd --permanent --add-service=nfs
$ firewall-cmd --permanent --add-port=2049/tcp
$ firewall-cmd --reload
- NFS 設定をテスト:
$ showmount -e localhost
/mnt/storage 157.20.20.0/24
/mnt/media 157.20.20.0/24
Tip
exports の内容を変更した場合は、exports を再露出する必要があります。具体的には以下の通りです:$ exportfs -r $ systemctl restart nfs-server
docker サーバー#
3 台目の Linux 仮想マシンを作成し、nfs サーバーをデプロイします。rocky linux を例にします。
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum makecache fast && yum -y install docker-ce
$ systemctl start docker && systemctl enable docker
バリアントサーバーのファイル管理を通じて、GitHub からダウンロードした docker-compose ファイルをアップロードします。ダウンロードリンク
アップロードされたファイルはデフォルトで/tmp
にあります。
$ cp /tmp/docker-compose-linux-x86_64 /usr/local/sbin/docker-compose
$ chmod +x /usr/local/sbin/docker-compose
完了後、docker および docker-compose のバージョンを確認できます。
$ docker version
$ docker-compose version
k8s 環境の迅速なデプロイ#
オープンソースプロジェクト:KuboardSpray-github
このプロジェクトは jumpserver の仮想マシンに直接デプロイできます。注意すべきは 80 ポートが占有されているため、ポートをマッピングする際に変更が必要です。
docker run -d \
--restart=unless-stopped \
--name=kuboard-spray \
-p 8081:80/tcp \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/kuboard-spray-data:/data \
eipwork/kuboard-spray:latest-amd64
# このイメージが取得できない場合は、以下の代替アドレスを試してください:
# swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64
http://157.20.20.1:8081 にアクセスして、デフォルトのアカウント admin/Kuboard123 でログインします。
kuboard-spray を利用して、157.20.20.3-157.20.20.6(具体的にはどの仮想マシンを k8s 環境のノードとして使用するか)を設定できます。
注意すべきは、単一のサーバーでは k8s クラスターをシミュレートすることしかできず、テスト学習目的で使用されるべきです。真の k8s クラスターは複数のマスターノードを持ち、ワーカーノードは異なる物理サーバーに分散されるべきです。これにより、単一のマシンがダウンしてもクラスターの運用に影響を与えません。
詳細なインストールデプロイについては
kuboard-spray 公式ドキュメント
最適化の参考:
待更新
ダウンローダー編#
qbittorrent を docker または k8s の方式でデプロイして使用することについて
展開
デプロイ#
docker 方式#
共有フォルダーをローカルにマウントします。
## マウントできるか確認
$ showmount -e 157.20.20.2
## マウント
$ cd /mnt && mkdir media && mount -t nfs 157.20.20.2:/mnt/media /mnt/media
$ mkdir storage && mount -t nfs 157.20.20.2:/mnt/storage /mnt/storage
## fstabで起動時にマウントする設定は前文を参照してください
docker で qbittorrent をデプロイします。
docker run -d \
--name=qbittorrent \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e WEBUI_PORT=8080 \
-p 8080:8080 \
-p 49152:49152 \
-p 49152:49152/udp \
-v /mnt/storage/qb-config:/config \
-v /mnt/media/qb-downloads:/downloads \
--restart unless-stopped \
lscr.io/linuxserver/qbittorrent:latest
上記のコードで注意すべき点は以下の通りです:
- デフォルトは 6881 ポートですが、一般的には変更する必要はありません。ほとんどの PT サイトの 6881 ポートは ban されているため、49152 または他のポートに変更できます。
- -v で設定したパスは必ず対応するフォルダーを作成してから使用する必要があります。
-v /mnt/storage/qb-config:/config
の中のパス/mnt/storage/qb-config
を qbittorrent の設定パスに置き換えます。すべての変更は保存され、コンテナがダウンしても設定が失われなければ、コンテナを再起動できます。-v /mnt/media/qb-downloads:/downloads
の部分も同様に/mnt/media/qb-downloads
の部分を変更する必要があります。
Tip
docker デプロイ中の主なポイントはポートとマウントパスです。これらはdocker hubでイメージを見つけた後に変更できます。
以降の docker デプロイプロセス中の変更方法については詳細には述べませんが、基本的な注意点はこのセクションと同じです。
k8s で qbittorrent をデプロイ#
kuboard パネルを通じて qbittorrent をデプロイします。
適切な名前空間を選択(手動で作成することもできます)し、ワークロードを作成します。
コンテナ情報を設定します。
ストレージをマウントします。
アプリケーションを公開します。
保存後、コンテナのログが successfuly と表示されるのを待ち、定義された公開ポートを通じてアクセスできます。例えば、上の図で設定された 30001 がコンテナの 8080 ポートをマッピングしているため、http://157.20.20.3:30001 でアクセスできます。qb のデフォルトアカウントは admin/adminadmin です。
qb の基本設定#
qb ページの上部ナビゲーションバーには小さな歯車のアイコンがあり、qb 設定の入口です。
- ダウンロードオプションについて、保存管理で、下の図の赤枠部分を設定する必要があります。最初の設定は sonarr と radarr に関連しており、sonarr と radarr を通じてハードリンクを行う際にフォルダーが変更されます。手動に設定すると、ダウンロードされたファイルのフォルダー設定を引き継ぐことができます。2 番目の設定は、ダウンロードファイルのトレントを抽出してバックアップする役割を果たします。通常、ダウンロードされたメディアファイルにはトレントファイルが含まれていないため、この設定でトレントを指定のフォルダーにバックアップできます。
- BitTorrentタブの下で、BT 方式を使用して EZTV、RARGB、ACG.RIP などのサイトでリソースを検索する場合、「DHT(分散型ネットワーク)を有効にして、より多くのユーザーを見つける」を選択すると、より良い効果が得られます。PT サイトを使用する場合は、チェックを外すことができます。
トラッカーサーバーの役割は、ユーザーのダウンロード速度を向上させ、より多くのユーザーノードを検索することです。トラッカーサーバーはtrackerslist.comのサイトでコピー&ペーストできます。
- 高度なタブの下で、2 つのトラッカー関連オプションを選択すると、より多くのトラッカーサーバーに接続し、速度を向上させるのに役立ちます。
スクレイピング編#
スクレイピング方式について、本セットアップでは sonarr と radarr を使用してダウンロードしたリソースファイルにハードリンクを作成します。
原理は、リネームを通じて emby、plex などのメディアサーバーが tmdb、imdb などのインターネット映画データベースに接続し、対応する情報を検索することで、メディアライブラリに映画やドラマのポスターボード、概要、キャスト情報などを表示することです。
sonarr は TV シリーズのスクレイピングに対応し、radarr は映画のスクレイピングに対応し、sonarr と radarr は jackett を通じて公開された bt サイトをインデックスし、ローカルでインターネットのシリーズを検索し、qb が自動的にダウンロードしてスクレイピングを実現することを目的としています。
展開
デプロイ#
このセクションでは docker のデプロイ方式のみを紹介します。jackett、sonarr、radarr のデプロイ方式や注意点は、前述の qb デプロイ方式と同様です。k8s デプロイ方式は qb のデプロイ方式を参考にしてください。
Tip
対応するフォルダーを作成することに注意してください。
jackett#
docker run -d \
--name=jackett \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e AUTO_UPDATE=true \
-e RUN_OPTS= \
-p 9117:9117 \
-v /mnt/storage/jackett-congfig:/config \
-v /mnt/media:/downloads \
--restart unless-stopped \
lscr.io/linuxserver/jackett:latest
sonarr#
docker run -d \
--name=sonarr \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 8989:8989 \
-v /mnt/storage/sonarr-config:/config \
-v /mnt/media/tv:/tv \
-v /mnt/media/anime:/anime \
-v /mnt/media/qb-downloads:/downloads \
--restart unless-stopped \
lscr.io/linuxserver/sonarr:latest
radarr#
docker run -d \
--name=radarr \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 7878:7878 \
-v //mnt/media/radarr-config:/config \
-v /mnt/media/movies:/movies \
-v /mnt/media/qb-downloads:/downloads \
--restart unless-stopped \
lscr.io/linuxserver/radarr:latest
overseerr#
docker run -d \
--name=overseerr \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 5055:5055 \
-v /mnt/storage/overseerr-config:/config \
--restart unless-stopped \
lscr.io/linuxserver/overseerr:latest
設定#
jackett#
http://ip:9117 で jackett にアクセスし、**Add indexer** をクリックして追加します。
sonarr#
http://ip:8989 で sonarr にアクセスし、
settings-->mediamanagement でメディアファイルフォルダーの監視を設定します。sonarr は自動的にダウンロードしたシリーズファイルからメディアファイルをハードリンクします。
settings-->profiles でデフォルト言語を設定します。
index でデフォルトインデクサーを設定します。この際、jackett の API キーが必要で、追加したサブスクリプションインデックス形式は Torznab です。
settings-->connect でメディアセンターを設定します。この設定では emby の API キーを取得する必要があります。この部分は emby のデプロイが完了した後に行うことができます。
settings-->downloadclients で qb ダウンローダーの接続を設定し、対応する監視ディレクトリを作成します。
settings-->metadata でメタデータ情報の検索を設定します。
以上の設定が完了したら、Series でシリーズを検索および監視することができ、監視が追加されると qb にダウンロードを通知し、ダウンロードが完了した後に自動的にハードリンクしてスクレイピングを実現します。
radarr#
radarr の基本設定は sonarr と同様ですが、radarr では中国語を設定できます。
http://ip:7878 でログインし、settings--> UI でページを中国語に設定できます。
メディア管理で "" を追加することで、リネームを中国語のディレクトリに設定できます。
Overseerr#
overseerr は美しく強力なメディア管理ツールで、radarr と sonarr の集合体とも言えます。API キーを通じて sonarr と radarr を管理します。デプロイが完了すると、ガイド設定ページに入ります。この際、使用する api-key は sonarr と radarr の settings-->general(一般)で見つけることができます。
注意すべき点:
- このソフトウェアは plex サーバーに依存しているため、plex サーバーをデプロイした後に行ってください。
- 一般設定で表示言語を中国語、地域をすべてに選択します。
- サーバー内の TV とアニメは分けて追加できます。
- メディアスクレイピングは TMDB へのアクセスに大きく依存するため、グローバルプロキシを設定することに注意してください。たとえば、ソフトルーターを介してプロキシアクセスを行う場合、overseerr が存在する仮想マシン内でプロキシ設定を行う際には、docker デプロイプロセスで
-e https_proxy=http://172.17.0.1:7890
を追加してください。そうしないと、overseerr はプロキシを設定できません。
メディアライブラリ編(emby および plex)#
展開
DockerHubで emby および plex のデプロイ方式を検索し、参考にしてデプロイします。以下は例です:
emby#
docker run -d \
--name=emby \
-e UID=1000 \
-e GID=1000 \
-e TZ=Asia/Shanghai \
-p 8096:8096 \
-p 8920:8920 \
-v /mnt/storage/emby-config:/config \
-v /mnt/storage/emby-lib:/lib \
-v /mnt/media:/media \
--restart unless-stopped \
lscr.io/linuxserver/emby:latest
plex#
docker run -d \
--name plex \
--network=host \
--restart=always \
-p 32400:32400/tcp \
-p 8324:8324/tcp \
-p 32469:32469/tcp \
-p 1900:1900/udp \
-p 32410:32410/udp \
-p 32412:32412/udp \
-p 32413:32413/udp \
-p 32414:32414/udp \
-e TZ="Asia/Shanghai" \
-e PLEX_CLAIM="plex_clam_code" \
-e ADVERTISE_IP="http://ip:32400/" \
-e PUID=1000 \
-e PGID=1000 \
-v /mnt/storatge/plex/database:/config \
-v /mnt/storatge/plex/transcode:/transcode \
-v /mnt/media:/data \
plexinc/pms-docker
plex_clam の取得ページ:https://www.plex.tv/zh/claim/
Tip
plex はオープンソースのメディアライブラリソフトウェアではなく、そのアカウント管理方式は公式サイトでアカウントを登録する必要があります。plex_clam_code はアカウントを通じて取得します。
字幕編#
リソースをダウンロードする過程で、一部の映画には埋め込まれた字幕がない場合があります。外国語の場合、理解が難しいことがあります。字幕サーバーを設定することでこの問題を解決できます。
展開
デプロイ#
docker run -d \
--name=bazarr \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 6767:6767 \
-v /mnt/storage/bazarr-config:/config \
-v /mnt/media/movies:/movies \
-v /mnt/media/tv:/tv \
-v /mnt/media/anime:/anime \
--restart unless-stopped \
lscr.io/linuxserver/bazarr:latest
設定#
bazarr の大まかな設定は radarr および sonarr と基本的に一致します。
異なる点は、3 か所で api-key を設定する必要があることです。sonarr と radarr の apikey はページから取得できますが、字幕ダウンロードの api-key は対応する字幕サイトでアカウントを登録して取得する必要があります。ここでは射手網 (伪)のものを使用しています。対応する登録リンクは文中にあります。