読む人も、書く人も、
すべてを考え抜いたデザイン。
真の使いやすさを追求したWPテーマ『JIN』
Uncategorized

【マネするだけ】VPS×Djangoでサイト公開!NginxとGunicornを使った簡単立ち上げガイド

こんにちは、hokkyokunです。

これまでの流れでVPSサーバーを立ち上げ、セキュリティ対策からDjangoのファイルをサーバーに取り込む方法を見てきました。

今回はDjangoのウェブアプリケーションをNginxというウェブサーバーを使って公開します。

NginxとGunicornというツールを使うのですが、非ITエンジニアにはなじみのないものだと思います。

本ページではこれらのツールについての予備知識なくても、手順通りにすすめるとサイトを立ち上げられる作りにしています。

それでは作っていきましょう。

※前回、前々回の流れで作っています。よって、仮想環境などはすでに作成済みの前提で作業を行います。

同じ手順で進めたい場合は、当サイトの1番から順に進めていただければ幸いです。

NginxとGunicornについて

Nginxとは

Nginx (エンジンエックス) は、ウェブサーバーの一種で、以下の役割を果たします。

  • ウェブページの配信: ウェブサイトのページや画像をインターネット経由でユーザーに見せる役割
  • リクエストの中継: ユーザーからのリクエストを受け取り、他のサーバーに送ってその結果をユーザーに返します

Nginxはウェブサイトの「受付係」といえます。

Gunicorn

Gunicorn (Green Unicorn) は、Pythonで作られたウェブアプリケーション(例えば、Djangoで作ったサイト)を実行するためのツールです。以下のような役割があります。

アプリケーションの実行: Djangoアプリケーションを動かし、ユーザーのリクエストに応じたページを作ります。

Gunicornはウェブサイトの「調理係」です。

NginxとGunicornの連携

NginxとGunicornは以下のようにして連携をとります。

  1. ユーザーのリクエスト: ウェブサイトの訪問者がブラウザを通じてページを要求
  2. Nginxがリクエストを受け取る: Nginxはそのリクエストを受け取り、Gunicornに渡す
  3. Gunicornが処理: GunicornはDjangoアプリケーションを動かして、リクエストに応じたページを生成
  4. Nginxが返送: Gunicornから受け取ったページをNginxがユーザーに返答

NginxとGunicornが協力して、ウェブサイトを訪問者に見せることができます。

前提となる知識はこれくらいとして、次に実際の立ち上げ方について記載していきます。

設定手順

Nginxのインストール

まず、Nginxをインストールします。

tera term等でターミナルを立ち上げます。
そこで以下のコマンドを打ってください。

sudo apt install nginx

これでNginxをインストールできました。

仮想環境のアクティベート

次に仮想環境をアクティベートします。

source venv/bin/activate

Gunicornのインストール

次にGunicornをインストールします。

pip install gunicorn

settings.pyの修正

次にsettings.pyを修正します。

既にDjangoファイルを取り込んでいると思いますので、ディレクトリを移動して、settings.pyを開いてください。

私の場合のディレクトリ構造です。

/home/hokkyokun/investment
  ├── invest
  │    ├── db.sqlite3
  │    ├── etf
  │    ├── invest
  │    ├── manage.py
  │    └── static
  ├── templates
  ├── README.md
  ├── requirements.txt
  └── venv
      ├── bin
      ├── include
      ├── lib
      ├── lib64 -> lib
      └── pyvenv.cfg

階層が深く、settings.pyまで表示されていませんが、構造的には、home/hokkyokun/investment/invest/invest/settings.pyとなっています。

下記の書き込みのある所までいき、IPアドレスを入力してください。

ALLOWED_HOSTS = ['XXX.XXX.XXX.XXX']

IPアドレスで入れることを想定していますが、別にドメインでも大丈夫です。

「ドメインって何?」という方はとりあえず、IPアドレスを入れておきましょう。
ドメインを設定するのも、初心者にとっては結構大変なので、問題を分解するためにもまずは簡単なIPアドレスで入れておきましょう。

IPアドレスはVPSサーバーのコントロールパネルから確認できます。

conoha VPSのコントロールパネルでは以下の場所から確認できます。

左のサイドバーで「サーバー」を選択し、IPアドレスを確認。

Gunicornの起動

ディレクトリを正しく移動していただきたいのですが、
私の場合はhome/hokkyokun/investment/invest/investまで移動します。

/home/hokkyokun/investment
  ├── invest
  │    ├── db.sqlite3
  │    ├── etf
  │    ├── invest
  │    ├── manage.py
  │    └── static
  ├── templates
  ├── README.md
  ├── requirements.txt
  └── venv
      ├── bin
      ├── include
      ├── lib
      ├── lib64 -> lib
      └── pyvenv.cfg

そこで、次のようにコマンドを打ちます。

gunicorn invest.wsgi:application --bind 127.0.0.1:7001 &

Gunicornを起動し、Djangoアプリケーションを実行します。127.0.0.1:7001にバインドします。

Nginxの設定ファイルの編集

Nginxの設定を行います。

以下のコマンドを打って、ファイルの編集モードに映ります。

sudo nano /etc/nginx/sites-available/任意の名前

任意の名前は何でもいいので、わかりやすい名前を付けてください。

私の場合は、「invest」という名前で作りました。

sudo nano /etc/nginx/sites-available/invest

ファイルの中身ですが、
以下のように、打ち込みます。

server {
    listen 80;
    server_name IPアドレスまたはドメイン名;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        alias /home/hokkyokun/investment/invest/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:7001;
        proxy_set_header Host $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;
    }
}

コピペでOKなので、
「IPアドレスまたはドメイン名」は適宜変えてください。

また、

location /static/ {
alias /home/hokkyokun/investment/invest/static/;
}

この部分はご自身の環境に合わせる必要があります。

よくわからなければ、私の環境を参考にしてみてください。
設定として重要なのはファイルの位置です。

私の場合、home/hokkyokun という、homeディレクトリ内にhokkyokunというユーザ名ディレクトリが作られており、その中にinvestmentディレクトリを作っている構造です。

さらにこの中のhome/hokkyokun/investment/invest/invest/settings.pyというファイルがあり、この中の「STATIC_URL」と「STATICFILES_DIRS」が重要です。

あとは、コピペで大丈夫です。

Nginxの設定ファイルを有効化

sudo ln -s /etc/nginx/sites-available/任意の名前 /etc/nginx/sites-enabled/

上記で作成したファイルと同じ名前を入れてください。

これは/etc/nginx/sites-enabled/内に上記で作ったファイルのリンクを貼るイメージです。

Nginxの起動

Nginxを最後起動させておしまいです。

sudo service nginx start

これでブラウザに「IPアドレス」(ドメインを登録していたらドメイン名で)を打ち込むとDjangoウェブサイトが見られるはずです。

お疲れさまでした!