Django

Django,uWSGI,Nginxの連携手順

2024年1月31日



目的

– 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)

CATEGORIES & TAGS

Django,

Author:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

カテゴリー

むるし

フリーランスのインフラ系エンジニア。
備忘録で色々書いていきます。
お問い合わせは↓
mo-gyu@murci.net
LPIC303 Security
%d人のブロガーが「いいね」をつけました。