nginx と uwsgi で django を公開してみる

2022年6月8日

前回のこちらの記事の続きになります。
uwsgi で公開までできたので今度は nginx も使用して公開してみたいと思います。

参考

nginx を起動する

nginx をインストールします。

sudo apt -y install nginx

nginx が起動しているのを確認します。

sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy se
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor 
   Active: active (running) since Wed 2021-09-01 10:44:18 UTC; 34s ago

外部IPが「111.222.333.444」だとして下記をブラウザから叩いて Welcome to nginx! が出ればひとまずOKそうです。

http://111.222.333.444:80

uwsgi_params を配置する

uwsgi_params を django のプロジェクト配下に配置します。
manage.py がある階層です。

sudo find / -name uwsgi_params
/etc/nginx/uwsgi_params
sudo cp -ip /etc/nginx/uwsgi_params /home/project_name/backend/

nginx の設定ファイルを作成する

nginx 用の設定ファイルを作成します。

sudo vi /home/project_name/backend/project_name_nginx.conf

下記のように記述します。

# the upstream component nginx needs to connect to
upstream django {
    server unix:///home/project_name/backend/uwsgi.sock; # for a file socket
}
# configuration of the server
server {
    # the port your site will be served on
    listen 80;
    # the domain name it will serve for
    server_name 111.222.333.444; # substitute your machine's IP address or FQDN
    charset utf-8;
    # max upload size
    client_max_body_size 75M;   # adjust to taste
    # Django media
    location /media  {
        alias /home/project_name/backend/media;  # your Django project's media files - amend as required
    }
    location /static {
        alias /home/project_name/backend/static; # your Django project's static files - amend as required
    }
    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass django;
        include /home/project_name/backend/uwsgi_params; # the uwsgi_params file you installed
    }
}

nginx が先ほど作成した conf ファイルを参照できるようにシンボリックリンクを通します。

sudo ln -s /home/project_name/backend/project_name_nginx.conf /etc/nginx/sites-enabled/

「/etc/nginx/sites-enabled/*」が読み込まれる設定になっているかを確認します。

cat /etc/nginx/nginx.conf 
...
include /etc/nginx/sites-enabled/*; # これがあればOK
...

uwsgi の設定ファイルを作成する

uwsgi の設定ファイルを作成します。
「chdir = /home/project_name/backend」は manage.py がある階層です。
「module = config.wsgi:application」は wsgi.py までのパスを指定しています。config がプロジェクト名の方もいるかと思います。

vi /home/project_name/backend/uwsgi.ini

下記の通りに記述します。

[uwsgi]
chdir = /home/project_name/backend
module = config.wsgi:application
master = true
socket = /home/project_name/backend/uwsgi.sock
chmod-socket = 666
pidfile = /home/project_name/backend/uwsgi.pid
logto = /home/project_name/backend/uwsgi.log

ホストを許可する

settings.py でホストを許可します。

ALLOWED_HOSTS = ['111.222.333.444', 'hoge.com']

実行する

nginx をリスタートします。

sudo systemctl restart nginx

設定ファイルを読み込みます。
これをするとソケットが自動で出来上がります。

uwsgi --ini uwsgi.ini

あとはブラウザで外部IPアドレスに接続です。

追記

nginx の設定ファイルの文法が正しいか確認する。

sudo nginx -t

nginx のログを確認する。

tail -f /var/log/nginx/error.log

2022年6月8日