Django本番デプロイWith uWSGI と nginx Ubuntu

2019年5月10日

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',]