Gunicorn設定

サーバー情報

【さくらのVPS】
メモリ:8GB
ストレージ:SSD 400GB
CPU:6コア

OS

CentOS7 x86_64

インストール

Python:
pip:
git:
psql:
PostgreSQL:
Nginx:

3.6.8
9.0.3
1.8.3.1
9.2.24
9.2.24
1.16.1

仮想環境

Django:
Gunicorn:

3.1.4
20.0.4

PythonではWebアプリケーションとWebサーバーのインタフェースとして PEP3333 で定義された WSGI(Web Server Gateway Interface)という仕様が広く利用されています。

この度の開発では前項まででご紹介しているように、Djangoで作成するWebアプリケーション、Nginxを用いるWebサーバーのインターフェースもPEP333を使用していますが、これらもWSGI仕様に準拠しています。

このため Gunicornといった優れたWSGIサーバーを利用することができます。

Django+Gunicorn+Nginx

アプリケーションサーバーであるGunicornを起動することで、WebアプリケーションであるDjangoプロジェクトと、WebサーバーであるNginxが連携され、本番環境で動作するように設定します。

 

  1. Gunicornを起動または再起動する
  2. Djangoプロジェクトの最新の状態を反映させる
  3. Nginx経由でクライアントが使用できる

 

Linuxサーバーのシステムマネージャーである“Systemed”を用いると任意の動作を行うことが出来ます。

そのためシステムマネージャ―を制御するための中央管理ツールである”systemctl”コマンドにGunicornを登録していきます。

 

systemctlに登録した時点で、Daemon(デーモン)で起動します。

Daemonとは、バックグラウンドプロセスとして働くプログラムのことです。

1.systemctlコマンド登録(socketファイル)

「socketファイル」の作成を行います。

Djangoプロジェクト内に「sockファイル」を生成させます。

この「sockファイル」はNginxと連携させるためにとても重要な役割があるので、ここで作成する「socketファイル」は重要です。

sudo vi /etc/systemd/system/☆☆☆.socket

systemctlとして登録を行う「socketファイル」の作成を行います。

Djangoプロジェクトが複数作成する場合もあるので、「socketファイル」の名前はプロジェクト名にしておくと分かりやすいです。

☆☆☆:プロジェクト名

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/home/☆☆☆/☆☆☆.sock

SocketUser=■■■(ユーザー名)

[Install]
WantedBy=sockets.target

Unit

Description

「socketファイル」の説明文を記載します。

Socket

ListenStream

後述する「serviceファイル」のポート番号を指定します。

今回は「sockファイル」を利用するので上記のように記載します。

Install

WantedBy

必ず“sockets.target”を指定します。

2.systemctlコマンド登録(serviceファイル)

「serviceファイル」の作成を行います。

このファイルは、指定したDjangoプロジェクトをWSGI仕様に準拠したGunicornで起動するためのコマンドを登録しておきます。

Djangoプロジェクトを更新した際に、その都度Gunicornを使用した起動コマンドを入力するのは非常に手間なので、予め登録しておくことはとても便利です。

sudo vi /etc/systemd/system/☆☆☆.service

systemctlとして登録を行う「serviceファイル」の作成を行います。

Djangoプロジェクトが複数作成する場合もあるので、「serviceファイル」の名前はプロジェクト名にしておくと分かりやすいです。

☆☆☆:プロジェクト名

[Unit]
Description=gunicorn daemon
Requires=☆☆☆.socket
After=network.target

[Service]
User=■■■(ユーザー名)
Group=□□□(グループ名)
WorkingDirectory=/home/☆☆☆/
ExecStart=/home/★★★(仮想環境名)/bin/gunicorn –workers 3 –bind /home/☆☆☆/☆☆☆.sock ☆☆☆.wsgi:application

[Install]
WantedBy=multi-user.target

Unit

Description

「serviceファイル」の説明文を記載します。

Unit

Requires

「socketファイル」との関連性を指定します。

「serviceファイル」を起動した際に、「socketファイル」の起動要求を行います。

Unit

After

必ず“network.target”を指定します。

Socket

User

Webアプリケーション用に新規作成した”root権限”を持たないユーザー名を記載。

Socket

Group

“User”と同じ設定を行う。

※OSによって異なるので注意が必要

Socket

WorkingDirectory

Djangoプロジェクトの”manage.py”が存在するディレクトリを指定します。

Socket

ExecStart

通信開始時に起動するコマンドを設定しま。

Gunicornがインストールされているディレクトリ(仮想環境下)を指定し、オプション設定として「sockファイル」を起動させます。

Install

WantedBy

必ず“multi-user.target”を指定します。

3.Gunicornの起動・停止

sudo systemctl daemon-reload

下記操作を実施する前に、Daemonの再読み込みを実施します。

sudo systemctl start ☆☆☆.service

Gunicornの起動コマンド

sudo systemctl restart ☆☆☆.service

Gunicornの再起動コマンド

sudo systemctl stop ☆☆☆.service

Gunicornの停止コマンド