参考
django.contrib.staticfiles
の使い方の基本に関しては、How to manage static files (e.g. images, JavaScript, CSS) を読んでください。
The basic outline of putting static files into production consists of two
steps: run the collectstatic
command when static files change, then
arrange for the collected static files directory (STATIC_ROOT
) to be
moved to the static file server and served. Depending on
STATICFILES_STORAGE
, files may need to be moved to a new location
manually or the post_process
method of
the Storage
class might take care of that.
As with all deployment tasks, the devil's in the details. Every production setup will be a bit different, so you'll need to adapt the basic outline to fit your needs. Below are a few common patterns that might help.
静的ファイルをすでにサイトを配信しているのと同じサーバから配信したい場合、配信の手順は次のようになります。
collectstatic
を実行することで、すべての静的ファイルを STATIC_ROOT
で設定したディレクトリに集める。STATIC_ROOT
に置かれたファイルを STATIC_URL
から配信するように、Web サーバの設定を行う。たとえば、Apache と mod_wsgi を使用している場合、Apache と mod_wsgi を使用したファイルの配信 が参考になると思います。複数の Web サーバーがある場合は、おそらくこのプロセスを自動化したいと思うでしょう。
Most larger Django sites use a separate web server -- i.e., one that's not also running Django -- for serving static files. This server often runs a different type of web server -- faster but less full-featured. Some common choices are:
これらのサーバの設定方法は、このドキュメントの範囲外です。それぞれのサーバのドキュメントを参考に設定してください。
静的ファイルサーバでは Django が実行されていないので、次のようにデプロイの戦略を変更する必要があります。
collectstatic
を実行する。STATIC_ROOT
を静的ファイルサーバのファイル配信ディレクトリにアップロードします。これには、rsync を使用するのが一般的です。rsync を利用すれば、変更された静的ファイルの情報だけを転送することができます。Another common tactic is to serve static files from a cloud storage provider like Amazon's S3 and/or a CDN (content delivery network). This lets you ignore the problems of serving static files and can often make for faster-loading web pages (especially when using a CDN).
これらのサービスを使う場合でも、基本的なワークフローは上で説明した通りです。ただし、rsync
を使って静的ファイルをサーバに転送する代わりに、ストレージプロバイダや CDN に転送する必要があります。
There's any number of ways you might do this, but if the provider has an API,
you can use a custom file storage backend
to integrate the CDN with your Django project. If you've written or are using a
3rd party custom storage backend, you can tell collectstatic
to use
it by setting STATICFILES_STORAGE
to the storage engine.
たとえば、S3 storage backend を myproject.storage.S3Storage
としてすでに書いていれば、次のように書くだけでこのストレージを利用できます。
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
Once that's done, all you have to do is run collectstatic
and your
static files would be pushed through your storage package up to S3. If you
later needed to switch to a different storage provider, you may only have to
change your STATICFILES_STORAGE
setting.
For details on how you'd write one of these backends, see How to write a custom storage class. There are 3rd party apps available that provide storage backends for many common file storage APIs. A good starting point is the overview at djangopackages.org.
すべての設定、コマンド、テンプレートタグなどの詳細と、django.contrib.staticfiles
に含まれているその他の機能については、staticfiles リファレンス を読んでください。
2022年6月01日