この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:T
更新日時:2019-06-19 16:09:51

タイトル: 本番環境へのインストールとアプリのデプロイ(nginx編)
SEOタイトル: 本番環境へのdjangoのインストールとアプリのデプロイ(nginx編)

前提

・Webサーバーはnginxを使用します。

・本稿ではPython3.6をインストールします。(バージョンが違う場合は適宜読み替えて下さい)

・本稿ではVPS環境にてデプロイすることを想定しています。

・サーバーOSはCentOSを使用します。(OSが違う場合は適宜読み替えて下さい)

 

Python3のインストール

yum install -y https://centos7.iuscommunity.org/ius-release.rpm

yum install -y python36u python36u-libs python36u-devel python36u-pip

 

pipのアップグレード

pip3.6 install --upgrade pip

 

仮想環境の作成

pip3.6 install virtualenv

virtualenv sample_venv

上記のvirtualenvは任意のディレクトリにて実行してください。

 

Djangoのインストール

pip install django

 

Djangoプロジェクトの作成

こちらに関しては任意のプロジェクトを用意してください。

djangoアプリの作成方法に関してはこちらのdjango全般に関する記事を参照してください。

サーバーの適当な場所にプロジェクトを配置して下さい。

本稿ではプロジェクト名は「sample」とします。

 

wsgiのインストール

pip install uwsgi

※wsgiとはnginxとdjangoを繋げるインターフェース

 

nginxのインストールと起動

インストール方法に関してはこちらを参照。

インストールが終わったら以下のコマンドを実行してnginxを起動する。

systemctl start nginx

 

wsgiのパラメータファイルを作成

プロジェクト直下に以下の内容のwsgiパラメータファイルを作成する。

ファイル名は「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;

※内容は変更せずにそのままでよいです。

 

nginxの設定ファイルを作成

/etc/nginx/conf.d」にnginxの設定ファイルを作成する。

ファイル名は「sample_nginx.conf

upstream django {
    server 127.0.0.1:8001;
}

server {
    listen      80;
    server_name
sample.com;
    charset     utf-8;

    location /static {
        alias
/path/to/your/sample/static;
    }

    location / {
        uwsgi_pass  django;
        include    
/path/to/your/sample/uwsgi_params;
    }
}

※「/path/to/your/sample」周りや「server_name」などは環境に合わせて変更してください。

 

staticファイルの設定

staticファイルの場所をdjangoとnginxに設定する必要がある。

setting.pyに以下の記述を追加する。

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

更に以下のコマンドを実行する。

python manage.py collectstatic

 

wsgi起動ファイルの作成

プロジェクト直下に以下の内容で作成する。

ファイル名は「sample_uwsgi.ini

# sample_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           =
/path/to/your/sample
# Django's wsgi file
module          =
sample.wsgi
# the virtualenv (full path)
home            =
/path/to/sample_venv

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          =
127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

黄色の部分は環境に合わせて要修正

 

wsgiのインストール(仮想環境外)

deactivate

pip3.6 install uwsgi

wsgiは仮想環境外にも必要なので仮想環境を非アクティブにしてからインストールする。

 

Emperor modeの設定

Emperor modeを設定しておくことで設定ファイルの変更をリアルタイムで反映してくれる。

mkdir /etc/uwsgi

mkdir /etc/uwsgi/vassals

ln -s /path/to/sample/sample_uwsgi.ini /etc/uwsgi/vassals/

 

システム起動時にwsgiが自動で起動するように設定

/etc/rc.localに以下の文言を追記する。

/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid root --gid root --daemonize /var/log/uwsgi-emperor.log

※uidとgidはとりあえずrootにしているので適宜変更

 

以上で本番環境でdjangoアプリへアクセスできるようになります。

 

課題

socketを
    server 127.0.0.1:8001;
    ではなく
    server unix:///path/to/sample/sample.sock;
    を使いたい。
    上記で設定が抜けているのか何故か起動しない。
    後者の方がパフォーマンスが良いとのこと。