VPS はオフライン ダウンロード サーバーを構築します (ネットワーク ディスクの時代以降)

VPS はオフライン ダウンロード サーバーを構築します (ネットワーク ディスクの時代以降)

モチベーション

学習の必要性から、海外のサーバーメーカー(どこのメーカーかは言いません)のVPSサービスを購入しました。ただし、ラダーとして使用しても、1 か月あたり 1T のトラフィックが使い果たされることはありません。ようやく栄養が十分摂れた気がして、観る映画を探したいです。
残念ながら、Baidu Netdisk の速度は本当に衝撃的です。1 年間の Baidu Netdisk スーパー メンバーシップは非常に高価で、Baidu のオフライン ダウンロードは実際にはオフラインではありません。サーバー上のファイルをユーザーに引き寄せるだけです。希少なリソースを見つけたい場合、Baidu Netdisk は役に立ちません。

ねえ、VPS を使用して独自のオフライン ダウンロード サーバーを構築できますか?この方法では、余剰の帯域幅リソースを活用してダウンロード速度を上げることができます。これは素晴らしいことではないでしょうか。この疑問を念頭に置き、私は孤独な夜にそれを作り始めました。

建設プロセス

マシン構成の配布: CentOS 6.9
メモリ: 512MB
CPU: シングルコア 帯域幅: 1000Mbps

このマシンの構成はそれほど高くはありませんが、ダウンロードサーバーとして使用するには十分すぎるほどです。

ツールの選択

いくつか調べた結果、デプロイメント ツールとして transmission + vsftpd + nginx + aria2c を選択しました。

  • transmission、transmission-daemon: トレントやマグネットのクライアントとして、またオフラインダウンロードのコアツールとして。
  • vsftpd: ファイルのダウンロードを管理する ftp を構築するために使用されます (貧弱な VPS には 10G のディスク容量しかありません T_T)
  • nginx: 高性能な nginx を静的ファイル サーバーとして使用します。
  • aria2c: nginx によって表示されるファイル リストからオフライン ファイルを高速にダウンロードするマルチスレッド ダウンローダー。

導入の実践

1. トランスミッションをインストールし、構成を変更してサービスを開始する

トランスミッションとトランスミッションデーモンをインストールする

$ wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
$ rpm -ivh epel-release-6-8.noarch.rpm
$ yum -y アップグレード
$ yum -y トランスミッショントランスミッションデーモンをインストールします

設定を変更して、トランスミッションサービスを開始します。/var/lib/transmission/.config/transmission パスの下にある settings.json ファイルは、トランスミッションの設定ファイルです。この中には多くの設定があります。リモートソフトウェアを使用してトランスミッションを制御できるようにするには、次の設定を変更する必要があります。

「rpc認証必須」: true、
"rpc 有効": true、
"rpc-password": "リモート呼び出しパスワード",
"rpc-whitelist-enabled": false,
"rpc-username": "リモート呼び出しユーザー名",

送信サービスを開始する

$ sudo サービス伝送デーモンを開始

したがって、http://host_ip:9091 から転送サービスにアクセスできます。テスト後、速度は依然として良好で、ピーク速度は 30MB/s です。

さらに、ページにアクセスせずに送信を制御するために、Transmission-Remote-GUIをインストールすることもできます。Linux(Mint)のアプリストアからダウンロードできます。操作方法はuTorrentのUIインターフェースに似ています。

2. vsftpdはFTPサーバーを構築する

FTP サーバーの構築は、ファイルをダウンロードするために使用されません。FTP によるファイルのダウンロード速度は非常に遅いです。したがって、FTP サーバーの役割はファイルの管理であり、一般的に言えば、削除操作です。

vsftpdをインストールする

$ yum install -y vsftpd

仮想ユーザーではなくLinuxユーザーでログインします(データベースのインストールが面倒なので)
vsftpdはデフォルトではrootログインを許可していないため、ユーザーを追加する必要があります。

ユーザーの追加

$ ユーザー追加 ftpuser
$ パスワード ftpuser

ftpuserのホームディレクトリを送信のダウンロードディレクトリに変更します

$ usermod -d /var/lib/transmission/Downloads ftpuser
$ rm -rf /home/ftpuser

vsftpd設定ファイル(/etc/vsftpd/vsftpd.conf)を変更します。
設定ファイルは次のとおりです。

# cat vsftpd.conf | grep -v "#" を使用して生成します
匿名を有効にする=いいえ
ローカル有効=はい
書き込み有効=はい
ローカル_umask=022
dirmessage_enable=はい
xferlog_enable=はい
ポート20からの接続=はい
xferlog_std_format=はい
ftpd_banner=プライベート FTP サービスへようこそ。
chroot_list_enable=いいえ
listen_ipv6=はい

pam_service_name=vsftpd
ユーザーリストを有効にする=はい
tcp_wrappers=はい
local_root=/var/lib/transmission/ダウンロード

chroot_list_enable=NO の構成は、ユーザーがホーム ディレクトリから切り替えることができないことを示します。

vsftpdを起動する

sudo サービス vsftpd を開始

