47

Django を使用した中規模のサイトをデプロイしようとしています。専用のUbuntuサーバーがあります。

どのサーバーソフトウェアを使用するかについて、私は本当に混乱しています。だから私は自分自身に考えました:スタックオーバーフローに尋ねてみませんか。

私が探しているのは:

  • セットアップが簡単
  • リソースをすばやく簡単に
  • メディアファイルを提供できます
  • 同じサーバーで複数のジャンゴサイトを提供できます
  • PHP など、リソースを消費するものや、私には何の役にも立たないものはインストールしたくありません。

Apache、nginx、lighty で mod_wsgi と mod_python について聞いたことがあります。これらの長所と短所はどれですか?

@Barry:どういうわけか、Apacheが肥大化しているように感じます。代替案はどうですか?

@BrianLy : わかりました mod_wsgi をもう少し調べます。しかし、lighty で静的ファイルを提供する場合、なぜ Apache が必要なのですか? また、django アプリ自体を lighty で提供することもできました。やっぱりダメですか?バカでごめんなさい(-_-;)

更新: lighty と nginx はどうですか? これらが最適な選択である場合のユースケースはどれですか?

4

13 に答える 13

27

より詳細な回答を探していたので、自分でこの問題を詳細に調査することにしました。何か誤解していることがあれば教えてください。

いくつかの一般的な推奨事項は、メディアを処理するために別の Web サーバーを使用することです。個別とは、Django を実行していない Web サーバーを意味します。このサーバーは、たとえば次のようになります。

  • Lighttpd (ライティー)
  • Nginx (エンジン X)
  • または他の軽量サーバー

次に、Django の場合、さまざまな道をたどることができます。次のいずれかを実行できます。

  • Apache経由で Django を提供し、次のことを行います。

    • mod_python

      これは、安定した推奨/十分に文書化された方法です。短所:大量のメモリを使用します。

    • mod_wsgi

      私が理解していることから、 mod_wsgi は新しい代替手段です。リソースに関しては、より高速で簡単なようです。

    • mod_fastcgi

      FastCGI を使用すると、Django のサービスを別のプロセスに委譲することになります。mod_python にはすべてのリクエストに Python インタープリターが含まれているため、大量のメモリを使用します。これは、その問題を回避する方法です。また、セキュリティ上の懸念もあります。

      あなたがすることは、Django FastCGI サーバーを別のプロセスで起動し、必要に応じてこのプロセスを呼び出すように書き換えを介して apache を構成することです。

または、次のことができます。

  • Apache を使用せずに、FastCGI をネイティブにサポートする別のサーバーを使用してDjangoを提供します。

    (ドキュメントには、Apache 固有のニーズがなければこれを行うことができると記載されています。その理由は、メモリを節約するためであるに違いないと思います。)

    • Lighttpd

    Youtubeを運営するサーバーです。高速で使いやすいように見えますが、メモリリークに関するレポートを見てきました。

    • nginx

    このサーバーは lighttpd よりもさらに高速であると主張するベンチマークを見てきました。ただし、ほとんどがロシア語で文書化されています。

もう 1 つは、Python の制限により、サーバーはスレッドではなくフォーク モードで実行する必要があることです。

これは私の現在の研究ですが、もっと多くの意見や経験が欲しいです。

于 2008-08-27T08:41:53.070 に答える
9

チェロキーを使用しています。

彼らのベンチマーク(一粒の塩) によると、それは Lighttpd と nginx の両方よりも負荷をうまく処理します... しかし、それが私がそれを使用する理由ではありません。

私がこれを使用するcherokee-adminのは、 と入力すると、(ワンタイム パスワードを使用して) ログインできる新しいサーバーが起動し、美しく完成した webmin を介してサーバー全体を構成できるためです。それはキラー機能です。それはすでに多くの時間を節約してくれました。サーバーのリソースを大幅に節約できます。

django に関しては、スレッド化された SCGI プロセスとして実行しています。うまくいきます。チェロキーもそれを実行し続けることができます。繰り返しますが、非常に優れた機能です。

現在の Ubuntu リポジトリのバージョンは非常に古いため、 PPAを使用することをお勧めします。幸運を。

于 2008-12-09T17:08:28.863 に答える
6

@Barryが言ったように、ドキュメントではmod_pythonを使用しています。サーバーとして Ubuntu を使用したことはありませんが、Solaris で mod_wsgi を使用した経験はあります。mod_wsgi と Djangoのドキュメントは、mod_wsgiサイトにあります。

要件の簡単な確認:

  • セットアップが簡単 Apache 2.2 はビルドとインストールがかなり簡単であることがわかりました。
  • リソースを高速かつ簡単に使用できるかどうかは、使用状況とトラフィックによって異なります。* Apache を使用してすべてのファイルをサーバーするのではなく、LightTPD (lighty) を使用して静的ファイルをサーバーする場合があります。
  • メディア ファイルを提供できますか? イメージ、フラッシュ ファイルのことだと思いますか? アパッチはこれを行うことができます。
  • 同一サーバー上の複数のサイトApache でホスティングする仮想サーバー。
  • むしろ、他の拡張機能をインストールしないでください。Apache 構成で不要なものをコメントアウトします。
于 2008-08-25T14:00:27.687 に答える
5

