web-dev-qa-db-ja.com

Djangoを本番サーバーにデプロイする

まず、私はWindowsユーザーであり、Webの世界では非常に新しいことを明確にさせてください。過去数か月間、私はpythonとDjangoの両方を学び、それは私にとって素晴らしい経験でした。今、私はどういうわけか、本番サーバーにデプロイしたい小さなプロジェクトを作成しました。 。Djangoには開発サーバーが組み込まれているので、問題はありませんでした。しかし、本番サーバーにデプロイする必要があるので、グーグルで検索して、Nginx + uWSGIまたはNginx + Gunicornを見つけました。また、uWSGIとGunicordはWindowsと互換性がないため、Ubuntuまたは他のUnixシステムを採用する必要があると思います。

だから私の質問は:

  1. 明確にするために、上記のいずれかを使用する必要があるので、なぜ2台のサーバーが必要なのか説明してください。
  2. Ubuntu環境を適応させる必要がある場合、Ubuntuシェルスクリプト、SSHなどを学ぶ必要がありますか?または、ホスティングプロバイダーは私がそれをするのを手伝ってくれますか?
  3. 上記について他に何が必要かをお知らせください。

お時間をいただき、誠にありがとうございました。私の質問が下手な質問だった場合はご容赦ください。肯定的な反応の答えを期待しています。

18
  1. 一般的な構成では、2つのサーバープロセス(同じ実際のハードウェアまたは仮想サーバーで一緒に実行できます)を使用して、前のプロキシサーバーが低速のクライアントをバッファリングできるようにします。例:遅いクライアントはリクエストでnginxに接続します。 NginxはリクエストをGunicornに渡し、Gunicornが応答します。 NginxはすぐにGunicornの応答を消費し、Gunicornのリソースをすぐに解放します。その時点で、遅いクライアントは、サーバーリソースの邪魔をすることなく、Nginxからの応答を消費したいだけの時間がかかる可能性があります。 2サーバープロセスモデルの代替手段は、Gunicornで非同期ワーカーを使用してGunicorn自体を前面に配置するか、 Waitress のような非同期同期コンボを使用することです。ただし、前面のNginxには、すぐに使用できる静的サーバーを兼ねるという追加の利点があります。

    「遅いクライアント」は次のように説明できることに注意してください。接続を失い、リクエストの途中でタイムアウトするまでTCPソケットがハングしたままになる携帯電話、ただ遅い携帯電話、すべてのタイプの信頼性の低い接続、敵対サーバーリソースを意図的に使用しようとしているサービス拒否クライアント。場合によっては、何らかの理由で一時的な中断や誤動作が発生した古い接続。これは、ほぼすべてのサイトに影響する問題です。

  2. シェルスクリプト自体は必要ありませんが、Ubuntuに慣れるまでには少し時間がかかります。パッケージマネージャーの使用方法、将来の更新を混乱させない方法でインストールされたパッケージの構成方法など、スクリプト以外でも学ぶべきことがたくさんあります。SSHの使用方法を学ぶ必要があります。 ;これは、* nixの世界で最も基本的なサーバー管理ツールの1つです。

    Ubuntuまたは別のサーバープラットフォームの使用法を学ぶ代わりに、HerokuのようなPlatform-as-a-Serviceオプションを使用することもできます。これは、PaaSホスティングプロバイダーが実際にすべての処理を行うためです。このアプローチをお勧めします。そうは言っても、PaaSは、スキルのレベルに関係なく、サーバー管理者ではなく開発に集中したい人にとっては良いオプションだと思いますが、Linuxサーバープラットフォームでの少しの経験が大いに役立つことも事実です。コードが実行される環境を理解するのに役立ちます。したがって、PaaSを使用する場合でも、Ubuntuを少し(または多く)いじることでメリットが得られます。

    PaaSのもう1つの利点は、通常、インフラストラクチャが取引のNginx部分(プロキシを介した低速リクエストのバッファリング)を処理することです。これは、たとえばHerokuの場合です。したがって、インフラストラクチャのその部分についてまったく心配する必要はありません。

  3. 質問のこの部分は広すぎて答えられませんが、説明が必要な場合はコメントで知らせてください。

15

私はこのチュートリアルのようにそれをアルモストでやっています: http://michal.karzynski.pl/blog/2013/06/09/Django-nginx-gunicorn-virtualenv-supervisor/
NginxはDjango gunicornで実行されているアプリとそのサービング統計、私のpython環境、スーパーバイザーは私のアプリの実行を監視する。
Postgresqlを使用していない場合、エラーが発生する可能性があります。質問してからサポートします(以前はMySQLを使用していましたが、現在はPostgresqlです)。

3
McAbra

まず、Windowsに満足している場合は、Ubuntuを使用する必要はありません。 nginxがWindowsで動作するかどうかはわかりませんが、動作しない場合は非常に驚きます(実際、 ここ はWindowsにインストールするためのnginxドキュメントです)。一方、Apacheは間違いなくWindowsで動作します。 Djangoドキュメントには 完全な説明 Djangoを提供するようにApache/mod_wsgiを設定する方法が記載されています。

2台のサーバーは必要ありません。なぜそう思うのかわかりません。通常の理由は、静的アセットを別のサーバーに置くことですが、理由としては言及していません。ただし、話しているのは小さなサイトだけなので、そうする必要はありません。 Djangoと静的アセットの両方を提供するように構成された1つのサーバーは正常に機能します。繰り返しになりますが、ドキュメントではその方法を正確に説明しています。

2
Daniel Roseman