【uWSDI】実戦のDjango配置経験


  • uWSDiはアプリケーションサーバであり、uwsgi、wsgiなどのプロトコルを実現し、wsgiアプリケーション
  • を実行することができる.
  • uwsgiはプロトコル名
  • です.
    Django構成
    以下は自分がよく使う構成テンプレートで、1.9以上のバージョンで使用され、主にdjangoアプリケーションに基づいています.
    [uwsgi]
    djangoproject=/home/www/portal
    
    chdir=%(djangoproject)
    #virtualenv = /home/robc/.virtualenvs/workrave-cloud-server/
    #pythonpath = %(django_dir)
    
    wsgi-file=wsgi.py
    module = wsgi
    env=DJANGO_SETTINGS_MODULE=settings
    daemonize=%(djangoproject)/logs/uwsgi.log
    pidfile=%(djangoproject)/uwsgi.pid
    print=%(daemonize)
    
    #you can use http mode test
    #socket=0.0.0.0:9001
    http=0.0.0.0:8000
    #user unix sock
    #socket = %(deploy_dir)/run/uwsgi-%(project).sock
    #chmod-socket = 777
    
    stats=/tmp/myapp.status
    memory-report=true
    log-format = %(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"
    master=True
    processes=8
    vacuum=True
    max-requests=8000
    eable-threads=True
    buffer-size=65535
    harakiri=30
    
    #listen queue number,you can see /proc/sys/net/core/somaxconn in linux
    listen=1024
    
    #user and group
    #uid = 
    #gid = 
  • 権限の設定には
  • を追加する必要があります.
    uid = gid =
    権限制御を行う
  • uWSDiは、主にアプリケーションシーン
  • に依存して、socket、http、またはunix socketを使用することができる.
  • 要求を印刷したくないlogはdisable-logging = trueを構成することができ、これにより
  • を印刷するだけである.
  • python C拡張は、場合によっては複数の解釈器連携においてsingle-interpreter = true
  • に解決するのに好ましくない.
  • harakiri=30 djangoドキュメントでは、このオプションも推奨されています.30は30秒を表し、主にプロセスを保護し、いくつかの危険なrequestがプロセス全体を殺すことを防止します.具体的な原理は[doc](
  • )を参照してください.
    http://uwsgi-docs.readthedocs.org/en/latest/FAQ.html#what-is-harakiri-mode)外部にインタラクティブなインタフェースが適用され、応答が非常に遅い場合は、値を大きくしたほうがいいです.そうしないと、頻繁に再起動し、正常な応答を要求する確率が低下します.
  • max-requests設定値に達すると、プロセス
  • が優雅に再ロードされる.
  • プロファイルの中にはuwsgiに属する魔法変数もあります
  • %dプロファイルが存在するディレクトリの絶対パスは、これに基づいて多くのパスを省くハードコーディング
  • である.
  • %(params)カスタム変数の値
  • を取り出す.

    構成オプションは、公式ドキュメントまたはこのpptを参照できます.
    その他
  • は、Emperorモード(主にプロファイルを監視し、ホットスワップできる)を採用することが多く、uWSDIでpythonアプリケーションの負荷分散
  • を行うこともできます.
  • プロファイルのホットスワップが良い方法は、構成ディレクトリ+ソフト接続
  • です.
  • geventまたはasync構成は、純粋なdjangoアプリケーションにとって何の役にも立たない
  • 静的ファイルの設定
    nginxのaliasに似ています
    static-map = /static=/usr/lib/python2.6/site-packages/django/contrib/admin/static