目的
– Djangoのテスト用アプリを構築する
– DjangoアプリをuWSGI経由でアクセス可能にする
– DjangoアプリをNginx経由でアクセス可能にする
環境
– ubuntu 22.04
– ホスト:192.168.9.10
– Python 3.10.12
参考
– https://office54.net/python/django/ubuntu-django-nginx-uwsgi#google_vignette
Djangoアプリ単体での起動
– テスト用のDjangoアプリを構築する
Python準備
$ python3 -V
Python 3.10.12
$ sudo apt install python3-pip
$ pip install –upgrade pip
仮想環境(venv)準備
$ sudo apt install python3-venv
$ mkdir ~/django-app
$ cd ~/django-app
$ pwd
/home/admin/django-app/
$ python3 -m venv myenv
$ source myenv/bin/activate
(myenv)
Djangoインストール(venv環境)
(myenv) pip install django
(myenv) pip list
Djangoのテスト用プロジェクト作成(venv環境)
(myenv) django-admin startproject django_app .
(myenv) vi django_app/setting.py
-------
#ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']
-------
(myenv) sudo ufw allow 8000
(myenv) sudo ufw app list
Djangoアプリ単体で起動させる
(myenv) python manage.py runserver 0.0.0.0:8000
正常性確認
– ブラウザアクセス可能であること
– http://192.168.9.10:8000/
uWSGIを介してDjangoアプリを起動
イメージ
client
↓
uWSGI
↓
django-app(port:8000)
uWSGIインストール
(myenv) pip install wheel
(myenv) pip install uwsgi
(myenv) pip list
(myenv) uwsgi –http :8000 –module django_app.wsgi
正常性確認
– ブラウザアクセス可能であること
– http://192.168.9.10:8000/
– サーバログ [29/Jan/2024 07:48:47] “GET / HTTP/1.1” 200 10629
– 確認できたら「Ctrl C」でuwsgiを止める ※ポート8000の重複に注意
NginxとuWSGIを介してDjangoアプリを起動
イメージ
client
↓
Nginx(port:8000)
↓
uWSGI
↓
django-app(port:8001)
Nginx インストール
$ sudo apt install -y nginx
Nginxを起動する
$ sudo systemctl start nginx
uwsgi_paramsをプロジェクトフォルダにコピー
– uwsgi用のパラメータファイルが/etc/nginx内にあるので、プロジェクトフォルダにコピーする。ファイル名も変更する
$ pwd
~/django-app/django_app
$ cp -p /etc/nginx/uwsgi_params ./django-app_params
Django連携用のNginx設定ファイルを作成
– クライアントから受けるnginxのポート:8000
– uWSGIを介して起動するDjangoアプリのポート:8001
$ vi /etc/nginx/sites-available/django_app.nginx
$ cat django_app.nginx
-------
upstream django {
server 192.168.9.10:8001;
}
server {
listen 8000;
listen [::]:8000;
location / {
uwsgi_pass django;
include ~/django-app/django-app_params;
}
}
django_app.nginxをプロジェクトフォルダにコピー
$ cp /etc/nginx/sites-available/django_app.nginx ~/django-app/django_app
シンボリックリンクの作成
– プロジェクトフォルダ内のdjango_app.nginxに対して、nginxからアクセス可能にする
$ sudo ln -s ~/django-app/django_app/django_app.nginx /etc/nginx/sites-enabled/
uWSGIを介してDjangoアプリを起動
$ uwsgi --socket :8001 --module django_app.wsgi
Nginxを再起動する
$ sudo systemctl restart nginx
正常性確認
– ブラウザアクセス可能であること
– http://192.168.9.10:8000/
– サーバログ [pid: 454172|app: 0|req: 2/2] 192.168.1.1 () {42 vars in 1796 bytes} [Wed Jan 31 04:56:43 2024] GET / => generated 10629 bytes in 6 msecs (HTTP/1.1 200) 6 headers in 209 bytes (1 switches on core 0)