NginxなしのVPSサーバーでrunserverを実行してみた

編集中のVPSサーバーの中にあるDjangoのコードを、VS Codeのターミナルから「python manage.py runserver」で実行するとどうなるのでしょうか。起動するけど結果を確認できないのだと予想していましたが・・・。

知っている人には当たり前のことかもしれませんが、ちょっと、予想と違っていたので記事にしてみました。

0.VPSサーバーでDjangoを始めてみたシリーズ

この記事は「VPSサーバーでDjangoを始めてみたシリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。

Django♪VPSサーバーでDjangoを始めてみたシリーズ

1.runserverの実行

PythonやDjangoをインストールし、仮想環境を構築した状態から、NginxやapacheなどのWebサーバーを使用せず、VS Codeのターミナルから「python manage.py runserver」を実行してみましょう。

なお、一般ユーザーuser_nameでログインし、仮想環境が入ったディレクトリの名称は「py1」、仮想環境の名称は「.venv1」とします。

以下の通り、VS Codeのターミナルを使って、py1の中にアプリケーションdjango_appを作成し、django_appを起動することができます。

$ cd /home/user_name/py1
$ . .venv1.bin.activate
$ django-admin startproject django_app
$ cd django_app
$ python3 manage.py runserver

すると、右下に以下のようなウィンドウが表示されます。

01_runserverで起動

そして、「ブラウザーで開く」をクリックするとブラウザーが立ち上がり、おなじみのロケットの絵が表示されました。

「ブラウザーで開く」ではなく、「転送されたポートの表示」をクリックした場合はブラウザーは表示さず、左側のエクスプローラーがリモートエクスプローラーの表示に切り替わります。

しかし、自分でブラウザーを起動し、「http://127.0.0.1:8000」あるいは「http://localhost:8000」にアクセスすると同様にロケットの絵が表示されます。

基本的に「ブラウザーで開く」と「転送されたポートの表示」の違いは、最初にブラウザーが開くかどうかの違いだけです。

02_ロケットの絵

なお、当然ですが、VS Codeで編集している自分のPC以外からはアクセスできません。

2.起動したままVS Codeを終了すると

python3 manage.py runserverで起動したまま、VS Codeを終了した場合はどうなるのでしょうか。

実はVS Codeの機能でVPSサーバー内のアプリケーションを実行できているだけなので、VS Codeを終了すると「http://127.0.0.1:8000」や「http://localhost:8000」ではアクセスできません。

自分のPCにデータが転送されているのならば、もしかしてSSH接続を切断してもアクセスできるのではないかと思いましたが無理でした。

3.公開する前に確認できる

Nginxやgunicornをインストールするまでは、サーバー上のアプリを表示できないと思っていましたが、この機能を使えば、公開する前にVPSサーバー上に保存したDjangoアプリを確認できます。

VPSサーバーにコードがあるにもかかわらず、まるで自分のPCで実行するのと同じ感覚で操作できるので便利です。

4.ただし、セキュリティには要注意

ただし、Djangoのプロジェクトを起動する場合にはセキュリティ上の注意が必要になる場合があるので要注意です。

例えばNginxやgunicornをインストールする前の状態では、第3者がサーバーにアクセスしても「申し訳ございません。このページに到達できません。」と表示されるだけで問題ないのですが、Nginxをインストール、起動した状態では、接続が拒否された理由として詳細なサーバー情報が第3者に公開されてしまいます。これは、Djangoのデバック機能が起動しているためです。

このデバック機能を停止するには、Djangoプロジェクトのsettings.pyの中の記述を「DEBUG = False」に変更します。

また、「DEBUG = False」と設定した場合には「ALLOWED_HOSTS = []」を「ALLOWED_HOSTS = ['localhost', '127.0.0.1']」に変更しなければ、「http://localhost:8000」や「http://127.0.0.1:8000/hello/」で、ブラウザからアクセスできなくなりますので、併せて修正してください。

最終的に公開する場合には、「ALLOWED_HOSTS = ['localhost', '127.0.0.1']」にはドメイン名も追加します。

DEBUG = False  #デフォルトはDEBUG = True
ALLOWED_HOSTS = ['localhost', '127.0.0.1']  #デフォルトはALLOWED_HOSTS = []

このように、サーバー上でDjangoプロジェクトを作成したり、サーバーにプロジェクトをコピーした場合には、まず最初にDjangoプロジェクトのsettings.pyの設定を以上のように変更することを習慣にした方がよいと思います。

私が実際にレンタルしたVPSサーバー

私が実際にレンタルしたVPSサーバーはConoHa VPSです。私は1GBのプランを申し込みました。VPSサーバーは一般のレンタルサーバーと異なりOSやアプリケーションを自由に設定できるので、Pythonで計算した結果をサイトに表示することもできます。

なお、ConoHa VPSの特長として、サーバーのディスクイメージを丸ごとバックアップできるイメージ保存機能を無料で使用することができます。コードを変更して元に戻せなくなった場合にも安心です。

また、ConoHa VPSは途中でプランをスケールアップできるだけでなく、スケールダウンすることもできます。つまり、2Gプランを1Gプランに変更することができます。ただし、512MBプランだけはスケールアップ・ダウン機能が使用できないので注意してください。

また、初期費用なしで3日だけ借り、3日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)



その他

Twitterへのリンクです。SNSもはじめました♪

以下、私が光回線を導入した時の記事一覧です。
 (1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
 (2) NURO光の開通までWiFiルーターを格安レンタルできる
 (3) NURO光の屋外工事の状況をご紹介。その日に開通!
 (4) 光回線開通!実測するとNURO光はやっぱり速かった
 (5) ネット上のNURO光紹介特典は個人情報がもれないの?