django プロジェクトをデプロイする公式に推奨されている方法は、mod_python を apache で使用することです。これはドキュメントに記載されています。 これの主な長所は、これが最も文書化されており、最もサポートされており、最も一般的な展開方法であることです。短所は、おそらく最速ではないということです。

于 2008-08-25T13:49:24.970 に答える
3

最適な構成はあまり知られていないと思います。しかし、ここにあります:

  1. リクエストを処理するためにnginxを使用します(アプリに対して動的、静的コンテンツを直接)。
  2. 動的コンテンツを提供するには、PythonWebサーバーを使用します。

PythonベースのWebサーバーの2つの最も高速なソリューションは次のとおりです。

djangoの現在の最適な構成を見つけるには、googleを調べる必要があります(まだ開発中です)。

于 2008-09-20T18:06:27.277 に答える
2

mod_wsgiでnginx ( Sidから取得した0.6.32 )を使用しています。それは非常にうまく機能しますが、私は何も試したことがないので、他の方法よりも優れているかどうかはわかりません。Nginxにはmemcachedサポートが組み込まれているため、Djangoキャッシングミドルウェアと相互運用できる可能性があります(実際には使用しません。代わりに、python-memcacheを使用して手動でキャッシュを埋め、変更が加えられたときに無効にします)。そのため、キャッシュヒットはDjangoを完全にバイパスします。 (私の開発マシンは1秒あたり約3000のリクエストを処理できます)。

警告:nginx'mod_wsgiは名前付きの場所を非常に嫌うため(それらを渡そうとしますSCRIPT_NAME)、明らかな' <code> error_page 404=@django'は多くのあいまいなエラーを引き起こします。これを修正するには、mod_wsgiソースにパッチを適用する必要がありました。

于 2008-09-24T11:58:12.697 に答える
2

これには多くの方法やアプローチがあります。そのため、DjangoAdvent.com のデプロイ プロセスに関連する記事を注意深く読むことをお勧めします: Eric Florenzano - FastCGI による Django のデプロイ: http://djangoadvent.com/1.2/deploying -django-site-using-fastcgi/ もお読みください: Mike Malone - Scaling Django Stochastictechnologies ブログ: The perfect Django Setup Mikkel Hoegh ブログ: 35 % Response-time-improvement-switching-uwsgi-nginx

よろしく

于 2010-10-28T04:05:17.643 に答える
2

私もすべてのオプションを理解するのに苦労しています。このブログ投稿では、mod_python と比較した mod_wsgi のいくつかの利点について説明しました。

小さな VPS 上の複数のトラフィックの少ないサイトでは、RAM の消費が主な懸念事項となり、mod_python は悪い選択肢のように思えます。lighttpd と FastCGI を使用して、単純な Django サイトの最小メモリ使用量を 58MiB 仮想および 6.5MiB 常駐 (再起動して RAM を大量に使用しない単一の要求を処理した後) に下げることができました。

Debian Etch で Python 2.4 から 2.5 にアップグレードすると、Python プロセスの最小メモリ フットプリントが数パーセント増加することに気付きました。一方、2.5 のより優れたメモリ管理は、長時間実行されるプロセスに対してより大きな逆効果をもたらす可能性があります。

于 2008-10-06T07:56:56.303 に答える
2

私の意見では、最高/最速のスタックは varnish-nginx-uwsgi-django です。そして、私はそれをうまく使っています。

于 2011-05-09T21:01:42.780 に答える
1

すべての Django デプロイメントに nginx と FastCGI を使用しています。これは主に、通常は Slicehost にデプロイし、すべてのメモリを Apache に寄付したくないためです。これが私たちの「ユースケース」になると思います。

ドキュメンテーションの大部分がロシア語であるという意見については、英語の wikiのほとんどの情報が非常に有用で正確であることがわかりました。このサイトには、Django のサンプル構成もあり、そこから独自の nginx 構成を微調整できます。

于 2008-09-04T13:53:33.380 に答える
1

チェロキーの使用について警告があります。Django Cherokee に変更を加えると、古いプロセスを強制終了して新しいプロセスを開始する代わりに、古いプロセスが維持されます。

Apache では、この記事を強くお勧めします。

http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl

セットアップが簡単で、変更を行った後に簡単に強制終了またはリセットできます。

ターミナルに入力するだけ

sudo /etc/init.d/apache2 restart

そして変化は即座に見られます。

于 2013-02-12T23:55:47.600 に答える
1

lighthttpd を使用している場合は、FastCGI を使用して Django を提供することもできます。速度が mod_wsgi と比較してどうなのかはわかりませんが、メモリが正しく機能する場合、mod_python では得られない mod_wsgi で得られる利点がいくつか得られます。主なものは、各アプリケーションに独自のプロセスを与えることができることです (これは、さまざまなアプリのメモリを分離しておくのに非常に役立ち、マルチコア コンピューターを利用するのにも役立ちます。

編集:nginixに関する更新に関して追加するために、メモリが再び正しく機能する場合、nginixは「greenlets」を使用して同時実行を処理します。これは、1 つのアプリがサーバーのすべての時間を消費しないように、もう少し注意する必要があることを意味します。

于 2008-08-25T15:06:06.783 に答える