nginx と uwsgi で django を公開してみる
前回のこちらの記事の続きになります。
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
ディスカッション
コメント一覧
まだ、コメントがありません