18

Rackspace.com でサーバーをセットアップしようとしています。

次のことを行いました。

  • Centos 6.3をインストールしました
  • インストールされた Python 2.7
  • ホームページの「クイックスタート」を使用してgunicornをインストールしました:gunicorn.org/

クイック スタートでは、「hello world」アプリケーションが初期化されているようです。

ファイル " myapp.py "を作成します。

(チュートリアル) $ vi myapp.py
(チュートリアル) $ cat myapp.py

myapp.py」の内容

def app(environ, start_response):
   data = "Hello, World!\n"
   start_response("200 OK", [
       ("Content-Type", "text/plain"),
       ("Content-Length", str(len(data)))
   ])
   return iter([data])

サーバーについてほとんど知らないので、次に何をすればよいかわかりません。サーバーの IP アドレスをブラウザに入力してみましたが、タイムアウトになるようでした。

あるかどうかはわかりません:

  • インストールする必要がある他のもの。Nginx は、gunicorn Web サイトの「 deploy 」の下に記載されています。Nginx はプロキシ サーバーのように見えますが、gunicorn はサーバーだと思っていたので、混乱しています。2 つのサーバーが必要な理由がわからない?
  • ガンコーンで設定する必要があるもの
  • サーバー自体で構成する必要があるもの
  • 実際にリクエストを処理するために実行する必要があるその他のこと

次のステップは何ですか?

本当にありがとう!

4

3 に答える 3

36

あなたの場合、gunicorn は Web サーバーであるため、Nginx は HTTP リクエストを Nginx から gunicorn に渡すバック プロキシとして機能します。

そこで、同じマシン上で実行する単純な Nginx と Gunicorn の構成の手順をここに示します。

  • nginx の設定から始める

/etc/nginx/nginx.confに移動し、http{} の下に以下があることを確認します。

http{
    # other configurations (...)
    include /etc/nginx/sites-enabled/*;
}

ここで、/etc/nginx/sites-enabled/mysite.conf にファイルを含めます。ここで、リクエストを gunicorn アプリにプロキシします。

server {
    listen 80 default; # this means nginx will be 
                       # listening requests on port 80 and 
                       # this will be the default nginx server
    server_name localhost;

    # declare proxy params and values to forward to your gunicorn webserver
    proxy_pass_request_headers on;
    proxy_pass_request_body on;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_read_timeout 120s;

    location / {
        # here is where you declare that every request to / 
        # should be proxy to 127.0.0.1:8000 (which is where
        # your gunicorn will be running on)          
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;

        proxy_pass http://127.0.0.1:8000/; # the actual nginx directive to 
                                           # forward the request
    }
}

わかりました。この時点では、127.0.0.1:80 へのすべてのリクエストが 127.0.0.1:8000 に渡されるプロキシとして機能する Nginx しかありません。

  • ここで、 Gunicorn Web サーバーを構成します。

通常、構成ファイルを使用する方法で、Gunicorn 構成ファイルは通常の python ファイルにすることができます。ここで、好きな場所にファイルを作成します。このファイルは/etc/gunicorn/mysite.pyになると想定します

workers = 3              # number of workers Gunicorn will spawn 

bind = '127.0.0.1:8000'  # this is where you declare on which address your 
                         # gunicorn app is running.
                         # Basically where Nginx will forward the request to

pidfile = '/var/run/gunicorn/mysite.pid' # create a simple pid file for gunicorn. 

user = 'user'          # the user gunicorn will run on

daemon = True          # this is only to tell gunicorn to deamonize the server process

errorlog = '/var/log/gunicorn/error-mysite.log'    # error log

accesslog = '/var/log/gunicorn/access-mysite.log'  # access log

proc_name = 'gunicorn-mysite'            # the gunicorn process name

OK、すべての設定が完了しました。あとはサーバーを起動するだけです。

gunicorn を起動し、使用するアプリと構成ファイルを指定します。コマンド ラインおよびmyapp.pyファイルが配置されているフォルダーから、次のコマンドを実行します。

gunicorn -c /etc/gunicorn/mysite.py mysite:app

あとはnginxを起動するだけです。

/etc/init.d/nginx start 

また

service nginx start

お役に立てれば。

于 2012-10-12T12:44:41.777 に答える
24

クイックスタートガイドを見ると、おそらく実行する必要がありました

(tutorial) $ ../bin/gunicorn -w 4 myapp:app

次のような行が生成されるはずです。

Listening at: http://127.0.0.1:8000

とりわけ。そのアドレスでサイトにアクセスできるかどうかを確認してください。

また、127.0.0.1はループバック アドレスです。そのホスト自体からのみアクセスできます。Gunicorn を別のオプションにバインドするには--bind 0.0.0.0:80、Jan-Philip が示唆するようにそれを渡します。

ラックスペースについて言及しているため、ファイアウォール設定を調整して、目的のポートへの着信接続を許可する必要がある可能性があります。

于 2012-10-12T12:48:20.543 に答える
7

これまでに開発された Web アプリケーションがないようです。というわけで、当面の目標は開発環境を整えることだと思います。とりあえず、Flask など、ほとんどのフレームワークに含まれている開発 Web サーバーを使用して Web アプリケーションを開発します。

使用しているフレームワークに関係なく、開発用 Web サーバーが 0.0.0.0 でリッスンするようにして、サービスが構成済みのすべてのネットワーク インターフェイスでリッスンし、ポートが外部に対して開いていることを確認します (Rackspace 設定を確認してください)。

アプリケーションの開発が完了したとき、または既存のアプリケーションを調べているときは、確実な方法でデプロイする必要があります。次に、nginx の背後にある gunicorn はオプションです。

あなたの質問を大まかに説明します。もう少し読む必要があるようです:-)

  • Nginx は、gunicorn Web サイトの「デプロイ」の下に記載されています。Nginx はプロキシ サーバーのように見えますが、gunicorn はサーバーだと思っていたので、混乱しています。2 つのサーバーが必要な理由がわからない?

Nginx はフル機能の Web サーバーです。その性能と安定性が高く評価されています。人々はそれを使用して、静的ファイルを提供し (このタスクで動的 Web アプリケーションに負荷をかけないようにするため)、必要に応じて要求を Web アプリケーションに転送し、SSL ターミネーションと負荷分散を行います。これは不完全な図であることに注意してください。

gunicorn は、WSGI アプリを提供するためのサーバーです。主に、Web アプリケーションを実際に実行するワーカー プロセスを管理します。

  • gunicorn で設定する必要があるもの。サーバー自体で構成する必要があるもの。実際にリクエストを処理するために実行する必要がある他のすべてのこと。

実際、Linux ボックスを無限の方法で最適化することができます (パフォーマンスのために、たとえばファイル記述子の制限を増やしたり、セキュリティのために)。gunicorn 内では、ワーカー プロセスの数などを構成できます。フロントエンドまたは別のロード バランサーとして nginx を使用している場合、これには独自の構成があります。ご覧のとおり、実際のシナリオでの実際の展開では、セットアップが非常に複雑になる可能性があります。これは簡単なことではありません。

ただし、WSGI アプリケーションをいじるには、開発フレームワークを適切にセットアップするだけです。ほとんどの場合、これは非常に簡単で、ファイアウォールの問題がないことを確認してください。それで全部です。

于 2012-10-12T12:31:06.860 に答える