🐃
【Hello World⑦】Django @ Python(nginx + Gunicorn編)
前回、前々回はDjangoのWebサーバにApacheを使いました。今回はWebサーバにnginxを使います。nginxとDjangoのインタフェースにはgunicornを使います。
nginx + uWsgi + DjangoでPythonのWebアプリを作ります
①フォルダ・ファイルを作成
以下の構成でフォルダとファイルを作ります。
フォルダ構成
django_nginx_gunicorn
├-web
| └─nginx.conf
├─compose.yaml # コンテナ作成時の指示を記載したファイル
└─Dockerfile # イメージ作成時の指示を記載したファイル
以下のコマンドでフォルダ・ファイルを作成します。
PowerShell
mkdir django_nginx_gunicorn ;`
cd django_nginx_gunicorn ;`
mkdir web ;`
New-Item compose.yaml ;`
New-Item Dockerfile ;`
New-Item web/nginx.conf ;`
code compose.yaml ;`
code Dockerfile ;`
code web/nginx.conf
各ファイルは以下の内容で作成します。
compose.yaml
services:
app:
container_name : django
build : .
ports:
- 8000:8000
volumes:
- ./app:/app
environment:
- PYTHONUNBUFFERED=1
working_dir : /app
command : gunicorn myproject.wsgi --bind 0.0.0.0:8000
web:
container_name : nginx
image : nginx:1.25.3
ports:
- 8001:8001
volumes:
- ./web:/etc/nginx/conf.d
depends_on:
- app
Dockerfile
FROM python:3.12
RUN pip install --upgrade pip && pip install Django==4.2.7 psycopg[binary] gunicorn
nginx.conf
upstream django {
server app:8000; # djangoのサービス名とポート
}
server {
listen 8001; # nginxの待ち受けポート
location / {
proxy_pass http://django; # リクエストをdjangoに転送
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
②Djangoのプロジェクトを作成
以下のコマンドを実行し、Djangoのプロジェクトを作ります。
PowerShell
docker compose run --rm app sh -c 'django-admin startproject myproject .'
③Djangoの設定ファイルを変更
以下のコマンドでDjangoの設定ファイルsettings.py
を開き、ALLOWED_HOSTS
の設定値を変更します。
PowerShell
code app/myproject/settings.py
app/myproject/settings.py
ALLOWED_HOSTS = ['localhost']
④nginx + Djangoのコンテナを起動
以下のコマンドを実行し、Apache + Djangoのコンテナを起動します。
PowerShell
docker compose up -d
⑤Djangoのデフォルト画面が表示されることを確認
nginx(http://localhost:8001)に接続して、Djangoのロケットが表示されることを確認します。
※Django(http://localhost:8000)に直接接続しても、Djangoのロケットが表示されます。
Discussion