python製フレームワーク「wagtail」を「Nginx」+「gunicorn」で動かす手順

python製フレームワーク「wagtail」を「Nginx」+「gunicorn」で動かす手順

pythonのDjangoフレームワーク製の「wagtail」を、速くて安定性の高いとされているWSGIサーバー「gunicorn」と「nginx」をプロキシーサーバーとして動かすまでの手順を記述してます。

環境

  • OS ubuntu20.04.1
  • python 3.8.2
  • pip 20.2.2
  • wagtail 2.10
  • gunicorn 20.0.4

※「wagtail」を構築する手順はこちら

gunicornインストール

ここでは 「wagtail」は「wagtailvenv」という仮想環境にインストールしているので、仮想環境で作業します。

source ~/wagtailvenv/bin/activate

gunicornをインストールします。

pip install gunicorn

wagtailで作成したプロジェクトに移動します。
※ここでは「testproject」とします。

cd testproject

管理コマンドを実行

python manage.py collectstatic

仮想環境を終了

deactivate

gunicornサービス作成

サービスの構成ファイルを作成します。

sudo nano /etc/systemd/system/gunicorn.service

ユーザーを「mebee」として作成してます。

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=mebee
Group=www-data
WorkingDirectory=/home/mebee/testproject
ExecStart=/home/mebee/wagtailvenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/mebee/testproject.sock testproject.wsgi:application

[Install]
WantedBy=multi-user.target

daemonを再起動します。

sudo systemctl daemon-reload

サービスを開始します。

sudo systemctl start gunicorn

nginxインストール

nginxをインストールして、gunicornへのプロキシパスを設定します。

sudo apt install nginx

設定ファイルを作成します。

sudo nano /etc/nginx/sites-enabled/sample.conf

下記の内容で編集してます。

server {
    listen 80;
    server_name プライベートIP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/mebee/testproject;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/home/mebee/testproject.sock;
    }
}

デフォルトの方のポートを変更しておきます。

sudo nano /etc/nginx/sites-enabled/default

編集

server {
        listen 81 default_server;

権限を設定しておきます。

sudo usermod -aG www-data mebee
sudo chown www-data /home/mebee/testproject.sock

nginxを起動します。

sudo systemctl start nginx

ブラウザから http://プライベートIP or サーバーアドレスにアクセスして以下の画面が表示されていれば完了です。