- 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は以下のようにして連携をとります。
- ユーザーのリクエスト: ウェブサイトの訪問者がブラウザを通じてページを要求
- Nginxがリクエストを受け取る: Nginxはそのリクエストを受け取り、Gunicornに渡す
- Gunicornが処理: GunicornはDjangoアプリケーションを動かして、リクエストに応じたページを生成
- 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']
![](https://etf-labo.site/wp-content/uploads/2024/05/image-31.png)
IPアドレスで入れることを想定していますが、別にドメインでも大丈夫です。
「ドメインって何?」という方はとりあえず、IPアドレスを入れておきましょう。
ドメインを設定するのも、初心者にとっては結構大変なので、問題を分解するためにもまずは簡単なIPアドレスで入れておきましょう。
IPアドレスはVPSサーバーのコントロールパネルから確認できます。
conoha VPSのコントロールパネルでは以下の場所から確認できます。
左のサイドバーで「サーバー」を選択し、IPアドレスを確認。
![](https://etf-labo.site/wp-content/uploads/2024/05/image-33-1024x418.png)
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ディレクトリを作っている構造です。
![](https://etf-labo.site/wp-content/uploads/2024/05/image-34.png)
さらにこの中のhome/hokkyokun/investment/invest/invest/settings.pyというファイルがあり、この中の「STATIC_URL」と「STATICFILES_DIRS」が重要です。
![](https://etf-labo.site/wp-content/uploads/2024/05/image-35.png)
あとは、コピペで大丈夫です。
Nginxの設定ファイルを有効化
sudo ln -s /etc/nginx/sites-available/任意の名前 /etc/nginx/sites-enabled/
上記で作成したファイルと同じ名前を入れてください。
これは/etc/nginx/sites-enabled/内に上記で作ったファイルのリンクを貼るイメージです。
Nginxの起動
Nginxを最後起動させておしまいです。
sudo service nginx start
これでブラウザに「IPアドレス」(ドメインを登録していたらドメイン名で)を打ち込むとDjangoウェブサイトが見られるはずです。
お疲れさまでした!