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

Source: https://habr.com/ru/post/J116894/


All Articles