はじめに
ある日、職場で、Django(Python)で書かれたWebアプリケーションを実行する必要がありました。 検索中に、Nginx + uWSGIを使用したDjangoプロジェクトの立ち上げを説明する同様の記事が多数見つかりました。 著者は、特定のDjangoプロジェクトの立ち上げを検討しました。このプロジェクトには、uWSGIワーカー用の独自のxml構成ファイルと、Nginxと対話するための別のソケット/ポートがあります。 その結果、新しいDjangoプロジェクトを追加する場合、このアプリケーション用にすでにuWSGIワーカーを再構成する必要があります(コピーアンドペーストでも、まだ)。 残念ながら、この方法は普遍的ではなく、この構成では、
- uWSGIワーカー用の単一の一般化されたxml構成ファイル。
- uWSGIワーカーのxml構成ファイルで各Djangoプロジェクトに記述されている特定のパラメーターは、Nginxの場所に転送され、NginxからuWSGIワーカーに渡されます。
アプリケーションホスティングディレクトリ
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; }
ロケーションのこの構成では:
- パラメーター「SCRIPT_NAME / appN」は、uWSGIワーカーの構成xmlファイルのパラメーターに対応します。
<app mountpoint = "/ appN"> ... </ app>
「そして、Djangoプロジェクトのコンテキストを示しています。 - 「UWSGI_SCRIPT webapp」パラメーターはwebappパラメーターに対応し、Djangoプロジェクトへのエントリポイントを示します(アプリケーションへのエントリポイントについて少し下)。
- パラメータ「UWSGI_CHDIR / usr / local / www / appN」は、パラメータ/ usr / local / www / appNに対応し、Djangoプロジェクトのあるディレクトリを示します。
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