Django共有ホスティング、モデルN

Djangoアプリケーションを* nix環境にデプロイするには多くの方法があります。 私はオリジナルのふりをするつもりはありません。



導入条件



前提条件: 使用したソフトウェア:



そしてこの辺のネフィグのru



多くの場合、開発者とともに、ユーザー/クライアント/顧客も自分のプロジェクトのファイルツリーへのアクセスを希望します(好きな名前を付けることができます)。 「ほぼ」部外者。 つまり、サードパーティのユーザーをサーバーのディスク上でのぞき回す可能性に制限することは良い考えです。 一見すると、アイデアはユーザーを自分のホームディレクトリに制限することになります。 あなたはこの衝動に屈するべきではありません。あなたのホームディレクトリでは、ユーザーは王と神であり、1つの間違った動きとあなたが父親であると、プロジェクトが動作しなくなる可能性があります 。 したがって、トリックに進み、次の階層を作成しましょう。

/home /client --      /client --    "client" /another_project /project /www-root /static /app1 /app2 manage.py settings.py django_wsgi.py ... /var /log --  nginx'a,      logrotate /tmp -- chmod 770 --    /run --      /client2 --      /client3 --      
      
      





ユーザー「クライアント」のホームディレクトリには、クライアント、クライアント、その他のディレクトリ、特に指定のない限り、root:clientおよびchmod 750の権利があります。 また、nginxがプロジェクト内の静的ファイルにアクセスできるように、nginxユーザーをクライアントグループに含める必要があります。 また、システムで、クライアントを含むsftponlyグループを作成します。 sshd構成(/ etc / ssh / sshd_config)に以下を追加します。
 Match Group sftponly X11Forwarding no AllowAgentForwarding no AllowTcpForwarding no ChrootDirectory /home/%u ForceCommand internal-sftp
      
      



そして線
 Subsystem sftp /usr/lib/misc/sftp-server
      
      



に置き換える
 Subsystem sftp internal-sftp
      
      





その結果、sftp経由でサーバーにログオンしているユーザー(たとえばwinscpを使用)がホームディレクトリに移動し、1レベル上に移動し、プロジェクトをローミングし、ログを監視できる状況になります。 ただし、彼は重要なディレクトリに移動したり削除したりすることはできません(ただし、chmod 750)。



nginx-この言葉でいくら



Nginxは、おそらく静的コンテンツを配信し、動的生成に関する問題を解決するための最高のhttpサーバーです。 私たちの場合、nginxはuwsgi-module(標準として付属)と一緒にアセンブルする必要があります。 デフォルトでインストールされた場合(少なくともgentooに)、nginxはその設定を/ etc / nginxに保存します。 この伝統を壊すことはありませんし、その逆も同様です。 メインのnginx'a設定(/etc/nginx/nginx.conf)で、httpセクションの最後に行を追加します
 include /etc/nginx/vhost.d/*.conf ;
      
      



その結果、プロジェクトごとに1つの構成ファイル(/etc/nginx/vhost.d/project.conf)を作成できます。

このようなもの:
 #uwsgi# USER client #uwsgi# PRJ cool_site.ru #uwsgi# HOME ~/../project #uwsgi# VE ~/.virtualenvs/project #uwsgi# SOCKET ../var/run/uwsgi-project #uwsgi# LOG ../var/log/uwsgi-project.log #uwsgi# PID ../var/run/uwsgi-project.pid #uwsgi# WORKERS 2 upstream wsgi_cluster__project { server unix:/home/client/var/run/uwsgi-project; } server { listen 80; server_name .cool_site.ru; charset utf8; autoindex off; root /home/client/project/www-root; access_log /home/client/var/log/nginx_access.log ; error_log /home/client/var/log/nginx_error.log error; location /static { root /home/client/project; expires 1d; } location / { try_files $uri @django; } location @django { uwsgi_pass wsgi_cluster__project; include uwsgi_params; } }
      
      



#uwsgi#で始まる行は、コメントとしてnginxによって解釈されますが、nust startスクリプト(以下で説明します)はこれらの行を見て、それら自体のディレクティブを考慮します。



nust-Nginx Uwsgiスターター



かつて、uwsgiが出現し始めたとき、操作中に落下する可能性があり、「帝国」政権はありませんでしたが、すでに需要の地獄にありました-通常は1つの理由で通らなかった書き直しのスクリプトが急いで書かれました-彼は働いています。 それがどのように機能し、何をするのかです。

Nustはクラウンで動きます(crontab -e)
 */5 * * * * nust -s -c /etc/nust.conf
      
      



構成ファイルで。 構成ファイルには2つのセクションがあります。最初のセクションは、nust'yに直接関連し、使用するパスとユーティリティを定義します。2番目のセクションは、uwsgiのデフォルトです。
 [nust] pstree = /usr/bin/pstree vhosts = /etc/nginx/vhost.d/*.conf uwsgi = /usr/bin/uwsgi uwsgi_def_args = --ini=/etc/nust.conf dbdir = /var/run kill = /bin/kill -s TERM kill_k9= /bin/kill -s KILL [uwsgi] master= disable-logging= vacuum= logfile-chown= chmod-socket=666 catch-exceptions= memory-report=
      
      





次のように、nustをシステムにインストールできます。
 sudo pip install nust
      
      





「カーリーコメント」#uwsgi#を使用したnginx'a構成では、次のオプションをオーバーライドできます。 ただし、これらのオプションは必須です。 パスは次の3つの方法で指定できます。

uwsgiでPythonコードを起動するには、いわゆるモジュールが必要です。 djangoを実行するには、次のコードがdjango_wsgi.pyにあります。
 #!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import unicode_literals import os os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
      
      





nustはクラウンで定期的に起動されるため、nustの起動をシステムの起動スクリプトに登録する必要はありません。 プロジェクトを開始するだけでなく、nginx仮想ホストの構成ファイルのステータスと同様に、プロジェクトのステータス(クラッシュ、実行中でない、実行中だが応答しない)を監視する必要があります。 仮想ホストの構成が変更されている場合、対応するプロジェクトが再起動されます。



あとがきの代わりに



まあ、それがすべてです。 重要なことを忘れていないことを願っています。 ご清聴ありがとうございました。



All Articles