この記事では、UnixライクなオペレーティングシステムでNginx + uWSGIバンドルにDjangoプロジェクトを展開する方法の1つについて説明します。 テストと追加の操作操作は、FreeBSDで実行されましたが、Linuxでは、いくつかの小さな点を除いて、プロセスは同様です。
はじめに
ある日、職場で、Django(Python)で書かれたWebアプリケーションを実行する必要がありました。 検索中に、Nginx + uWSGIを使用したDjangoプロジェクトの立ち上げを説明する同様の記事が多数見つかりました。 著者は、特定のDjangoプロジェクトの立ち上げを検討しました。このプロジェクトには、uWSGIワーカー用の独自のxml構成ファイルと、Nginxと対話するための別のソケット/ポートがあります。 その結果、新しいDjangoプロジェクトを追加する場合、このアプリケーション用にすでにuWSGIワーカーを再構成する必要があります(コピーアンドペーストでも、まだ)。 残念ながら、この方法は普遍的ではなく、この構成では、
FreeBSDの単一の制御点である動作中のデーモンを制御するための
FreeBSDのshniku手段はありません。 その結果、インターネットを検索し、uWSGIプロジェクトの公式wikiを研究した後、次の起動方法が開発されました(基本的な違い)。
- 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;
}
ロケーションのこの構成では:
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/RunOnNginxprojects.unbit.it/uwsgi/wiki/Exampleprojects.unbit.it/uwsgi/wiki/Emperorhttp://wiki.diphost.ru/Category:WSGIblog.zacharyvoase.com/2010/03/05/django-uwsgi-nginxwww.westphahl.net/blog/2010/4/8/running-django-nginx-and-uwsgiposterous.adambard.com/start-to-finish-serving-mysql-backed-django-wbrandonkonkle.com/blog/2010/sep/14/django-uwsgi-and-nginxwww.jeremybowers.com/blog/post/5/django-nginx-and-uwsgi-production-serving-millions-page-viewswww.cherokee-project.com/doc/cookbook_uwsgi.html