静的ファイルのデプロイ
本番環境での静的ファイルの提供
静的ファイルを本番環境に配置する基本的な概要は、2つのステップで構成されます。静的ファイルが変更されたときに:djadmin: `collectstatic` コマンドを実行し、収集された静的ファイルディレクトリ(:setting:`)を配置します。 STATIC_ROOT` )を静的ファイルサーバーに移動して提供します。 :setting: `STATICFILES_STORAGE` によっては、ファイルを手動で新しい場所に移動する必要がある場合や、Storage
クラスの post_process メソッドがそれを処理する場合があります。 。
すべての展開タスクと同様に、悪魔は細部に宿ります。 制作のセットアップはそれぞれ少し異なるため、ニーズに合わせて基本的なアウトラインを調整する必要があります。 以下は、役立つ可能性のあるいくつかの一般的なパターンです。
同じサーバーからサイトと静的ファイルを提供する
すでにサイトにサービスを提供しているのと同じサーバーから静的ファイルを提供する場合、プロセスは次のようになります。
- コードをデプロイメントサーバーにプッシュします。
- サーバーで:djadmin: `collectstatic` を実行して、すべての静的ファイルを:setting:` STATIC_ROOT` にコピーします。
- URL :setting: `STATIC_URL` の下の:setting:` STATIC_ROOT` にあるファイルを提供するようにWebサーバーを構成します。 たとえば、 Apacheとmod_wsgi でこれを行う方法は次のとおりです。
特に複数のWebサーバーがある場合は、このプロセスを自動化することをお勧めします。
専用サーバーから静的ファイルを提供する
ほとんどの大規模なDjangoサイトは、静的ファイルを提供するために別のWebサーバー(つまり、Djangoも実行していないサーバー)を使用します。 このサーバーは、多くの場合、異なるタイプのWebサーバーを実行します。高速ですが、機能が十分ではありません。 一般的な選択肢は次のとおりです。
これらのサーバーの構成は、このドキュメントの範囲外です。 手順については、各サーバーのそれぞれのドキュメントを確認してください。
静的ファイルサーバーはDjangoを実行しないため、展開戦略を次のように変更する必要があります。
- 静的ファイルが変更されたら、:djadmin: `collectstatic` をローカルで実行します。
- ローカルの:setting: `STATIC_ROOT` を静的ファイルサーバーのサービス対象のディレクトリにプッシュします。 rsync は、変更された静的ファイルのビットのみを転送する必要があるため、このステップの一般的な選択です。
クラウドサービスまたはCDNから静的ファイルを提供する
もう1つの一般的な戦術は、AmazonのS3やCDN(コンテンツ配信ネットワーク)などのクラウドストレージプロバイダーから静的ファイルを提供することです。 これにより、静的ファイルの提供の問題を無視でき、多くの場合、Webページの読み込みが速くなります(特にCDNを使用している場合)。
これらのサービスを使用する場合、基本的なワークフローは上記のようになりますが、rsync
を使用して静的ファイルをサーバーに転送する代わりに、静的ファイルをストレージプロバイダーまたはCDNに転送する必要があります。 。
これを行う方法はいくつもありますが、プロバイダーにAPIがある場合は、カスタムファイルストレージバックエンドを使用してCDNをDjangoプロジェクトと統合できます。 サードパーティのカスタムストレージバックエンドを作成または使用している場合は、:setting: `STATICFILES_STORAGE` をストレージに設定することで、:djadmin:` collectstatic` に使用するように指示できます。エンジン。
たとえば、myproject.storage.S3Storage
でS3ストレージバックエンドを作成した場合は、次のコマンドで使用できます。
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
それが完了したら、:djadmin: `collectstatic` を実行するだけで、静的ファイルがストレージパッケージを介してS3までプッシュされます。 後で別のストレージプロバイダーに切り替える必要がある場合は、:setting: `STATICFILES_STORAGE` 設定を変更するだけで済みます。
これらのバックエンドのいずれかを作成する方法の詳細については、カスタムストレージシステムの作成を参照してください。 多くの一般的なファイルストレージAPIのストレージバックエンドを提供するサードパーティのアプリが利用可能です。 良い出発点は、djangopackages.org の概要です。
もっと詳しく知る
django.contrib.staticfiles に含まれるすべての設定、コマンド、テンプレートタグ、およびその他の要素の詳細については、 staticfilesリファレンスを参照してください。