静的ファイルをデプロイするLink to this heading

本番環境における静的ファイルの配信Link to this heading

本番環境で静的ファイルを配置する基本的な手順は、次の2ステップからなります。まず、静的ファイルが変更されたときに collectstatic コマンドを実行します。その後、収集された静的ファイルのディレクトリ (STATIC_ROOT) を静的ファイルサーバーに移動し、配信できるようにします。staticfiles の STORAGES エイリアスに応じて、ファイルを手動で新しい場所に移動しなければならないこともありますが、Storage クラスの post_process メソッドで処理できることもあります。

すべてのデプロイメントタスクと同様に、悪魔は細部に宿ります。プロダクションのセットアップはそれぞれ少しずつ異なるので、基本的なアウトラインをニーズに合わせて変更する必要があります。以下に、役立つかもしれないいくつかの一般的なパターンを示します。

Having your Django application serve static filesLink to this heading

While web servers are much better and faster at serving static files, it is possible to have Django serve them using community-maintained packages. There are static file packages highlighted on the Community Ecosystem page. The Django Packages Static Builders grid has even more options for you!

サイトと静的ファイルを同じサーバから配信するLink to this heading

静的ファイルをすでにサイトを配信しているのと同じサーバから配信したい場合、配信の手順は次のようになります。

複数の Web サーバーがある場合は、おそらくこのプロセスを自動化したいと思うでしょう。

専用のサーバから静的ファイルを配信するLink to this heading

ほとんどの大規模な Django サイトでは、静的ファイルの配信に別の Web サーバ(つまり Django を動かしていないサーバ)を使っています。このサーバは、多くの場合、別のタイプの Web サーバを実行しています。高速で、機能が限定的なものです。よくある選択肢は下記です:

これらのサーバの設定方法は、このドキュメントの範囲外です。それぞれのサーバのドキュメントを参考に設定してください。

静的ファイルサーバでは Django が実行されていないので、次のようにデプロイの戦略を変更する必要があります。

  • 静的ファイルが変更されたら、ローカル側で collectstatic を実行する。

  • ローカルの STATIC_ROOT を静的ファイルサーバのファイル配信ディレクトリに push します。これには通常、rsync を使います。変更された静的ファイルだけを転送できるからです。

クラウドサービスや CDN から静的ファイルを配信するLink to this heading

もう1つの一般的な方法は、AmazonのS3やCDN(コンテンツ・デリバリー・ネットワーク)のようなクラウドストレージから静的ファイルを配信することです。これにより、静的ファイルを配信する際の問題を無視することができ、多くの場合、Webページの読み込みが速くなります(特にCDNを使用する場合)。

これらのサービスを使う場合でも、基本的なワークフローは上で説明した通りです。ただし、rsync を使って静的ファイルをサーバに転送する代わりに、ストレージプロバイダや CDN に転送する必要があります。

そのための方法はいろいろありますが、プロバイダが API を提供している場合、カスタムのファイルストレージバックエンド を使って Django プロジェクトと CDN を統合できます。独自に作成したカスタムストレージバックエンドを使用している場合や、サードパーティのカスタムストレージバックエンドを使用している場合は、STORAGES に staticfiles を設定することで collectstatic にそれを使うよう指示できます。

たとえば、S3 storage backend を myproject.storage.S3Storage としてすでに書いていれば、次のように書くだけでこのストレージを利用できます。

Code
STORAGES = {
    # ...
    "staticfiles": {"BACKEND": "myproject.storage.S3Storage"}
}

これが完了したら、 collectstatic を実行するだけで、静的ファイルがストレージパッケージを通して S3 にプッシュされます。後で別のストレージプロバイダに切り替える必要がある場合は、 STORAGES 設定の staticfiles を変更するだけです。

これらのバックエンドの書き方の詳細については カスタムのストレージクラスを書く を参照してください。多くの一般的なファイルストレージ API 用のストレージバックエンドを提供するサードパーティアプリがあります。良い出発点は djangopackages.org の overview です。

さらに学ぶLink to this heading

すべての設定、コマンド、テンプレートタグなどの詳細と、django.contrib.staticfiles に含まれているその他の機能については、staticfiles リファレンス を読んでください。