Ngrokを使用してDjangoデモアプリをインターネットに公開するにはどうすればよいですか?

公開: 2021-05-02

Djangoデモアプリをインターネットに公開する方法を学びましょう。 それは、ホスティングサービスにデプロイせずに。

Djangoアプリのデモを表示するためだけにステージングデプロイメント環境を構成するのはひどいです。 さらに、URLが数分間だけ必要な場合は、それをクライアントまたはチームメイトに表示します。

最良のオプションは、ツールを使用して現在のローカルサーバーを公開することです。 その通り! 世界中の人々があなたのローカルホストで何が起こっているかを見ることができます。

そのために、Ngrokを使用します。 このツールを使用すると、コンピューターのローカルポートに基づいてパブリックURLを作成できます。 これはすべて、トンネルの魔法のおかげです。

このチュートリアルで作業するすべてのコードを開始する前に、このGithubリポジトリで利用できるようになります。

前提条件

  • システムにインストールされているPython3.6 +
  • コマンドラインインターフェイスの経験
  • Djangoの基本的な知識
  • Django-adminおよびmanage.pyスクリプトの理解

これらすべての基本的なことを知っておくことをお勧めします。 おそらく、このチュートリアルに従うことができますが、それ以上の問題はありません。

Djangoアプリの作成

ステップバイステップのチュートリアルを作成するために、Djangoプロジェクトを作成するプロセスを説明します。 すでにお持ちの場合は、このセクションをスキップできます。

仮想環境

まず、Python仮想環境を作成しましょう。

  • したがって、システムターミナル(またはシェル)を開きます。
  • システムターミナルを開くのが複雑すぎる場合は、コードエディタの組み込みターミナルを使用してみてください。

  • [ターミナル]> [新しいターミナル]をクリックすると、画面の下部にシェルが表示されます。
  • 次のコマンドを入力して、組み込みのPythonツールを使用して仮想環境を作成します。
 python -m venv .venv

基本的には次のことを意味します。

ちょっとPythonは、.venvの名前で(-m venv)コマンド仮想環境を作成します

  • ここで、現在のディレクトリのファイルを一覧表示すると、 .venvフォルダが表示されます。
 $ ls -l drwxr-xr-x - daniel 30 abr 23:12 .venv # Other files ...
  • 仮想環境をアクティブ化するには、 sourceコマンドを呼び出します。
 source .venv/bin/activate
  • 問題が発生した場合は、Pythonの公式ドキュメントから抜粋した次の表を参照してください。
プラットホームシェル仮想環境をアクティブ化するコマンド
POSIX bash / zsh $ source <venv> / bin / activate
$ source <venv> /bin/activate.fish
csh / tcsh $ source <venv> /bin/activate.csh
PowerShellコア$ <venv> /bin/Activate.ps1
ウィンドウズcmd.exe C:\> <venv> \ Scripts \ activate.bat
パワーシェルPS C:\> <venv> \ Scripts \ Activate.ps1

これで、正しいコマンドを実行した場合、シェルには仮想環境の名前が含まれているはずです。

 $ source .venv/bin/activate.fish (.venv) $

Djangoをインストールする

仮想環境をアクティブ化した後、必要なDjangoバージョンをインストールできるようになりました。 この場合、最新のものをインストールすることをお勧めします。

 $ pip install django Collecting django Using cached Django-3.2-py3-none-any.whl (7.9 MB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Collecting asgiref<4,>=3.3.2 Using cached asgiref-3.3.4-py3-none-any.whl (22 kB) Collecting sqlparse>=0.2.2 Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB) Installing collected packages: pytz, asgiref, sqlparse, django Successfully installed asgiref-3.3.4 django-3.2 pytz-2021.1 sqlparse-0.4.1

次に、公開するDjangoアプリの基本的なプロジェクト構造を作成します。

 $ django-admin startproject mytestingproject

これにより、 mytestingprojectという名前のDjangoプロジェクトが作成されます。 それを作成した後、プロジェクト構造が配置されているディレクトリを入力する必要があります。 それでは、それにcdして、Djangoサーバーを実行しましょう。

 # Enter to the project directory (.venv)$ cd mytestingproject/ # Listing the files inside the project (.venv) $ ls mytestingproject manage.py

