Flysystem

PHP LeagueのFlysystemライブラリを使用してDrupalにファイルシステム抽象化レイヤーを提供し、ローカルとリモートのファイルシステム間の切り替えを容易にします。

flysystem
2,370 sites
70
drupal.org

インストール

Drupal 11 v2.3.0
composer require 'drupal/flysystem:^2.3'
Drupal 10 v2.2.0
composer require 'drupal/flysystem:^2.2'

概要

Flysystem for Drupalは、強力なPHP LeagueのFlysystemライブラリをDrupalのストリームラッパーシステムと統合します。これにより、サイト管理者や開発者は、統一されたAPIを通じてさまざまなファイルシステムバックエンド(ローカル、FTP、クラウドストレージなど)をシームレスに使用でき、技術的負債を削減し、ベンダーロックインを排除できます。

このモジュールはsettings.phpの設定に基づいてカスタムストリームラッパーを登録し、'scheme-name://path/to/file.txt'のようなURIでファイルにアクセスできるようにします。複数のバックエンドにわたるファイルレプリケーション、DrupalのCache APIを使用したメタデータキャッシュ、リモートファイルシステムからのCSS/JSアセット配信(CDN統合に便利)などの機能をサポートしています。

プラグインアーキテクチャにより、Dropbox、Rackspace、Amazon S3、SFTP、ZIPアーカイブサポートなど、追加のアダプターをcontribモジュール経由でインストールできます。イメージスタイルはリモートファイルシステムとシームレスに動作し、必要に応じて派生画像を自動生成します。

Features

  • PHP LeagueのFlysystemライブラリをDrupalのストリームラッパーシステムと統合し、統一されたファイルシステムアクセスを提供
  • 拡張可能なプラグインアーキテクチャを備えたローカルファイルシステムおよびFTPアダプターの組み込みサポート
  • バックアップ目的で複数のファイルシステムに同時に書き込むファイルレプリケーション機能
  • DrupalのCache APIを使用したメタデータキャッシュにより、リモートファイルシステムへの呼び出しを削減
  • CDN統合のためのカスタムストリームラッパーからのCSSおよびJSアセット配信
  • リモートファイルシステム用のオンデマンド派生画像生成を伴う完全なイメージスタイルサポート
  • 異なるファイルシステムバックエンド間でファイルを同期するための管理者UI
  • ローカルファイルシステムでのセキュリティ保護のための.htaccessファイル自動作成
  • ファイルシステムの健全性と設定エラーを表示するシステムステータスページ統合
  • ファイルシステムの整合性を自動的に確保するフック実装(cron、rebuild)

Use Cases

クラウドストレージへのファイル移行

Flysystemを使用して、ローカルストレージからAmazon S3やその他のクラウドプロバイダーにファイルを段階的に移行します。ローカルとS3の両方のスキームを設定し、移行中はレプリケーション機能を使用して両方に書き込み、移行が完了したらS3のみに切り替えます。

アセットのCDN統合

serve_jsとserve_cssオプションを有効にしたスキームを設定し、CloudFrontを使用したS3などのCDNバックアップストレージから集約されたCSSとJavaScriptファイルを配信します。これにより、Webサーバーからの静的アセット配信をオフロードできます。

セキュアなファイルストレージ

機密ファイルを、直接Webアクセスできない別のファイルシステム(FTPサーバー、プライベートS3バケット)に保存します。ファイルはDrupalのアクセス制御システムを通じて配信されます。

分散ファイルシステム

マルチサーバー環境では、共有リモートファイルシステム(S3、ネットワークストレージ)を使用して、同期の問題なくすべてのアプリケーションサーバーが同じファイルにアクセスできるようにします。

ファイルバックアップと冗長性

replicate設定オプションを使用して、すべてのファイルをバックアップファイルシステムに自動的に書き込みます。プライマリ読み取りは高速なローカルストレージから行い、書き込みはローカルとリモートバックアップの両方に行います。

開発/ステージング環境でのファイル共有

開発、ステージング、本番環境全体で共通のリモートストレージバックエンドを使用し、手動同期なしでユーザーがアップロードしたファイルを共有します。