このように、ftp を使用して、転送によってダウンロードされたファイルを管理できます。

3. nginxで静的ファイルサーバーを構築する

ダウンロードしたリソースを表示するために、静的リソース サーバーとして nginx を使用します。インターネットには nginx のインストールに関するチュートリアルが多数あります。フォローアップとして記入してください。

主に構成について話す

nginx 設定ファイル (/etc/nginx/conf.d/default.conf) を変更します。

自動インデックスオン;
autoindex_exact_size をオン;
autoindex_localtime をオン;

サーバー{
  聞く 8090;
  聞く [::]:8090;
  server_name ローカルホスト;

  文字セット utf-8;
  位置 / {
    ルート /var/lib/transmission/Downloads;
    インデックス index.html index.htm;
  }

nginx サービスを開始すると、ポート 8090 経由でファイル リストを取得できます。

4. aria2c ファイルをダウンロード

aria2c は、サーバーからファイルをダウンロードし、自分のマシンにインストールするために使用されます。

主にaria2cマルチスレッドによるダウンロードの高速化について説明します

aria2cにはマルチスレッドダウンロードに関連するパラメータがいくつかあります。

パラメータ x: --max-connection-per-server=<NUM>、サーバーあたりの最大接続数、デフォルトは 1
パラメータ s: --split=<N> は、各ファイルのダウンロード接続数を示します。デフォルトは 5 です。-s は -x によって制限されます。s のデフォルトの x が 5 より大きい場合、x も s に制限されます。

したがって、大きなファイルの場合、 x および s パラメータを適切に増やすと、ダウンロード速度が向上します。

参考リンク:

CentOS 6 に Transmission BitTorrent クライアントをインストールする方法
Linux 上で FTP サーバーを構築する

以下もご興味があるかもしれません:
  • Java共有ネットワークディスクを構築するためのステップバイステップガイド
  • Baidu ネットワーク ディスクの実際のダウンロード リンクを取得する Java メソッド
  • ワンクリックで Baidu ネットワーク ディスク抽出コードを取得する Python メソッド
  • Linux で nextcloud を使用して個人用ネットワーク ディスクを構築するコード例
  • SpringBoot 開発事例: プライベートクラウドディスクの作成
  • Dockerを使用してNextCloudネットワークディスクを展開する方法
  • 電子を使用して Baidu ネットワーク ディスク フローティング ウィンドウ機能を実装するためのサンプル コード
  • JS が Baidu ネットワーク ディスクの任意のファイルの強制ダウンロード機能を実装
  • Javaでパーソナルネットワークディスクを構築する方法

<<:  MySQL 百万レベルのデータページングクエリ最適化ソリューション

>>:  JavaScript デザインパターン 責任連鎖パターン

推薦する

虫眼鏡ケースのJavaScriptオブジェクト指向実装

この記事では、参考までに、虫眼鏡のJavaScriptオブジェクト指向実装の具体的なコードを紹介しま...

ミニプログラム開発ツールのソースコードからの基本実装の分析

目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...

Vueはツリーテーブルを実装する

この記事では、ツリーテーブルを実装するためのVueの具体的なコードを例として紹介します。具体的な内容...

初心者がHTMLタグを学ぶ(2)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

Docker で MySQL サービスをデプロイする方法と、遭遇する落とし穴

最近、ポーターを学んでいます。こんなに強力なものがあったなんて、今まで知らなかった気がします。クラス...

ul リスト タグ デザイン ウェブ ページ 複数列レイアウト

数日前、CSS で 3 列レイアウトを書いていたときに、突然この方法を思いつきました。このアイデアは...

js 加算、減算、乗算、除算の正確な計算方法のサンプルコード

序文コンピュータの数値は浮動小数点であるため、計算プロセス中に取得されるデータは通常正確ではなく、そ...

PID を作成できないために MySQL が起動できない問題を解決する方法

問題の説明MySQL 起動エラー メッセージは次のとおりです。 mysqld を起動します (sys...

おすすめの無料英語手書きフォント20選

Jellyka Beesアンティーク手書き [ank]* ジェリーカ・カティカップケーキ LHF ジ...

MySQL の FIND_IN_SET() と IN の違いを簡単に分析します

以前、あるプロジェクトでMysql FIND_IN_SET関数を使用したことがありますが、非常に便利...

シンプルなアコーディオン効果を実現するjs

この記事では、アコーディオン効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...

MySQL シャーディングの詳細

1. ビジネスシナリオの紹介MySQLを使用する電子商取引システムがあるとします。大量のデータを保存...

React コンポーネントのコンストラクタとスーパーの知識ポイントのまとめ

1. Reactでクラス宣言する際のヒント 上記のように、Child クラスは class キーワー...

MySQLテーブルのテーブル構造を素早く変更する方法

MySQL テーブルのテーブル構造をすばやく変更する - 「MySQL 管理」から抜粋 ALTER ...

HTMLはテキスト行のインターセプトの実装原理とコードを超えています

複数行を超えるテキストをインターセプトするための HTML コードは次のとおりです。 HTML:コー...