Nginx + uWSGI + Django、起動オプションの1つ

この記事では、UnixライクなオペレーティングシステムでNginx + uWSGIバンドルにDjangoプロジェクトを展開する方法の1つについて説明します。 テストと追加の操作操作は、FreeBSDで実行されましたが、Linuxでは、いくつかの小さな点を除いて、プロセスは同様です。



はじめに



ある日、職場で、Django(Python)で書かれたWebアプリケーションを実行する必要がありました。 検索中に、Nginx + uWSGIを使用したDjangoプロジェクトの立ち上げを説明する同様の記事が多数見つかりました。 著者は、特定のDjangoプロジェクトの立ち上げを検討しました。このプロジェクトには、uWSGIワーカー用の独自のxml構成ファイルと、Nginxと対話するための別のソケット/ポートがあります。 その結果、新しいDjangoプロジェクトを追加する場合、このアプリケーション用にすでにuWSGIワーカーを再構成する必要があります(コピーアンドペーストでも、まだ)。 残念ながら、この方法は普遍的ではなく、この構成では、 FreeBSDの単一の制御点である動作中のデーモンを制御するためのFreeBSDのshniku手段はありません。 その結果、インターネットを検索し、uWSGIプロジェクトの公式wikiを研究した後、次の起動方法が開発されました(基本的な違い)。
アプリケーションホスティングディレクトリ


Djangoプロジェクトのコングロマリットがデプロイされる単一のディレクトリを使用することになっています。私の場合は/ usr / local / wwwです。 たとえば、ディレクトリの内容は次のようになります。

# ls -la /usr/local/www/

...

drwxr-xr-x ... app1

drwxr-xr-x ... app2

drwxr-xr-x ... appN

-rw-r--r-- ... webapp.xml








Nginxを構成する


場所の設定は原則に基づいて行われ、1つのDjangoプロジェクトは1つの場所です。



nginx.conf:
        場所/ {
                 uwsgi_pass unix:///tmp/uwsgi.sock;
                 uwsgi_paramsを含めます。

                 uwsgi_param UWSGI_SCRIPT webapp;
                 uwsgi_param UWSGI_CHDIR / usr / local / www / app1;
         }

        場所/ app2 {
                 uwsgi_pass unix:///tmp/uwsgi.sock;
                 uwsgi_paramsを含めます。

                 uwsgi_param SCRIPT_NAME / app2;
                 uwsgi_param UWSGI_SCRIPT webapp;
                 uwsgi_param UWSGI_CHDIR / usr / local / www / app2;

         }

        場所/ appN {
                 uwsgi_pass unix:///tmp/uwsgi.sock;
                 uwsgi_paramsを含めます。

                 uwsgi_param SCRIPT_NAME / appN;
                 uwsgi_param UWSGI_SCRIPT webapp;
                 uwsgi_param UWSGI_CHDIR / usr / local / www / appN;

         }


ロケーションのこの構成では:

Webapp.xml構成ファイル


uWSGIワーカーwebapp.xmlのxml構成ファイルは、/ usr / local / wwwディレクトリにあります。



webapp.xml:
  <uwsgi>
         <socket> /tmp/uwsgi.sock </ socket>
         <プロセス> 1 </プロセス>

         <マスター/>
         <enable-threads />

         <uid> 80 </ uid>
         <gid> 80 </ gid>

         <pidfile> /var/run/uwsgi.pid </ pidfile>
 </ uwsgi> 


Djangoプロジェクトのエントリポイント


各アプリケーションapp1、app2、appNのディレクトリにwebappファイルがあることが重要です。これはDjangoプロジェクトへのエントリポイントです。 uWSGIワーカーはwebappを起動し、webappはDjangoプロジェクトでWSGIハンドラーを起動します。



これは、webappがapp1プロジェクトを探す方法です。
 #-*-コーディング:iso-8859-1-*-

インポートsys、os
 django.core.handlers.wsgiをインポートする

 sys.path.insert(0、 '/ usr / local / www / app1')
 os.environ ['DJANGO_SETTINGS_MODULE'] = '設定'

 application = django.core.handlers.wsgi.WSGIHandler()


結論の代わりに



これでセットアップは完了です。 ここで、すべてのDjangoプロジェクトにサービスを提供するuWSGIワーカーを開始するには、次のコマンドを実行するだけです。

#uwsgi -s /tmp/uwsgi.sock -x /usr/local/www/webapp.xml



FreeBSDでは、Linuxよりも起動をより美しく調整できます。

/etc/rc.conf:

uwsgi_enable = "YES"

uwsgi_flags = "-x /usr/local/www/webapp.xml"



#/ usr / local / etc / uwsgi start



この構成では、Djangoプロジェクトを作業ディレクトリに解凍し、Nginxにテンプレートの場所を追加して、NginxおよびuWSGIデーモンを再起動するだけで十分です。



中古文学ブログ


projects.unbit.it/uwsgi/wiki/RunOnNginx

projects.unbit.it/uwsgi/wiki/Example

projects.unbit.it/uwsgi/wiki/Emperor



http://wiki.diphost.ru/Category:WSGI

blog.zacharyvoase.com/2010/03/05/django-uwsgi-nginx

www.westphahl.net/blog/2010/4/8/running-django-nginx-and-uwsgi

posterous.adambard.com/start-to-finish-serving-mysql-backed-django-w

brandonkonkle.com/blog/2010/sep/14/django-uwsgi-and-nginx

www.jeremybowers.com/blog/post/5/django-nginx-and-uwsgi-production-serving-millions-page-views

www.cherokee-project.com/doc/cookbook_uwsgi.html



All Articles