LoginSignup
41
22

More than 1 year has passed since last update.

Djangoの開発サーバーをプロダクション環境で使わないように、という話

Last updated at Posted at 2019-04-25

TL;DR

  • Djangoの開発サーバーはあくまで開発用、プロダクション環境では使わないこと
  • プロダクション環境では、GunicornやuWSGIなどのWSGIサーバーを使うこと

Djangoの開発サーバー

Djangoには、runserverで起動できるWebサーバーが付属しています。

開発用サーバー

この開発サーバーはPythonで書かれており、またアプリケーションを変更しても(ある程度)リロードしてくれる、開発中に便利なツールになっています。

開発サーバーをプロダクション環境では使わないこと

この開発サーバーをプロダクション環境で利用することは、推奨されていません。というか、禁止されています。絶対に使うな、という感じです。

ここでちょっと注意しておきましょう。このサーバは開発中の利用だけを考えて作られています。絶対に運用環境では 使わないでください (筆者たちの専門は Web フレームワークであって、Web サーバではありません)。

Now’s a good time to note: don’t use this server in anything resembling a production environment. It’s intended only for use while developing. (We’re in the business of making Web frameworks, not Web servers.)

The development server

なのですが、この開発サーバーをプロダクション環境で使ってはいけないの?他のサーバーとなにが違うんですか?という質問はややあるようです。

Why should I use nginx server or apache on production vps but not just manage.py runserver?

Django: Difference between using server through manage.py and other servers like gunicorn etc. Which is better?

Is it OK to use "python manage.py runserver" in production?

別にミドルウェアなどを用意する手間が嫌だ、みたいな話なんでしょうかね。

でも、パフォーマンス出ませんよ、と。

WSGIサーバーを使おう

では、開発サーバーを使わない場合はどうするの?という話ですが、GunicornやuWSGIなどのWSGIサーバーを使い、こちらにアプリケーションをデプロイします。

Gunicorn

uWSGI

さらに言うと、これらのWSGIサーバーの前段にリバースプロキシとしてnginxなどのWebサーバーを配置することが推奨されています。

自身で困ったこと

で、なんでこういう記事を書いたかというと、身の回りに割とCPUを使うアプリケーションがDjangoで書かれていて、複数リクエストを全然さばけない状態のものがあったのですが、これがこそっとDjangonの開発サーバーで動いていました。

CPUバウンドな処理なので複数CPUを使ってくれないと困るのですが、これをやるにはGunicornやuWSGIを使って複数プロセスでアプリケーションを動作させる必要があります。
※PythonはGILの制約があるので、ひとつのプロセス中で同時に動かせるスレッドはひとつだけです

これをなんとかするために、この環境ではuWSGIでアプリケーションを動かすことにしました。

もちろん、サーバーを変更して動作するかという確認は必要になるのですが…。

結果、無事に複数CPUを使ってある程度リクエストをさばけるようになりました、と。

開発中の構成と、プロダクション向けの構成は、ちゃんと考えましょうね、という話でした。

41
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
22