どの「セットアップ」が最も効果的でしたか? 私はvirtualenvを使用し、djangoプロジェクトをこの環境内に移動しましたが、仮想環境用のフォルダーとプロジェクト用のフォルダーがある別のセットアップを見てきました。
virtualenv は Python 環境を分離する方法です。そのため、展開時に大きな役割を果たすことはありませんが、開発およびテスト中は必須ですが、強くお勧めしません。
virtualenv から得られる価値は、アプリケーションに正しいバージョンのライブラリがインストールされていることを確認できることです。したがって、仮想環境自体をどこに貼り付けるかは問題ではありません。ソースコードのバージョン管理システムの一部として含めないようにしてください。
ファイル システムのレイアウトは重要ではありません。ディレクトリ レイアウトの利点を称賛する記事や、出発点として複製できるスケルトン プロジェクトを称賛する記事がたくさんあります。これは厳密な要件というよりも個人的な好みだと思います。確かに持っているのはいいことです。ただし、理由がわからない限り、展開プロセスに価値はありません。シナリオにとって意味がない限り、一部のブログで推奨されているため、実行しないでください。たとえばsetup.py
、展開ワークフローの一部であるプライベート PyPi サーバーがない場合、ファイルを作成する必要はありません。
単一のサーバーで複数のサイトをホストできるように設定するにはどうすればよいですか?
複数のサイトのセットアップを行うには、次の 2 つのことが必要です。
- SSL を使用している場合は、ポート 80 および/またはポート 443 でパブリック IP をリッスンしているサーバー。
- 実際の django ソース コードを実行している一連の「プロセス」。
人々は #1 に nginx を使用します。これは、非常に高速なプロキシであり、Apache のような包括的なサーバーのオーバーヘッドが発生しないためです。Apache に慣れている場合は、自由に使用できます。「複数のサイトの場合、nginx を使用する」という要件はありません。そのポートでリッスンし、実際のdjangoコードを実行しているプロセスにリダイレクト(プロキシ)する方法を知っているサービスが必要なだけです。
#2 については、これらのプロセスを開始する方法がいくつかあります。gevent/uwsgi が最も人気のあるものです。ここで覚えておくべき唯一のことは、本番環境では runserver を使用しないことです。
これらは絶対的な最小要件です。通常、実行中のすべての「djangoサーバー」(#2)を制御するために、ある種のプロセスマネージャーを追加します。ここでは、参照upstart
してsupervisor
言及します。システム全体を引き継ぐ必要がないため、スーパーバイザーを好みます(新興企業とは異なります)。ただし、繰り返しますが、これは難しい要件ではありません。screen
一連のセッションを完全に実行して、それらを切り離すことができます。欠点は、サーバーが再起動した場合に、画面セッションを再起動する必要があることです。
個人的に私はお勧めします:
- #1のNginx
- uwsgi と gunicorn のどちらかを選択してください。私は uwsgi を使用しています。
- バックエンド プロセスを管理するスーパーバイザー。
- ホスティングしている各アプリケーションの個々のシステム アカウント (ユーザー)。
#4 をお勧めする理由は、権限を分離するためです。繰り返しますが、要件ではありません。
gunicorn_django -b 0.0.0.0:8000 の使用を提案する人もいれば、gunicorn_django -b 127.0.0.1:8000 の使用を提案する人がいるのはなぜですか? Amazon EC2 インスタンスで後者をテストしましたが、前者は問題なく動作しましたが、動作しませんでした。
0.0.0.0
「すべての IP アドレス」を意味します - これはメタ アドレス (つまり、プレースホルダー アドレス) です。127.0.0.1
常にローカル マシンを指す予約アドレスです。そのため、「localhost」と呼ばれます。同じシステムで実行されているプロセスにのみ到達可能です。
通常、パブリック IP アドレスでリッスンするフロント エンド サーバー (上記のリストの 1 番目) があります。サーバーを1 つのIP アドレスに明示的にバインドする必要があります。
ただし、何らかの理由で DHCP を使用している場合、または IP アドレスがどうなるかわからない場合 (たとえば、新しくプロビジョニングされたシステム)、nginx/apache/その他のプロセスにバインドするように指示できます0.0.0.0
。これは一時的な応急処置です。
実稼働サーバーの場合、静的 IP があります。動的 IP (DHCP) を使用している場合は、そのままにしておくことができます0.0.0.0
。ただし、運用マシンに DHCP を使用することは非常にまれです。
gunicorn/uwsgi をこのアドレスにバインドすることは、本番環境では推奨されません。バックエンド プロセス (gunicorn/uwsgi) を にバインドする0.0.0.0
と、フロントエンド プロキシ (nginx/apache/etc) をバイパスして「直接」アクセスできるようになります。特にフロントエンド サーバー (nginx) とバックエンド プロセス (django/uwsgi/gevent) が同じマシンで実行されている場合、誰かがアプリケーションを直接要求http://your.public.ip.address:9000/
してアクセスする可能性があります。
ただし、フロントエンド プロキシ サーバーを実行する手間をかけたくない場合は、自由に実行できます。
nginx の構成ファイルの背後にあるロジックは何ですか? 大幅に異なる構成ファイルを使用するチュートリアルが非常に多くあるため、どちらが優れているかについて混乱しています。たとえば、「エイリアス /path/to/static/folder」を使用する人もいれば、「root /path/to/static/folder」を使用する人もいます。おそらく、好みの構成ファイルを共有できます。
nginx について最初に知っておくべきことは、これがApache や IIS のようなWeb サーバーではないということです。プロキシです。したがって、「上流」/「下流」や複数の「サーバー」などのさまざまな用語が定義されていることがわかります。時間をかけて、最初に nginx のマニュアルを読んでください。
nginx をセットアップするにはさまざまな方法があります。alias
しかし、これはvs.に関するあなたの質問に対する 1 つの答えroot
です。root
nginx のドキュメント ルート (「ホーム ディレクトリ」) をバインドする明示的なディレクティブです。これは、次のようなパスなしでリクエストを送信したときに参照するディレクトリですhttp://www.example.com/
alias
「名前をディレクトリにマップする」ことを意味します。エイリアス ディレクトリは、ドキュメント ルートのサブ ディレクトリではない場合があります。
/etc/nginx で site-available と sites-enabled の間にシンボリックリンクを作成するのはなぜですか?
これは、debian (および ubuntu のような debian に似たシステム) に固有のものです。 sites-available
システム上のすべての仮想ホスト/サイトの構成ファイルを一覧表示します。sites-enabled
からへのシンボリック リンクは、sites-available
そのサイトまたは仮想ホストを「アクティブ化」します。これは、構成ファイルを分離し、ホストを簡単に有効/無効にする方法です。