nginxの+ジャンゴ+ uWSGI詳細な分析サーバーの展開

アリクラウド:に基づいてCentOSの1708年4月7日Pythonの3.6.1Djangoの2.0.2uWSGI 2.0.15nginxの1.12.2

まず、簡単な紹介は
なぜジャンゴ+ uWSGI + nginxのを使用する理由?どのように展開前に、私たちが最初に把握しなければなりません知っていますか?だから、より多くの我々は?何であるかを知っておく必要があり
区別を小文字に注意を払う、いくつかの概念を明確にするため。

  1. WSGI -フルネームPython Web Server Gateway Interface、すなわちPythonサーバーゲートウェイインターフェイス
    のためPythonの言語定義WebのサーバおよびWebアプリケーションやWebインターフェース間の単純なユニバーサルアプリケーションフレームワークが
    WSGI。ただ、通信プロトコル、より詳細な情報である、ウィキペディアを参照してくださいWSGI
    人気のポイント私が処理するために多くの時間を費やすPythonプログラムを書くためにしたくなかったTCP接続、HTTPその上の要求と応答を、そして、
    彼は統一されたインターフェイス(すなわちにそれらのすべてを取ったWSGI後、専門のWebサーバーによって。)(uWSGI等)とWebアプリケーションフレームワーク(Django達成するために、など) 。
    だけでなく、開発のしきい値を減らすだけでなく、時間を節約できます。
  2. uWSGIは - uWSGIの実現であるWSGI、Webサーバーの契約uWSGI処理HTTP応答解析等を、とに変身WSGI合意ので、我々は書くWebことがuwsgiに渡された情報を処理できるアプリケーションやWebアプリケーションフレームワークを- 。
    uwsgi達成することであるWSGI合意を、情報伝送のタイプを定義する独自の内部サーバプロトコル、
    実装するためのWSGI他のネットワークサーバのサーバのデータ通信プロトコル。

基本的な概念を理解したら、理由を知っDjango+uWSGI. Djangoているアプリケーションフレームワーク、彼は開発者がしながら、ビジネスのコードを書くことに集中できるよう、私たちは、基本的な作業の多くを行う助け実現するプロトコルのサーバーを、両方の組み合わせのみを一緒に、アプリケーションが役割を果たすことができる。理論的には、このセットで、使用するサーバーにデプロイすることができます。そして、我々はまた、追加したいもちろん、ので、その理由をあなたには、いくつかを行うことができませんすることができなかった、またはにより良いものを。に比べて、HTTPサーバーのパフォーマンスのために設計され、高い安定性の利点として使用することができ、より少ないメモリの所有権を持つロードバランサとそう使用して、キャッシュのパフォーマンスの問題である最大の理由の一つ。わずかなサイトは、多くのトラフィックがある場合は、当然のことながら、要件を満たしているが、ケースには、あなたは、高い並列性を必要とする、としてに比べて優れた高並行性の利点。加えて、より高いセキュリティをもたらすことができますあなたがすることができ、経由せず、そうでも多くのパフォーマンスが向上し、動的コンテンツを扱うことに集中。コンテンツにアクセスすることができ、それぞれの任務を要約して動作します。クライアントを受け取ります 要求、要求はにリクエストを提唱し、ある場合には、要求が静的なコンテンツ静的コンテンツ、動的コンテンツに直接返送された場合接続されている私たちにPythonWebuWSGIWSGIWebPython
NginxNginxuWSGI
NginxApache反向代理,HTTPNginxuWSGINginxNginxApache
Nginx直接处理静态内容uWSGIuWSGINginxNginx, epoll, about Nginx.
NginxuWSGIuWSGIDjangoPython処理のための手続き。

知っているDjangouWSGINginx彼らは何であり、なぜ知っている必要がありますDjango+uWSGI+Nginx後に、それが展開サーバーにすることができます。

