ストレージとメディア配信
ローカルストレージ、外部ストレージサーバー(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つのディレクトリに動画に必要なすべてが揃います。レンディションの生成方法についてはトランスコーディングをご覧ください。
videos/ディレクトリには、アップロード中またはトランスコード中のアイテムのみが存在します。外部ストレージサーバー
メディアストレージシステムでは、任意の数のバックエンドを登録できます。新しい動画は常にデフォルトストレージに送られ、ストレージがディスク閾値を超えると、TubePressは自動的に次の利用可能なストレージに切り替えます。各動画は独自のstorage_idを記録しているため、既存の動画は書き込まれた場所から引き続き配信されます。
サポートされるバックエンドタイプは4種類のみです。
| タイプ | 用途 | 接続フィールド |
|---|---|---|
| Local | 単一サーバー、または導入時 | なし — public/uploadsから配信 |
| FTP | 安価なストレージVPSまたはシードボックス | ホスト、ポート(21)、ユーザー、パスワード、リモートパス、SSL/TLS、パッシブ |
| S3 | AWS S3、DigitalOcean Spaces、Backblaze、MinIO | アクセスキー、シークレット、バケット、リージョン、エンドポイント、プレフィックス |
| WebDAV | Nextcloudその他のWebDAVホスト | WebDAV URL、ユーザー、パスワード |
すべてのリモートストレージには、以下の運用設定もあります。
ストレージバックエンドの追加
- ストレージエディタを開く。
/admin/settings?tab=storageに移動し、Add Storageをクリックします。 - タイプを選択して名前を付ける。 Local、FTP、S3、またはWebDAVを選択します。フォームがそのタイプに必要なフィールドのみを表示するよう切り替わります。
- メディアURLと認証情報を入力する。 公開メディアURLを設定し、バックエンドのホスト/キー/パスを入力します。編集時にパスワードを空白のままにすると、保存済みのパスワードが維持されます。
- 運用オプションを設定する。 ステータス、最大ディスク使用量の閾値、URLに署名するかどうかを選択します。
- テストして保存する。 保存すると最初に接続テスト(モニタースクリプトを設定した場合はそのチェックも)が実行されます。失敗したチェックを修正してから保存します。必要に応じてデフォルトに設定して、新しいアップロードがそこに送られるようにします。
https://cdn.example.com)です。FTP/S3エンドポイントとは別物です。両者を混同することは、切り替え後に再生が壊れる最も一般的な原因です。ストレージモニター
リモートバックエンドでは、ストレージサーバーにインストールする小さなPHPスクリプトを使って、TubePressがディスクスペースと状態を監視できます。ストレージエディタのDisk Monitoringパネルで、Download monitor scriptをクリック(/api/storage-monitor-downloadから配信)し、リモートサーバーにアップロードして、その公開URLをMonitor script URLフィールドに貼り付けます。
接続が確立されると、エディタにリアルタイムのディスク使用量と最終チェック時刻が表示され、自動切り替えの閾値がそれらの値を使ってバックエンドの満杯を判断します。スクリプトはキーで保護されており、CMSのみがクエリを実行できます。
セキュアなメディア配信
ストレージでセキュアURLが有効な場合、TubePressは直接のファイルパスを提供しません。代わりに、/media/経由でルーティングされる短い期限付きリンクに署名します。
/media/{token}/{expires}/{path}403を返します。デフォルトの有効期間は6時間です。uploads/videos/…以下のファイル。トークンはリクエストごとにサーバー側で再計算・検証されます。ローカルストレージの場合、TubePressはHTTPレンジサポート付きでファイルを直接ストリーミングします(シークが機能します)。リモートストレージの場合は、トークンを検証してからCDN上のファイルへの302リダイレクトを発行します。生の動画はウェブサーバー層でもレート制限されます。ストレージエディタは、最初の数メガバイト後にストリーミングを制限しつつ、キーを持つトランスコードワーカーがフルスピードでダウンロードできるNginxスニペットをすぐに貼り付けられる形式で生成します。
CDNとCloudflare
TubePressはCloudflareの背後でスムーズに動作するよう設計されています。重要な点が2つあります。
- チャンクアップロードにより100 MBの制限を回避。 トランスコード結果は
/api/transcode-upload-chunk経由で分割してCMSに転送されるため、レンディションがどれほど大きくても個々のリクエストはCloudflareの無料プランの100 MB上限を超えません。 - 長期キャッシュとキャッシュバスティング。 静的アセットは長期の不変キャッシュヘッダーで配信され、リリースごとにバージョンクエリでキャッシュが無効化されます。これにより、プロキシが積極的にキャッシュしても古いファイルが配信されることはありません。
ストレージごとのNginxスニペットは、動画に適切なexpiresヘッダーと、セキュアなローカル配信で使用するオプションの/media/内部ロケーションを追加します。サイト設定にそのまま追加するだけで利用できます。