18.04前書きDjangoは強力なWebフレームワークであり、PythonアプリケーションまたはWebサイトの開発を支援します。Djangoには、ローカルでコードをテストするための簡素化された開発サーバーが含まれていますが、わずかに生産関連の場合でも、より安全で強力なWebサーバーが必要です。18.04にいくつかのコンポーネントをインストールおよび構成する方法を示します。デフォルトのSQLiteデータベースを使用する代わりに、PostgreSQLデータベースをセットアップします。Gunicornアプリケーションサーバーを構成して、アプリケーションとインターフェイスします。次に、GunicornにリバースプロキシするようにNginxを設定し、アプリを提供するためのセキュリティ機能とパフォーマンス機能にアクセスできるようにします。+」権限が設定された非ルートユーザーが必要です。[初期サーバーセットアップガイド]を実行して、これを設定する方法を学ぶことができます。仮想環境にDjangoをインストールします。プロジェクト固有の環境にDjangoをインストールすると、プロジェクトとその要件を個別に処理できます。データベースとアプリケーションを起動して実行したら、Gunicornアプリケーションサーバーをインストールして構成します。これは、アプリケーションへのインターフェイスとして機能し、クライアント要求をHTTPからアプリケーションが処理できるPython呼び出しに変換します。次に、Gunicornの前にNginxをセットアップして、高性能な接続処理メカニズムと実装しやすいセキュリティ機能を活用します。Ubuntuリポジトリからのパッケージのインストールプロセスを開始するには、Ubuntuリポジトリから必要なすべてのアイテムをダウンロードしてインストールします。+`を使用して、追加のコンポーネントを少し後でインストールします。+`パッケージインデックスを更新してから、パッケージをダウンロードしてインストールする必要があります。インストールするパッケージは、プロジェクトで使用するPythonのバージョンによって異なります。*でDjangoを使用している場合は、次のように入力します。2をサポートするDjangoの最後のリリースです。3を選択することを強くお勧めします。*を使用する必要がある場合は、次のように入力します。Webサーバーがインストールされます。PostgreSQLデータベースとユーザーの作成Djangoアプリケーションのデータベースとデータベースユーザーをすぐに作成します。デフォルトでは、Postgresはローカル接続に「ピア認証」と呼ばれる認証スキームを使用します。基本的に、これはユーザーのオペレーティングシステムのユーザー名が有効なPostgresユーザー名と一致する場合、そのユーザーはそれ以上認証なしでログインできることを意味します。`という名前のオペレーティングシステムユーザーが作成されました。このユーザーを使用して管理タスクを実行する必要があります。+`オプションで渡すことができます。次のように入力して、インタラクティブなPostgresセッションにログインします。psql要件を設定できるPostgreSQLプロンプトが表示されます。プロジェクトのデータベースを作成します。;次に、プロジェクトのデータベースユーザーを作成します。'';その後、作成したユーザーの接続パラメーターのいくつかを変更します。これにより、データベース操作が高速化されるため、接続が確立されるたびに正しい値を照会および設定する必要がなくなります。`に設定していますが、これはDjangoが期待しています。デフォルトのトランザクション分離スキームを「コミット済み読み取り」に設定しています。これは、コミットされていないトランザクションからの読み取りをブロックします。最後に、タイムゾーンを設定しています。UTC`を使用するように設定されます。これらはすべてhttps://docs.djangoproject.com/en/2.0/ref/databases/#optimizing-postgresql-s-configuration[Djangoプロジェクト自体]からの推奨事項です。'UTC';これで、新しいユーザーに新しいデータベースを管理するアクセス権を与えることができます。;終了したら、次を入力してPostgreSQLプロンプトを終了します。\qDjangoがデータベース情報に接続して管理できるように、Postgresが設定されました。プロジェクト用のPython仮想環境の作成データベースができたので、残りのプロジェクト要件の準備を開始できます。管理を容易にするために、仮想環境にPython要件をインストールします。`コマンドにアクセスする必要があります。+`でインストールできます。+`をアップグレードし、次を入力してパッケージをインストールします。+`をアップグレードし、次を入力してパッケージをインストールします。+`をインストールすると、プロジェクトの形成を開始できます。プロジェクトファイルを保存できるディレクトリを作成して移動します。~/プロジェクトディレクトリ内で、次のように入力してPython仮想環境を作成します。virtualenvこれにより、「」ディレクトリ内に「」というディレクトリが作成されます。+`のローカルバージョンがインストールされます。これを使用して、プロジェクトの分離されたPython環境をインストールおよび構成できます。プロジェクトのPython要件をインストールする前に、仮想環境をアクティブ化する必要があります。次のように入力して、それを行うことができます。/bin/activateプロンプトが変わり、Python仮想環境内で操作していることを示す必要があります。+`とともにインストールします。psycopg2-binaryこれで、Djangoプロジェクトを開始するために必要なすべてのソフトウェアが準備できました。新しいDjangoプロジェクトの作成と構成Pythonコンポーネントをインストールすると、実際のDjangoプロジェクトファイルを作成できます。Djangoプロジェクトの作成すでにプロジェクトディレクトリがあるので、ここでファイルをインストールするようDjangoに指示します。通常の実際のコードで第2レベルのディレクトリを作成し、このディレクトリに管理スクリプトを配置します。これの鍵は、Djangoが現在のディレクトリに関連した決定を行うことを許可する代わりに、ディレクトリを明示的に定義することです。+)には次の内容が含まれているはずです。+:Djangoプロジェクト管理スクリプト。+:Djangoプロジェクトパッケージ。+」ファイルが含まれている必要があります。+:前に作成した仮想環境ディレクトリ。新しく作成したプロジェクトファイルで最初に行うべきことは、設定を調整することです。テキストエディターで設定ファイルを開きます。+`ディレクティブを見つけることから始めます。これは、Djangoインスタンスへの接続に使用されるサーバーのアドレスまたはドメイン名のリストを定義します。*ヘッダーを持つ着信リクエストは例外を発生させます。Djangoでは、特定のクラスのセキュリティ脆弱性を防ぐために、これを設定する必要があります。角括弧内に、Djangoサーバーに関連付けられているIPアドレスまたはドメイン名をリストします。各項目は、引用符で囲み、エントリをコンマで区切ってリストする必要があります。ドメイン全体とサブドメインのリクエストを希望する場合は、エントリの先頭にピリオドを追加します。以下のスニペットには、デモンストレーションに使用されるコメントアウトされた例がいくつかあります。'localhost']次に、データベースアクセスを構成するセクションを見つけます。ファイル内の構成は、SQLiteデータベース用です。プロジェクト用にPostgreSQLデータベースをすでに作成しているため、設定を調整する必要があります。PostgreSQLデータベース情報を使用して設定を変更します。`アダプタを使用するようDjangoに指示します。データベース名、データベースユーザー名、データベースユーザーのパスワードを指定し、データベースがローカルコンピューターにあることを指定する必要があります。.次に、ファイルの一番下まで移動し、静的ファイルを配置する場所を示す設定を追加します。これは、Nginxがこれらのアイテムのリクエストを処理できるようにするために必要です。+`というディレクトリに配置するように指示します。'/static/'完了したら、ファイルを保存して閉じます。初期プロジェクト設定の完了これで、管理スクリプトを使用して初期データベーススキーマをPostgreSQLデータベースに移行できます。migrate次を入力して、プロジェクトの管理ユーザーを作成します。createsuperuserユーザー名を選択し、メールアドレスを入力し、パスワードを選択して確認する必要があります。次のように入力して、すべての静的コンテンツを構成したディレクトリの場所に収集できます。collectstatic操作を確認する必要があります。+」というディレクトリに配置されます。サーバーの初期セットアップガイドに従った場合は、サーバーを保護するUFWファイアウォールが必要です。開発用サーバーをテストするには、使用するポートへのアクセスを許可する必要があります。次のように入力して、ポート8000​​の例外を作成します。8000最後に、次のコマンドでDjango開発サーバーを起動して、プロジェクトをテストできます。0.0.0.0:8000ウェブブラウザで、サーバーのドメイン名またはIPアドレスにアクセスし、その後に「:8000」を入力します。http://:8000デフォルトのDjangoインデックスページが表示されます。createsuperuser」コマンドで作成した管理ユーザー名とパスワードの入力を求められます。[Django管理者ログイン]認証後、デフォルトのDjango管理インターフェースにアクセスできます。*を押して、開発サーバーをシャットダウンします。Gunicornのプロジェクト提供能力のテスト仮想環境を離れる前にやりたい最後のことは、Gunicornをテストして、アプリケーションにサービスを提供できることを確認することです。+`を使用してプロジェクトのWSGIモジュールを読み込みます。.wsgiこれにより、Django開発サーバーが実行されていたのと同じインターフェースでGunicornが起動します。戻ってアプリをもう一度テストできます。`ファイルへの相対ディレクトリパスを指定して、Gunicornにモジュールを渡しました。+」という関数が定義されています。WSGI仕様の詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-uwsgi-and-nginx-to-serve-python-apps-on-ubuntu-14をクリックしてください。*を押してGunicornを停止します。これで、Djangoアプリケーションの構成が完了しました。次のように入力して、仮想環境からバックアウトできます。deactivateプロンプトの仮想環境インジケータは削除されます。Gunicorn用のsystemdソケットおよびサービスファイルの作成GunicornがDjangoアプリケーションとやり取りできることをテストしましたが、アプリケーションサーバーを起動および停止するより堅牢な方法を実装する必要があります。これを実現するために、systemdサービスとソケットファイルを作成します。Gunicornソケットは起動時に作成され、接続をリッスンします。接続が発生すると、systemdはGunicornプロセスを自動的に開始して接続を処理します。+`権限を持つGunicornのsystemdソケットファイルを作成して開くことから始めます。+`セクションを作成します。socket[Socket]ListenStream=/run/gunicorn.sock[Install]WantedBy=sockets.target完了したら、ファイルを保存して閉じます。サービスファイル名は、拡張子を除き、ソケットファイル名と一致する必要があります。`セクションから始めます。ここにサービスの説明を入力し、ネットワーキングターゲットに到達した後にのみ開始するようにinitシステムに指示します。+`ディレクティブを含める必要があります。`セクションを開きます。実行するために処理するユーザーとグループを指定します。関連するすべてのファイルを所有しているため、通常のユーザーアカウントにプロセスの所有権を付与します。www-data」グループに付与します。次に、作業ディレクトリをマップし、サービスを開始するために使用するコマンドを指定します。この場合、仮想環境内にインストールされているGunicorn実行可能ファイルへのフルパスを指定する必要があります。`ディレクトリ内に作成したUnixソケットにバインドします。+`プロセスがGunicornログを収集できるように、すべてのデータを標準出力に記録します。ここで、オプションのGunicorn調整を指定することもできます。この場合、3つのワーカープロセスを指定しました。+`セクションを追加します。これにより、ブート時に起動できるようにした場合、このサービスをリンクする対象がsystemdに指示されます。通常のマルチユーザーシステムが稼働しているときにこのサービスを開始する必要があります。.wsgi:application[Install]WantedBy=multi-user.targetこれで、systemdサービスファイルが完成しました。今すぐ保存して閉じます。これで、Gunicornソケットを開始して有効にすることができます。`にソケットファイルが作成されます。gunicorn.socketソケットファイルを確認することで、操作が成功したことを確認できます。Gunicornソケットファイルの確認プロセスのステータスを確認して、プロセスを開始できたかどうかを確認します。+`ファイルの存在を確認します。+`ファイルが見つからない場合、Gunicornソケットを正しく作成できなかったことを示しています。次を入力して、Gunicornソケットのログを確認します。+`ファイルをもう一度見て問題を修正してください。ie`はまだアクティブになりません。これを確認するには、次のように入力します。+`を介してソケットへの接続を送信できます。localhost端末にアプリケーションからのHTML出力が表示されるはずです。これは、Gunicornが開始され、Djangoアプリケーションを提供できたことを示しています。次のように入力して、Gunicornサービスが実行されていることを確認できます。status`の出力が問題の発生を示している場合は、ログで詳細を確認してください。`ファイルに問題がないか確認してください。+`ファイルに変更を加えた場合、デーモンをリロードしてサービス定義を再読み込みし、次のように入力してGunicornプロセスを再起動します。gunicorn続行する前に、上記の問題をトラブルシューティングしてください。NunicornをGunicornにプロキシパスするように構成するGunicornがセットアップされたので、プロセスにトラフィックを渡すようにNginxを構成する必要があります。+`ディレクトリに新しいサーバーブロックを作成して開くことから始めます。/etc/nginx/sites-available/内部で、新しいサーバーブロックを開きます。このブロックが通常のポート80でリッスンし、サーバーのドメイン名またはIPアドレスに応答するように指定することから始めます。;}次に、ファビコンを見つける際の問題を無視するようにNginxに指示します。+`ディレクトリで収集した静的アセットの場所を指定します。static」の標準URIプレフィックスが付いているため、これらの要求に一致する場所ブロックを作成できます。`ブロックを作成します。+`ファイルを含め、Gunicornソケットにトラフィックを直接渡します。}}完了したら、ファイルを保存して閉じます。/etc/nginx/sites-enabled次のように入力して、構文エラーのNginx設定をテストします。-tエラーが報告されていない場合は、次のように入力してNginxを再起動します。nginx最後に、ポート80で通常のトラフィックに対してファイアウォールを開く必要があります。開発サーバーにアクセスする必要がなくなったため、ポート8000​​を開くルールも削除できます。Full'これで、サーバーのドメインまたはIPアドレスにアクセスして、アプリケーションを表示できるようになります。NginxとGunicornのトラブルシューティングこの最後の手順でアプリケーションが表示されない場合は、インストールのトラブルシューティングを行う必要があります。+」を調整する必要があることを意味しますドメイン名。`を使用して、リクエストへの応答に使用するサーバーブロックを決定します。+」は、選択するデフォルトのサーバーブロック内のものよりも具体的である必要があります。Gatewayエラーを表示している502エラーは、Nginxがリクエストを正常にプロキシできないことを示します。幅広い構成の問題は、502エラーで表されるため、適切にトラブルシューティングするにはより多くの情報が必要です。詳細情報を検索する主な場所は、Nginxのエラーログです。通常、これにより、プロキシイベント中に問題が発生した条件がわかります。次のように入力して、Nginxエラーログに従います。/var/log/nginx/error.log次に、ブラウザで別のリクエストを行って、新しいエラーを生成します(ページを更新してみてください)。ログに新しいエラーメッセージが書き込まれます。メッセージを見ると、問題を絞り込むのに役立ちます。次のメッセージの一部が表示される場合があります。+`ファイルを見つけられなかったことを示しています。+`ファイルの実際のロケーションと比較する必要があります。+`ファイルが見つからない場合、通常はsystemdソケットファイルで作成できなかったことを意味します。[Gunicornソケットファイルの確認に関するセクション]に戻って、Gunicornのトラブルシューティング手順を実行します。unix:/run/gunicorn.sockへのconnect()が失敗しました(13:許可が拒否されました)*これは、権限の問題により、NginxがGunicornソケットに接続できなかったことを示しています。+`ユーザーの代わりにrootユーザーを使用して手順に従うと発生する可能性があります。systemdはGunicornソケットファイルを作成できますが、Nginxはアクセスできません。`ファイルの間の任意の時点で許可が制限されている場合に発生する可能性があります。+`コマンドに渡すことで、ソケットファイルとその各親ディレクトリのアクセス許可と所有権の値を確認できます。gunicorn.sock出力には、各ディレクトリコンポーネントの権限が表示されます。アクセス許可(1列目)、所有者(2列目)、グループ所有者(3列目)を調べることで、ソケットファイルへのアクセスが許可されているタイプを把握できます。Nginxプロセスは、ソケットに正常にアクセスできるはずです。ソケットにつながるディレクトリのいずれかがワールドの読み取りおよび実行の許可を持っていない場合、Nginxは、ワールドの読み取りおよび実行の許可を許可するか、Nginxが属するグループにグループ所有権が付与されることなく、ソケットにアクセスできませんの。Djangoが表示しています:「サーバーに接続できませんでした:接続が拒否されました」Webブラウザでアプリケーションの一部にアクセスしようとしたときにDjangoから表示される可能性のあるメッセージの1つは次のとおりです。5432?これは、DjangoがPostgresデータベースに接続できないことを示しています。次のように入力して、Postgresインスタンスが実行されていることを確認します。+`ファイルで定義されているデータベース設定が正しいことを確認してください。さらなるトラブルシューティング追加のトラブルシューティングのために、ログは根本原因を絞り込むのに役立ちます。それぞれを順番に確認し、問題のある領域を示すメッセージを探します。次のログが役立つ場合があります。`」と入力して、Nginxプロセスログを確認します。`」と入力して、Nginxのアクセスログを確認します。`」と入力して、Nginxエラーログを確認します。+」と入力して、Gunicornアプリケーションログを確認します。`」と入力して、Gunicornソケットログを確認します。構成またはアプリケーションを更新する場合、変更を調整するためにプロセスを再起動する必要があります。Djangoアプリケーションを更新する場合、次のように入力してGunicornプロセスを再起動し、変更を反映できます。gunicornGunicornソケットまたはサービスファイルを変更する場合は、デーモンをリロードし、次を入力してプロセスを再起動します。gunicorn.serviceNginxサーバーブロックの構成を変更する場合は、構成をテストしてから、次のように入力してNginxをテストします。nginxこれらのコマンドは、構成を調整するときに変更を取得するのに役立ちます。結論このガイドでは、独自の仮想環境でDjangoプロジェクトを設定しました。Djangoがクライアントリクエストを処理できるように、クライアントリクエストを変換するようにGunicornを設定しました。その後、Nginxを設定してリバースプロキシとして機能し、クライアント接続を処理し、クライアントのリクエストに応じて正しいプロジェクトを提供します。Djangoは、多くの共通部分を提供することでプロジェクトとアプリケーションの作成を簡単にし、独自の要素に集中できるようにします。この記事で説明した一般的なツールチェーンを活用することで、単一のサーバーから作成したアプリケーションを簡単に提供できます。