コンテンツへスキップ
TubePress — 無料・セルフホスト & 積極的メンテナンス
メディアとトランスコード

ストレージとメディア配信

ローカルストレージ、外部ストレージサーバー(S3、FTP、WebDAV)、そして安全なメディアプロキシについて解説します。

TubePressはアップロードされたすべての動画、トランスコードされたレンディション、プレビューアセットをディスクに保存し、1台以上の外部ストレージサーバーへ透過的にオフロードできます。このページでは、ファイルの保存場所、メディアストレージシステムによるバックエンド間での分散方法、そして生ファイルを公開せずに視聴者へメディアを届ける仕組みを説明します。

ストレージは/admin/settings?tab=storageで設定します。ローカルディスクのみで運用することも、FTP・S3互換・WebDAVバックエンドを追加してTubePressに順番に振り分けさせることもできます。

TubePressのメディア保存方法

アップロードはpublic/uploads/以下に保存されます。各動画は専用フォルダ(動画のvideo_folder)を持ち、オリジナルソース、トランスコーダが生成した各レンディション、プレイヤーに必要な小さなアセットが格納されます。

public/uploads/
  videos/
    a1b2c3d4.../        one folder per video (video_folder)
      video.mp4         original upload (source)
      video_1080p.mp4   processed source rendition
      video_720p.mp4    transcoded rendition
      video_480p.mp4    transcoded rendition
      timeline.vtt      scrub-preview sprite map
      preview.mp4       hover-preview clip
  thumbnails/           poster images
  watermark/            watermark PNG
  intros/               pre-roll / post-roll clips
  branding/             logo, favicon, background

トランスコーダは最高解像度のvideo_<height>p.mp4ファイルを探してソースを検出し、見つからない場合は生のvideo.mp4.webm.oggにフォールバックします。低解像度レンディションも同じフォルダに書き込まれるため、1つのディレクトリに動画に必要なすべてが揃います。レンディションの生成方法についてはトランスコーディングをご覧ください。

CDNが設定されている場合、ローカルは一時領域です。 外部デフォルトストレージを使用する場合、各アップロードはローカルで処理され、バックエンドに安全に転送された後でアプリサーバーから削除されます。ローカルのvideos/ディレクトリには、アップロード中またはトランスコード中のアイテムのみが存在します。

外部ストレージサーバー

メディアストレージシステムでは、任意の数のバックエンドを登録できます。新しい動画は常にデフォルトストレージに送られ、ストレージがディスク閾値を超えると、TubePressは自動的に次の利用可能なストレージに切り替えます。各動画は独自のstorage_idを記録しているため、既存の動画は書き込まれた場所から引き続き配信されます。

サポートされるバックエンドタイプは4種類のみです。

タイプ用途接続フィールド
Local単一サーバー、または導入時なし — public/uploadsから配信
FTP安価なストレージVPSまたはシードボックスホスト、ポート(21)、ユーザー、パスワード、リモートパス、SSL/TLS、パッシブ
S3AWS S3、DigitalOcean Spaces、Backblaze、MinIOアクセスキー、シークレット、バケット、リージョン、エンドポイント、プレフィックス
WebDAVNextcloudその他のWebDAVホストWebDAV URL、ユーザー、パスワード

すべてのリモートストレージには、以下の運用設定もあります。

メディアURL
訪問者がファイルを読み込む公開HTTPアドレス。FTP/S3の制御アドレスとは別のものです。
ステータス
アクティブ(新しい動画を受け付ける)、読み取り専用(既存ファイルのみ配信)、無効(オフライン)のいずれかです。
最大ディスク使用量
50–99%(デフォルト90)。この閾値に達すると、新しいアップロードは自動的に次のストレージに切り替わります。
セキュアURL
メディアリンクに有効期限付きトークンで署名します。下記のセキュアなメディア配信をご覧ください。