さて、Djangoサーバーを実行して、どのように見えるかを見てみましょう。

 (.venv) $python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. May 01, 2021 - 04:34:25 Django version 3.2, using settings 'mytestingproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

基本的に、Djangoは、ローカルサーバーがローカルホスト(127.0.0.1は常にそれを指している)で、デフォルトのポート8000​​で実行されていることを通知しています。

エラーメッセージについて心配する必要はありません。 まず、ローカルサーバーですべてが正常に機能していることを確認しましょう。 これを行うには、Webブラウザーに移動し、次の方向を貼り付けます。

 http://localhost:8000/ # Do you note that localhost and 127.0.0.1 are the same?

すべてが正常に機能している場合は、Djangoの美しいテンプレートが表示されます。

Djangoのインストールについては以上です。

それでは、このDjangoプロジェクトの公開に取り掛かりましょう。 より複雑なプロジェクトで作業している場合は、Djangoアプリを公開する次の方法も機能します。

NgrokでDjangoアプリを公開する

前に言ったように、Ngrokはローカルサーバーをインターネットに接続するためのツールの1つです。 まず、公式WebサイトからNgrokをダウンロードします。

インストールしたら、必要なコマンドに進みましょう。

別のシェルを開き、Djangoサーバーが現在実行しているターミナルを維持して、入力します。

 $ ngrok help NAME: ngrok - tunnel local ports to public URLs and inspect traffic More commands ....

これにより、Ngrokが提供する使用可能なコマンドを簡単に確認でき、インストールプロセスが正しく行われたことも確認できます。

人々が私たちのサーバーにアクセスできるURLを作成するために、実行してみましょう。

 $ ngrok http 8000
 # secure public URL for port 8000 web server

ローカルホストのポート8000に接続するURLを作成するために、 http引数を実行しています。

これがおそらく得られる結果です。

 ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 1 hour, 59 minutes Update update available (version 2.3.39, Ctrl-U to update) Version 2.3.35 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://cac2165aa7f8.ngrok.io -> http://localhost:8000 Forwarding https://cac2165aa7f8.ngrok.io -> http://localhost:8000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00

それが言うように、Ngrokはその奇妙で醜いURLをlocalhost転送しています。 しかし、Ngrokが提供したURLでブラウザを押すと、魔法が起こります。

エラーページ。

settings.pyの変更

うわー、何が起こったの?

DisallowedHost設定が原因で、Djangoがエラーをスローしているようです。 Djangoサーバーを実行しているシェルと、Ngrokセッションを使用しているシェルを確認すると、デバッグメッセージが表示されます。

 # Django messages Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. Bad Request: / [01/May/2021 05:07:46] "GET / HTTP/1.1" 400 65196 Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. # Ngrok messages HTTP Requests ------------- GET /favicon.ico 400 Bad Request GET / 400 Bad Request

Djangoが言っているように、接続しているドメインをALLOWED_HOSTS構成変数に追加する必要があります。 しかし、問題があります。ドメイン名が大きすぎて混乱しているということです。

それでは、このエラーを解決するために、Djangoの設定を少し変更してみましょう。 プロジェクトフォルダにあるsettings.pyファイルを開きます。

 # mytestingproject/settings.py # Line 28 # Change from ALLOWED_HOSTS = [] # To ALLOWED_HOSTS = ["*"]

正規表現をご存知の場合は、すべてのホストが許可されるワイルドカードを設定していることを理解できます。

次に、サイトをリロードして、結果を確認します。

作業ページ

すべてが完全に機能しています! また、プロジェクトのアプリケーションの作成とURLとビューの設定を開始すると、すべてがそのパブリックURLに反映されます。

注:本番ALLOWED_HOSTSALLOWED_HOSTSを変更することを忘れないでください。これにより、大きなセキュリティホールが発生します。

結論

このチュートリアルでは、DjangoプロジェクトをデプロイせずにデモURLを作成する方法を学びました。

Djangoプロジェクトを開始し、Djangoのsettings.pyファイルを操作する方法を練習しました。

最後に、Ngrokの使用方法と、Ngrokを使用してローカルサーバーを公開する方法を学びました。

次に、APIを構築するための人気のあるPythonフレームワークのいくつかを調べます。