Djangoアプリケーションを* nix環境にデプロイするには多くの方法があります。 私はオリジナルのふりをするつもりはありません。
導入条件
前提条件:
- 1人のクライアント(顧客)-サーバー上のシステムの1人のユーザー。
- すべてのクライアントプロジェクトは1つのファイル階層にあります。
- Virtualenvは適切であり、使用する必要があります。
- Ftpは悪であり、最新の手段(sftp)を使用します。
- プロジェクト管理用のファイルの数は最小限に抑える必要があります。
使用したソフトウェア:
- nginx
- UWSGI
- cron
- virtualenv
- openssh
そしてこの辺のネフィグの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#で始まる行は、コメントとして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構成では、次のオプションをオーバーライドできます。
- WORKERS-並列ワークフローの数
- MODULE-起動するPythonモジュールの名前(django_wsgi.py)
- PRJ-プロジェクト名
- PID-ワークフローツリーのPIDファイル(var / run / uwsgi.pid)
- LOG-uwsgiログファイルへのパス(var / log / uwsgi.log)
- HARAKIRI-最大クエリ実行時間、秒
- MAX_REQ-処理されたリクエストの数。その後、ワークフローが再開されます
ただし、これらのオプションは必須です。
- USER-プロジェクトの起動元のユーザー
- HOME-プロジェクトのホームディレクトリ(ユーザーではない!)
- VE-仮想環境へのパス(virtualenvの結果)
- SOCKET-ソケットファイルを作成する場所。 指定しない場合、アップストリームセクションから取得されます。
パスは次の3つの方法で指定できます。
- 絶対パスはスラッシュで始まります
(/ tmp) - ユーザーのホームディレクトリからの相対パス
(〜/ gde-to / tam /) - プロジェクトのホームディレクトリからの相対パス
(var / run / uwsgi.pid)
uwsgiでPythonコードを起動するには、いわゆるモジュールが必要です。 djangoを実行するには、次のコードが
django_wsgi.pyにあります。
nustはクラウンで定期的に起動されるため、nustの起動をシステムの起動スクリプトに登録する必要はありません。 プロジェクトを開始するだけでなく、nginx仮想ホストの構成ファイルのステータスと同様に、プロジェクトのステータス(クラッシュ、実行中でない、実行中だが応答しない)を監視する必要があります。 仮想ホストの構成が変更されている場合、対応するプロジェクトが再起動されます。
あとがきの代わりに
まあ、それがすべてです。 重要なことを忘れていないことを願っています。 ご清聴ありがとうございました。