どの「セットアップ」が最も効果的だと思いますか?virtualenvを使用して、djangoプロジェクトをこの環境内に移動しましたが、仮想環境用のフォルダーとプロジェクト用のフォルダーがある別のセットアップを見ました。
virtualenvは、Python環境を分離する方法です。そのため、展開時に大きな役割を果たすことはありませんが、開発およびテスト中は、強く推奨されていない場合は要件です。
virtualenvから得られる価値は、アプリケーションに正しいバージョンのライブラリがインストールされていることを確認できることです。したがって、仮想環境自体をどこに貼り付けるかは問題ではありません。ソースコードのバージョン管理システムの一部として含めないように注意してください。
ファイルシステムのレイアウトは重要ではありません。ディレクトリレイアウトの長所を称賛する記事がたくさんあり、出発点としてクローンを作成できるスケルトンプロジェクトもあります。これは難しい要件というよりも個人的な好みだと思います。確かにそれは素晴らしいことです。ただし、理由がわからない限り、展開プロセスに何の価値も追加されません。シナリオに意味がない限り、一部のブログで推奨されているため、そうしないでください。たとえばsetup.py
、展開ワークフローの一部であるプライベートPyPiサーバーがない場合は、ファイルを作成する必要はありません。
複数のサイトを単一のサーバーでホストできるように設定するにはどうすればよいですか?
複数のサイト設定を行うために必要なことが2つあります。
- SSLを使用している場合は、ポート80またはポート443、あるいはその両方でパブリックIPをリッスンしているサーバー。
- 実際のdjangoソースコードを実行している一連の「プロセス」。
非常に高速なプロキシであり、Apacheのような包括的なサーバーのオーバーヘッドがないため、人々は#1にnginxを使用します。慣れている場合は、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を提案する人もいるのはなぜですか?後者をAmazonEC2インスタンスでテストしましたが、前者が問題なく機能している間は機能しませんでした。
0.0.0.0
「すべてのIPアドレス」を意味します-そのメタアドレス(つまり、プレースホルダーアドレス)。127.0.0.1
は常にローカルマシンを指す予約済みアドレスです。そのため、「localhost」と呼ばれています。同じシステムで実行されているプロセスにのみ到達可能です。
通常、フロントエンドサーバー(上記のリストの#1)がパブリックIPアドレスをリッスンしています。サーバーを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について最初に知っておくべきことは、nginxはApacheやIISのようなWebサーバーではないということです。プロキシです。したがって、「アップストリーム」/「ダウンストリーム」などのさまざまな用語と、複数の「サーバー」が定義されていることがわかります。少し時間を取って、最初にnginxのマニュアルを読んでください。
nginxを設定する方法はたくさんあります。しかし、ここにalias
対に関するあなたの質問に対する1つの答えがありますroot
。root
nginxのドキュメントルート(「ホームディレクトリ」)をバインドする明示的なディレクティブです。これは、次のようなパスなしでリクエストを送信したときに表示されるディレクトリです。http://www.example.com/
alias
「名前をディレクトリにマップする」という意味です。エイリアスディレクトリは、ドキュメントルートのサブディレクトリではない場合があります。
/ etc / nginxで、site-availableとsites-enabledの間にシンボリックリンクを作成するのはなぜですか?
これはdebian(およびubuntuのようなdebianのようなシステム)に固有のものです。 sites-available
システム上のすべての仮想ホスト/サイトの構成ファイルを一覧表示します。からのシンボリックリンクはsites-enabled
、sites-available
そのサイトまたは仮想ホストを「アクティブ化」します。これは、構成ファイルを分離し、ホストを簡単に有効/無効にする方法です。