Django本番デプロイWith uWSGI と nginx Ubuntu
djangoアプリをテスト環境から本番にuwsgiとnginxを使って本番環境にデプロイしてみます。
こちらの記事の続きです。
ポイントとしては
・nginxの設定
・djangoプロジェクト設定
・uwsgiのサービス化
でしょうか。
まずはnginxのconfファイルの作成です。仮にexample.comで受けるように設定します。
upstream django {
server unix:///var/www/html/mysite/mysite.sock;
}
server {
index index.html ;
server_name example.com;
access_log /var/log/nginx/mysite.access.log;
error_log /var/log/nginx/mysite.error.log;
location / {
uwsgi_pass django;
include /home/XXX/django/mysite/uwsgi_params;
}
}
ソケットのフォルダを作ります。ここでは/var/www/html/mysite/で、wordpress時と同様にwww-dataにグループを変更しておきます。
$ sudo chown -R www-data /var/www/html/mysite
$ sudo chgrp -R www-data /var/www/html/mysite
次にdjangoプロジェクトmysite直下にuwsgi.ini とuwsgi_params ファイルを作成します。
uwsgi.in
[uwsgi]
uid = www-data
gid = www-data
chdir = /home/XXX/django/mysite/
module = mysite.wsgi
master = true
vacuum = true
pidfile = /var/www/html/mysite/master.pid
socket = /var/www/html/mysite/mysite.sock
processes = 5
die-on-term = true
uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
uWSGIインストール
$ sudo pip3 install uwsgi
uwsgiのサービス化ファイルを/etc/systems/system以下にuwsgi-mysite.serviceとして作成します。
[Unit]
Description=uWSGI service for mysite
[Service]
ExecStart=/usr/local/bin/uwsgi --ini /home/XXX/django/mysite/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
[Install]
WantedBy=multi-user.target
サービスを有効化、起動します。
$ sudo systemctl enable uwsgi-mysite.service
$ sudo systemctl start uwsgi-mysite.service
これでpython3 manage.py runserverしなくてもdjangoアプリが自動で起動していると思いますがどうでしょうか。
追加でmysite/setting.pyに設定が必要です。アクセスされたいアドレスやFQDNを設定してください。
ALLOWED_HOSTS = ['example.com',]