第二に、プロジェクトの展開

  1. サーバーの展開ではPython 3.6Django 2.0.2

  2. マック端末入力でアリクラウドサーバー接続$ SSH [email protected]
    rootユーザー名は、xxx.cnサーバーのドメイン名またはIPアドレスです。

  3. nginxのをインストールします。

    # yum install epel-release
    # yum install python-devel nginx
    
  4. ピップuwsgiをインストールし使用してください>>> pip3 install uwsgi --upgrade

  5. UWSGIとnginxの設定ファイルとプロジェクトのルートディレクトリに直接設定

    コンフィギュレーションファイルは、展開中に1回だけ必要とされているので、直接サーバー構成で、より適切であろう。もちろん、あなたはまた、ローカルプロジェクトファイルに新しいフォルダに対応する設定ファイルを作成し、設定を書き込むことができます。しかし、設定ファイルにパスをメモサーバーですパスの終わり。

    uwsgi.iniをプロファイルuWSGI。詳細については、以下を参照してくださいuWSGIの設定を。

    [uwsgi]
    #使用HTTP访问的端口号, 使用这个端口号是直接访问了uWSGI, 绕过了Nginx
    http = :8010
    #与外界连接的端口号, Nginx通过这个端口转发给uWSGI
    socket = 127.0.0.1:8001
    #是否使用主线程
    master = true
    # 项目在服务器中的目录(绝对路径)
    chdir = /project_dir/
    # Django's wsgi 文件目录
    wsgi-file = project_name/wsgi.py
    # 最大进程数
    processes = 4
    #每个进程的线程数
    threads = 2
    #状态监听端口
    stats = 127.0.0.1:9191
    # 退出时自动清理环境配置
    vacuum = true
    #目录下文件改动时自动重启
    touch-reload = /project_dir
    #Python文件改动时自动重启
    #py-auto-reload = 1
    #后台运行并把日志存到.log文件
    daemonize = /project_dir/uWSGI.log
    
  6. Nginxこれは、2つの構成ファイルが必要です。uwsgi_paramsファイルとproject_name.confファイル

    1、uwsgi_paramsで直接ファイル倉庫をダウンロードすることができます。2、project_name.conf nginx.confをコピーして、設定ファイルを変更し、最初のnginx.confファイルの場所を探します。Nginxgit

    # nginx -t
    

    それはのようなものを出力します:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    3、新しいproject_name.confファイルは、コピーしnginx.confた情報にすべてのファイルをproject_name.conf。そして置き換えるserver部分を。

    server {
    #把nginx.conf这一部分内容替换掉
    ...
    }
    

    ファイルの後に置き換えます。

    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user  nginx;
    worker_processes  auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    # Load dynamic modules. See /usr/share/nginx/README.dynamic.
    include /usr/share/nginx/modules/*.conf;
    
    events {
        worker_connections  1024;
    }
    
    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        ¦   ¦   ¦   ¦   ¦ '$status $body_bytes_sent "$http_referer" '
        ¦   ¦   ¦   ¦   ¦ '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
    
    
        #下面的部分是替换之后的配置
        # the upstream component nginx needs to connect to
        upstream django {
            # 连接到Django的端口号, 和uwsgi.ini文件中端口一致. 127.0.0.1说明只允许本地转发
            server 127.0.0.1:8001; # for a web port socket (we'll use this first)
        }
    
        # configuration of the server
        server {
            # 端口号, 客户端通过这个端口连接到Nginx
            listen      80;
            # 服务器地址
            server_name pefami.cn; # substitute your machine's IP address or FQDN
            # 编码
            charset     utf-8;
    
            #日志文件在服务器中的路径
            access_log      /project_dir/nginx_access.log;
            error_log       /project_dir/nginx_error.log;
    
            # 上传文件最大体积限制
            client_max_body_size 75M;   # adjust to taste
    
            # Django media文件路径
            location /media  {
                alias /project_dir/media;  # your Django project's media files - amend as                         required
            }
            # Django 静态文件路径
            location /static {
                alias /project_dir/static; # your Django project's static files - amend as required
            }
    
            # Finally, send all non-media requests to the Django server.
            location / {
                uwsgi_pass  django;
                include     /project_dir/uwsgi_params; # the uwsgi_params file you installed
            }
        }
    
    }
    
  7. 後、設定ファイル、サーバー限り、次が実行されているサーバーにアップロードし、プロジェクト全体を構成しました。uWSGIそして、Nginxその上でこれに注意を払う必要があります:
    アリクラウドサーバー内の対応するポートを開くと、上部の構成で使用されるような8001及び80それ以外のポートが。クライアントがサーバーに接続できません。

  8. スタートuWSGI

     # uwsgi --ini uwsgi.ini
    

    また、直接uWSGIを起動し、設定ファイルを必要としない、あなたは次のようにuwsgi.iniファイルを設定する必要があります。

    # uwsgi --http :8001 --chdir /project_dir/project_name --home=/path/to/env --module project_name.wsgi
    

    ここで--home指定されvirtualenvていない場合は、パスを除去することができます。

  9. スタートnginxの

    # nginx -c /project_dir/static/project_name.conf
    
  10. 起動が完了した後は、ネットワークポートの状態を確認することができます

       # netstat -nltp
    

    通常、次回同様の印刷、次の情報が表示されuwsgiとnginxのはのサービスです。

       Active Internet connections (only servers)
       Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
       tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      18977/./src/redis-s 
       tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4752/nginx: master  
       tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1117/sshd           
       tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN      969/java            
       tcp        0      0 127.0.0.1:8001          0.0.0.0:*               LISTEN      8989/uwsgi          
       tcp        0      0 127.0.0.1:9191          0.0.0.0:*               LISTEN      8989/uwsgi          
       tcp        0      0 0.0.0.0:8010            0.0.0.0:*               LISTEN      8989/uwsgi          
       tcp6       0      0 :::3306                 :::*                    LISTEN      1145/mysqld 
    
  11. ここでは、展開の全体のプロセスは完了です。

  12. また、変更されたファイルの後、nginxのは、再起動する必要があります。

       # nginx -s reload
    

著者:KenZhangCnの
リンク:https://www.jianshu.com/p/a13307242ca3
出典:ジェーン・ブック
著者によって予約ジェーン帳の著作権は、いかなる形で再現され、承認を得るために、作者に連絡して、ソースを明記してください。

おすすめ

転載: blog.csdn.net/qq_41433183/article/details/90733244