ストレージバックエンドの追加

  1. ストレージエディタを開く。 /admin/settings?tab=storageに移動し、Add Storageをクリックします。
  2. タイプを選択して名前を付ける。 Local、FTP、S3、またはWebDAVを選択します。フォームがそのタイプに必要なフィールドのみを表示するよう切り替わります。
  3. メディアURLと認証情報を入力する。 公開メディアURLを設定し、バックエンドのホスト/キー/パスを入力します。編集時にパスワードを空白のままにすると、保存済みのパスワードが維持されます。
  4. 運用オプションを設定する。 ステータス、最大ディスク使用量の閾値、URLに署名するかどうかを選択します。
  5. テストして保存する。 保存すると最初に接続テスト(モニタースクリプトを設定した場合はそのチェックも)が実行されます。失敗したチェックを修正してから保存します。必要に応じてデフォルトに設定して、新しいアップロードがそこに送られるようにします。
メディアURL vs. 制御アドレス。 メディアURLはブラウザが取得するもの(例:https://cdn.example.com)です。FTP/S3エンドポイントとは別物です。両者を混同することは、切り替え後に再生が壊れる最も一般的な原因です。

ストレージモニター

リモートバックエンドでは、ストレージサーバーにインストールする小さなPHPスクリプトを使って、TubePressがディスクスペースと状態を監視できます。ストレージエディタのDisk Monitoringパネルで、Download monitor scriptをクリック(/api/storage-monitor-downloadから配信)し、リモートサーバーにアップロードして、その公開URLをMonitor script URLフィールドに貼り付けます。

接続が確立されると、エディタにリアルタイムのディスク使用量と最終チェック時刻が表示され、自動切り替えの閾値がそれらの値を使ってバックエンドの満杯を判断します。スクリプトはキーで保護されており、CMSのみがクエリを実行できます。

すべてのCDNサーバーに設定することをお勧めします。 モニターがない場合、TubePressはリモートのディスク使用量を読み取れないため、最大使用量による自動切り替えは測定可能なストレージにしか機能しません。

セキュアなメディア配信

ストレージでセキュアURLが有効な場合、TubePressは直接のファイルパスを提供しません。代わりに、/media/経由でルーティングされる短い期限付きリンクに署名します。

/media/{token}/{expires}/{path}
token
パスと有効期限のHMAC-SHA256(16文字)。そのストレージのプライベートシークレットで署名されます。
expires
Unixタイムスタンプ。期限が過ぎるとリンクは403を返します。デフォルトの有効期間は6時間です。
path
リクエストされたuploads/videos/…以下のファイル。

トークンはリクエストごとにサーバー側で再計算・検証されます。ローカルストレージの場合、TubePressはHTTPレンジサポート付きでファイルを直接ストリーミングします(シークが機能します)。リモートストレージの場合は、トークンを検証してからCDN上のファイルへの302リダイレクトを発行します。生の動画はウェブサーバー層でもレート制限されます。ストレージエディタは、最初の数メガバイト後にストリーミングを制限しつつ、キーを持つトランスコードワーカーがフルスピードでダウンロードできるNginxスニペットをすぐに貼り付けられる形式で生成します。

トークンはパス、有効期限、シークレットに紐付けられています。 ストレージのシークレットをローテーションすると既存のすべてのリンクが無効になり、期限切れのリンクは自動的に機能しなくなります。セキュアURLとレート制限スニペットを組み合わせることで、効果的なスクレイピング対策になります。セキュリティをご覧ください。

CDNとCloudflare

TubePressはCloudflareの背後でスムーズに動作するよう設計されています。重要な点が2つあります。

  • チャンクアップロードにより100 MBの制限を回避。 トランスコード結果は/api/transcode-upload-chunk経由で分割してCMSに転送されるため、レンディションがどれほど大きくても個々のリクエストはCloudflareの無料プランの100 MB上限を超えません。
  • 長期キャッシュとキャッシュバスティング。 静的アセットは長期の不変キャッシュヘッダーで配信され、リリースごとにバージョンクエリでキャッシュが無効化されます。これにより、プロキシが積極的にキャッシュしても古いファイルが配信されることはありません。

ストレージごとのNginxスニペットは、動画に適切なexpiresヘッダーと、セキュアなローカル配信で使用するオプションの/media/内部ロケーションを追加します。サイト設定にそのまま追加するだけで利用できます。

次のステップ

まだお困りですか?

ダッシュボードからチケットを送信してください。サポートチームがお手伝いします。

ライブデモを試す → TubePress をダウンロード →