Tips

  • ストリームラッパーのスキーム名にはアンダースコアを含められません - 代わりにハイフンを使用してください(例:'my_files'ではなく'my-files')
  • リモートファイルシステムではcacheオプションを有効にして、API呼び出しを削減しパフォーマンスを向上させてください
  • 移行中はreplicate機能を使用して、ストレージバックエンドの移行中もファイルの可用性を維持してください
  • /admin/reports/statusを定期的に確認してください - Flysystemは開発中のすべてのページ読み込みで検証を実行し、問題を報告します
  • ローカルパブリックファイルシステムの場合、直接URLアクセスが機能するようにルートパスがDrupalインストールルートからの相対パスであることを確認してください
  • モジュールはインストール時とcron実行時にディレクトリと.htaccessファイルを自動的に作成します

Technical Details

Admin Pages 1
Flysystem /admin/config/media/file-system/flysystem

異なるFlysystemファイルシステムバックエンド間でファイルを同期します。このページでは、管理者が設定済みのストリームラッパー間ですべてのファイルをコピーでき、ストレージバックエンド間のファイル移行やバックアップ作成に便利です。

権限 1
Flysystemの管理

ユーザーがFlysystem設定ページにアクセスし、ファイルシステム同期操作を実行できるようにします。ファイル操作の機密性の高さから、これは制限付き権限です。

Hooks 5
hook_cron

cronの実行ごとにflysystem_factory->ensure()を呼び出し、ファイルシステム設定を検証してエラーをログに記録します。

hook_rebuild

Drupalキャッシュが再構築されるときにflysystem_factory->ensure()を呼び出し、ファイルシステムディレクトリが存在し、適切に設定されていることを確認します。

hook_file_download

Flysystem管理ファイルのファイルダウンロードを処理し、適切なContent-TypeとContent-Lengthヘッダーを返します。

hook_requirements

インストール時とランタイム時にFlysystem設定を検証し、無効なスキーム名、不足している依存関係、ファイルシステムエラーをチェックします。

hook_install

モジュールがインストールされるときにflysystem_factory->ensure()を呼び出し、必要なディレクトリと.htaccessファイルを作成します。

Troubleshooting 6
設定後にファイルにアクセスできない

/admin/reports/statusでFlysystem固有のエラーメッセージを確認してください。スキーム名が必要な形式に従っているか確認してください(文字、数字、+、.、-のみ、アンダースコアは不可)。ディレクトリパスが存在し、書き込み可能であることを確認してください。

.htaccessファイルを書き込めない

Webサーバーがルートディレクトリへの書き込み権限を持っていることを確認してください。モジュールはこのエラーをステータスページに報告し、DrupalセキュリティアドバイザリSA-CORE-2013-003へのリンクを表示します。

FTP接続に失敗する

PHP FTP拡張機能がインストールされていることを確認してください(phpinfo()で確認)。ホスト、ポート、ユーザー名、パスワードが正しいことを確認してください。ファイアウォールの背後にいる場合は、パッシブモードを有効にしてみてください。

リモートファイルのイメージスタイルが生成されない

imageモジュールが有効になっていることを確認してください。ソースファイルシステムにファイルが存在することを確認してください。イメージスタイル生成は競合状態を防ぐためにロックを使用します - ロックの問題を確認してください。

依存関係不足エラー

composer require drupal/flysystemを実行して、すべての依存関係(league/flysystem、league/flysystem-replicate-adapter、twistor/flysystem-stream-wrapper)がインストールされていることを確認してください。

設定変更後にスキームが認識されない

drush crですべてのDrupalキャッシュをクリアしてください。ストリームラッパーはコンテナのコンパイル時に登録されるため、settings.phpの変更にはキャッシュの再構築が必要です。

Security Notes 5
  • 'administer flysystem'権限は、ファイルシステム操作の機密性の高さから制限付きとしてマークされています
  • ローカルファイルシステムアダプターは、アップロードされたPHPファイルの直接実行を防ぐために.htaccessファイルを自動作成します
  • FTP認証情報はsettings.phpにプレーンテキストで保存されます - このファイルに適切なファイル権限を確保してください
  • パブリックローカルファイルシステムを使用する場合、適切なURL生成のためにルートディレクトリがWebルート内にあることを確認してください
  • レプリケーション機能は両方のファイルシステムに書き込みます - 両方の宛先に適切なアクセス制御があることを確認してください