djangoの本番環境のために、nginx(Webサーバ+リバースプロキシ)とgunicorn(アプリサーバ)をdockerに用意する

djangoの本番環境のために、nginx(Webサーバ+リバースプロキシ)とgunicorn(アプリサーバ)をdockerに用意する

laravel(PHP)の場合は、もともとWebサーバでC言語を動作させたい!という要求から生まれた言語なので、生粋のWebサーバサイド言語。そのため、何もしなくてもWebサーバで動作する。
しかし、pythonは違う。Webサーバで動作する仕組みがない。なのでWebサーバ(nginx)とAPサーバ(gunicorn)が分離している。

[ブラウザ (JavaScript)]
⇅ HTTP通信
[Webサーバ (HTML, PHP)]
⇅ API通信 or リバースプロキシ
[APサーバ (Django, Python)]
⇅ SQL/ORM
[DBサーバ (SQL)]

WSGI(Web Server Gateway Interface)は、インターフェース(仕様)で
そのWSGIを実装したのが、gunicorn(グリーン・ユニコーン)、ガンダム・ユニコーンみたいな字面

Dockerを使って、Django開発環境を共通化しておく

0, .envファイルを導入(laravelと違って、djangoには最初から入ってないので自分で導入する必要がある)
同じ値で、.env.exampleファイルも用意しておく

1, requirements.txt に gunicorn(pythonアプリサーバ)と.env用ライブラリ を追加

2, Webサーバ(リバースプロキシ)のnginx設定ファイル(nginx/default.conf)を追加

2, docker-compose.ymlに、Web(gunicorn), DB(postgre), nginx(リバースプロキシ)を記述する

Dockerfileの最後のサーバ起動を修正(標準の簡易サーバからgunicorn)

動作を確認