簡単な紹介#
展開
全体方案#
展開
方案はインターネット上の既存のチュートリアルに基づき、仮想化方式で独自のストリーミングメディアを構築して実践することを目的としており、自動化された視聴体験を実現しながら、仮想化やサーバーに関連する知識を学ぶことができます。
ストリーミングサービスの全体的なフレームワークは以下の通りです:
- 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 は対応する字幕サイトでアカウントを登録して取得する必要があります。ここでは射手網 (伪)のものを使用しています。対応する登録リンクは文中にあります。