サーバー情報
【さくらのVPS】
メモリ:8GB
ストレージ:SSD 400GB
CPU:6コア
OS
CentOS7 x86_64
【さくらのVPS】
メモリ:8GB
ストレージ:SSD 400GB
CPU:6コア
CentOS7 x86_64
【さくらのVPS】
メモリ:8GB
ストレージ:SSD 400GB
CPU:6コア
CentOS7 x86_64
Python:3.6.8
pip:9.0.3
git:1.8.3.1
sql:9.2.24
PostgreSQL:9.2.24
Nginx:1.16.1
Django: 3.1.4
Gunicorn: 20.0.4
Linuxサーバーで「Nginx+Gunicorn+Django」のWebアプリケーションを作成した際に、1つのプロジェクトだけを本番稼働させるのはちょっと勿体ないような気がしませんか!?
例えば、このようなシチュエーションが弊社では発生したので、複数のWebアプリケーションを稼働させることにしました。
もちろんURLは重複しないようにしっかりと管理しないといけませんが、2つ以上のプロジェクトを1つのサーバーで実現できるととても便利なので、実施方法についてご紹介します。
新規プロジェクト(django-admin startproject ◎◎◎)
※◎◎◎:新規プロジェクト名
◎◎◎.socket :socketファイル
◎◎◎.service:serviceファイル
設定ファイルの変更のみ必要で、追加ファイル等は不要!
嬉しいことに、意外と簡単に複数プロジェクトを設定できそうですね。
前項までで紹介してきたように、新規プロジェクトの作成方法は変わりません。
“root”権限を取得します。
パスワードを入力し、”root”権限を取得します。
“root”権限を取得します。
パスワードを入力し、”root”権限を取得します。
新規Djangoプロジェクトを作成します。
「home」ディレクトリへ移動します。
仮想環境を有効化します。
新規プロジェクトを作成します。
※◎◎◎:プロジェクト名
新規Djangoプロジェクトを作成します。
「home」ディレクトリへ移動します。
仮想環境を有効化します。
新規プロジェクトを作成します。
※◎◎◎:プロジェクト名
新規プロジェクトにおける「settings.py」の設定を実施して下さい。
【STATIC_ROOT】と【MEDIA_ROOT】のディレクトリは既存プロジェクトと重複しないようにしましょう。
設定が完了すれば、いつもと同様に登録を行います。
静的ファイルを指定ディレクトリに集約コピーします。
マイグレーションファイルを作成します。
マイグレーションファイルをデータベースに適用します。
スーパーユーザーを作成します。
新規プロジェクトにおける「settings.py」の設定を実施して下さい。
【STATIC_ROOT】と【MEDIA_ROOT】のディレクトリは既存プロジェクトと重複しないようにしましょう。
設定が完了すれば、いつもと同様に登録を行います。
静的ファイルを指定ディレクトリに集約コピーします。
マイグレーションファイルを作成します。
マイグレーションファイルをデータベースに適用します。
スーパーユーザーを作成します。
systemctlとして登録を行う「socketファイル」の作成を行います。
新規プロジェクト用に「socketファイル」を作成します。
※◎◎◎:プロジェクト名
新規Djangoプロジェクト内に「sockファイル」を自動作成させましょう。
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/home/◎◎◎/◎◎◎.sock
SocketUser=■■■(ユーザー名)
[Install]
WantedBy=sockets.target
systemctlとして登録を行う「serviceファイル」の作成を行います。
新規プロジェクト用に「service」ファイルを作成します。
※◎◎◎:プロジェクト名
新規DjangoプロジェクトをWSGI仕様に準拠したGunicornで起動するためのコマンドを登録しておきます。
[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
Gunicornの設定が完了すれば、再起動させて反映させましょう。
下記操作を実施する前に、Daemonの再読み込みを実施します。
Gunicornの再起動コマンド
Nginxも独自の設定ファイルを変更します。
ここでは前項までに作成した設定ファイルに対して追記していきます。
独自の設定ファイルを変更します。
※☆☆☆:既存プロジェクト名
server {
listen 443 ssl;
server_name ▼▼▼(ホスト名);
ssl_certificate /etc/letsencrypt/live/▼▼▼/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/▼▼▼/privkey.pem;
location /static {
alias /usr/share/nginx/html/static;
}
location /media {
alias /usr/share/nginx/html/media;
}
location / {
proxy_pass http://unix:/home/☆☆☆/☆☆☆.sock;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 【重複しないポート番号】 ssl;
server_name ▼▼▼(ホスト名);
ssl_certificate /etc/letsencrypt/live/▼▼▼/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/▼▼▼/privkey.pem;
location /static {
alias /usr/share/nginx/html/static;
}
location /media {
alias /usr/share/nginx/html/media;
}
location / {
proxy_pass http://unix:/home/◎◎◎/◎◎◎.sock;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重複しないポート番号を設定しましょう。
※実施前にファイアウォールにおいて使用するポート番号を開放しておいて下さい。
Nginxを再起動させます。
起動状況を確認します。
これで複数プロジェクトの登録(関連付け)は完了です。
Webアプリケーションを作成するにあたり、環境構築の選別がとても重要なファクターになってきます。
ここで紹介している内容は、全てのサーバー、OSで使用できないかもしれませんが、どのような理論で、何を設定すれば良いのかは共通の概念なので参考に出来るかと思います。
今後もよりいっそうWebアプリケーションの需要が高くなってくると思いますので、何かの参考になればと思います。
それでは、満足のいくWebアプリケーションの作成に奮闘してみて下さい!