Ubuntuのでnginxの展開Djangoプロジェクトのコアの詳細に基づいて:ステップと一般的な問題の概要の実際の開発により、ソリューション洗練されたソリューションのステップ

私は自分のアイデアを書き留めて人々を感じて、いくつかのステップの中核であるかわからないが長すぎるったらしいあり、それらのほとんどは混沌としており、いくつかはあまりにも単純で読み取ることができない、多くのオンライン記事のジャンゴとnginxの展開についてがあります。特にマークされていない多くの詳細がありますが、リードを取得する方法を失敗エラーです。1日の時間の骨の折れる探査した後、詳細なチュートリアル明確まとめ踏まれピットを踏むことができるように、私はこの記事はあなたを助けることを願って!

 

中核となる概念の分析:

WSGIは、Webサーバーのゲートウェイインターフェイスの頭字語です。層は、ビューの角度である、WSGI層は、CGIの位置よりも低くなります。WSGIはちょうど標準の達成するためにどのように定義していないので、しかし、違いは、WSGI CGIが強い拡張性を持ち、マルチスレッド環境やプロセスで実行することができるということです。それは、WebアプリケーションとWebサーバの間に位置しており、WebサーバがCGIことができるので、実際にWSGIは、CGIではありません。これは、組み込みのテストWebサーバーのPythonとして理解することができます。

uWSGIはWSGIプロトコル、uwsgi、HTTPおよびその他のプロトコルを実装するWebサーバーです。HttpUwsgiModule uWSGIでnginxの役割は、サーバーと交換されます。WSGIはWebサーバゲートウェイインターフェイスです。例えば、HTTPプロトコルは、WSGIプロトコルに変換されるので、Pythonは直接使用することができます。

第二に、プロジェクト環境
OS:Ubuntuの16.04

プログラミング言語:Pythonの3.5.2

Webフレームワーク:Djangoの2.0.3

Webサーバー:uWSGI 2.0.17

Webサーバー:nginxの1.10.3

ここではUbuntuはapt-getを特に便利なインストール使用し、特定のインストールを詳述しません。

sudo apt-get install python3
sudo apt-get install python3-pip
sudo apt-get install nginx



nginxのが正常にブラウザにインストール127.0.0.1を入力し、「nginxのへようこそ!」と表示されインストールが成功したことを表します。

三、uWSGIのインストール設定
インストール

sudo pip3 install uwsgi


テストは
test.pyファイルを作成します

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b'Hello World']


uWSGIでファイルを実行します

uwsgi --http :8000 --wsgi-file test.py



ブラウザに127.0.0.1:8000を入力し、「Hello Worldのは、」インストールが成功したことを表して表示されます。

4、ジャンゴuWSGI間のコミュニケーションと
ジャンゴをインストール

sudo pip3 install Django==2.0.3



Djangoプロジェクトを作成します。

django-admin startproject myweb


I Djangoプロジェクトの場所:/ホーム/設定/ myweb

uwsgi --http :8000 --chdir /home/setup/myweb --wsgi-file myweb/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:8001


共通オプション
のhttp:プロトコルタイプとポート番号

プロセス:オープンプロセスの数

労働者:オープンプロセスの数、プロセスと同等

CHDIR:実行ディレクトリを指定します。

WSGIファイル:ロードWSGIファイル

統計:状態サービスに指定されたアドレスにあります

スレッド:実行中のスレッド。GILのなので、私はこれは本当に無駄だと思います。

マスター:メインプロセスの存在を許します

デーモン化:プロセスはバックグラウンドで実行され、ログが指定されたログファイルまたはudpサーバー(デーモン化uWSGIを)打ちます。実際には、最も一般的に使用される、またはローカルファイルへの出力をログに記録します。

pidファイル:主要プロセスのpidファイル、レコードPID番号の場所を指定します。

真空:サーバーの終了が自動的にUNIXソケットファイルとPIDファイルを削除して、環境をクリーンアップ

小扁はお勧め315 346 913のpython学習の学校集団を、あなたは大きなまたは小さな白い牛であるかどうか、であるキャリアを変更したり、参加したいしたい一緒に進行状況を理解することを学ぶために一緒に来ることができます!ツールは、呉服や技術情報の多くが共有するために、グループ内にあります!

第五に、nginxの、uWSGI、Djangoの間の通信
次に、我々はすべての3つを組み合わせたいです

1.設定ジャンゴとuWSGIは、
まず、あなたのDjangoプロジェクトのルートディレクトリにuWSGI uwsgi.iniプロファイルを作成します

cd myweb
touch uwsgi.ini 



次のようにこのDjangoプロジェクトディレクトリのファイル構造です。

MyWeb /
├──manage.pyの
├──MyWeb
│├──を__init__.py
│├──__pycache__
│__init __├──│。CPythonの-35.pyc
││└──settings.cpython-35.pyc
│├ settings.py -
│├──のurls.py
│└──wsgi.py
└──uwsgi.ini

我々はジャンゴでmywebプロジェクトを作成するときに、サブディレクトリmywebで私たちはwsgi.pyファイルを生成支援してきました。だから、私たちはuwsgi.ini設定ファイルを作成する必要があります。

uwsgiはそうでiniファイルや、XMLなどの構成ファイルの複数の種類をサポートしています。ここでは、コンフィギュレーションのiniファイルタイプを使用します。

次に、あなたはちょうど良いuwsgi.iniを作成した設定ファイルを開き、次の設定を追加します:

[uwsgi]

socket = :8888
chdir           = /home/setup/myweb
module          = myweb.wsgi
master          = true
processes       = 4
vacuum          = true



この構成は、実際には、コマンドを介して同等のWSGIは、ドキュメントへのパラメータの束が続きます。

ソケット:プロジェクト実施のために指定したポート番号。

CHDIR:ディレクトリ指定したアイテム。

モジュール:モジュール= hello.wsgiように理解すべきです。uwsgi.ini文書の場合、それは兄弟ディレクトリmywebディレクトリを持って、このディレクトリ内のwsgi.pyファイルがあります。

次に、uwsgiコマンドでプロジェクトを開始するuwsgi.iniファイルを読み込みます

uwsgi --ini uwsgi.ini



結果:

setup@labideas-data:~/myweb$ uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
*** Starting uWSGI 2.0.17 (64bit) on [Tue Mar 20 11:11:30 2018] ***
compiled with version: 5.4.0 20160609 on 19 March 2018 09:13:12
os: Linux-4.4.0-105-generic #128-Ubuntu SMP Thu Dec 14 12:42:11 UTC 2017
nodename: labideas-data
machine: x86_64
clock source: unix
detected number of CPU cores: 4
current working directory: /home/setup/hello
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/setup/hello
your processes number limit is 64049
your memory page size is 4096 bytes
detected max file descriptor number: 65535
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8888 fd 3
Python version: 3.5.2 (default, Nov 23 2017, 16:37:01)  [GCC 5.4.0 20160609]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x1f73aa0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 364520 bytes (355 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x1f73aa0 pid: 7097 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7097)
spawned uWSGI worker 1 (pid: 7099, cores: 1)
spawned uWSGI worker 2 (pid: 7100, cores: 1)
spawned uWSGI worker 3 (pid: 7101, cores: 1)
spawned uWSGI worker 4 (pid: 7102, cores: 1)



間違っている場合、我々は、構成ファイルが正しく設定されていないのパラメータをチェックしなければならない、ビューの起動情報uwsgiに注意してください。

2. [設定nginxの
/ nginxのディレクトリの下の/ etc nginxのデフォルトの構成ファイル

setup@labideas-data:/etc/nginx$ ll
total 64
drwxr-xr-x  6 root root 4096 Mar 20 09:37 ./
drwxr-xr-x 95 root root 4096 Mar 19 19:56 ../
drwxr-xr-x  2 root root 4096 Mar 19 20:13 conf.d/
-rw-r--r--  1 root root 1077 Feb 12  2017 fastcgi.conf
-rw-r--r--  1 root root 1007 Feb 12  2017 fastcgi_params
-rw-r--r--  1 root root 2837 Feb 12  2017 koi-utf
-rw-r--r--  1 root root 2223 Feb 12  2017 koi-win
-rw-r--r--  1 root root 3957 Feb 12  2017 mime.types
-rw-r--r--  1 root root 1919 Mar 20 09:33 nginx.conf
-rw-r--r--  1 root root  180 Feb 12  2017 proxy_params
-rw-r--r--  1 root root  636 Feb 12  2017 scgi_params
drwxr-xr-x  2 root root 4096 Mar 20 10:00 sites-available/
drwxr-xr-x  2 root root 4096 Mar 19 14:59 sites-enabled/
drwxr-xr-x  2 root root 4096 Mar 19 14:59 snippets/
-rw-r--r--  1 root root  664 Feb 12  2017 uwsgi_params
-rw-r--r--  1 root root 3071 Feb 12  2017 win-utf


次の/ etc / nginxの/サイト利用可能なディレクトリのデフォルトの設定ファイルに移動する必要があります(一部のLinuxディストリビューションの設定ファイルが/etc/nginx/nginx.confであり、我々はUbuntuの16.04勝つ他のいくつかの場所があります)。

オリジナルの設定ファイルはバックアップされ、nginxの設定ファイルを開いています

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
sudo vi /etc/nginx/sites-available/default



別のポート番号へのデフォルトのポート番号80、など8080。デフォルトのポート番号80を簡単に他のアプリケーションで使用することができ、我々は我々自身のDjangoのプロジェクトを設定しているので、デフォルトのポートを使用する必要があります。

# Django 2.0 项目部署
server {

    listen          80; 
    server_name     data.labideas.cn 
    charset         UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / { 

        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8888;
        uwsgi_read_timeout 2;
    }   

    location /static {

        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/setup/myweb/static/;
    }   
}


聞く:nginxのプロキシがuwsgi外部ポート番号を指定しています。

SERVER_NAME:あなたは、ローカルホストまたは127.0.0.1を指定した場合、オンラインでの情報のほとんどは、www.baidu.com、例えば(セットアップウェブサイトでは、ローカルでのみアクセスすることができます。

だから、最後にそれがnginxのuwsgiがそれを関連付ける方法ですか?今では、おそらく最も重要なのは、2行構成であることが表示されます。

include uwsgi_params;
uwsgi_pass 127.0.0.1:8888;


uwsgi_paramsとして指定する必要があります。それはuwsgi_passローカルIPとポート番号を参照し、myweb_uwsgi.iniプロファイルIPとポート番号に一致するように。

今nginxのを再起動します

sudo /etc/init.d/nginx restart



ブラウザは127.0.0.1にアクセス

Invalid HTTP_HOST header: 'data.labideas.cn'. You may need to add 'data.labideas.cn' to ALLOWED_HOSTS.
[pid: 7924|app: 0|req: 1/1] 114.249.204.30 () {40 vars in 658 bytes} [Tue Mar 20 06:16:28 2018] GET / => generated 54903 bytes in 41 msecs (HTTP/1.1 400) 1 headers in 53 bytes (1 switches on core 0)



背景には、あなたはuWSGI情報の出力を見ることができます。IPとポート番号を指していることにより、要求は、ページ上のいくつかの要求を実行する場合、あなたはこれらの要求は、最終的に対処するためにuwsgiを行くことがわかります、nginxの最初でなければなりません。

最後に、我々はカイから起動するように設定uWSGIます

sudoのVIの/etc/rc.localを開きます

uwsgi --ini /home/setup/myweb/uwsgi.ini &


ファイルに追加します

あなたが終了0に追加する前に注意してください、&サービスはバックグラウンドで実行されていることを示しています。

第六に、遭遇した問題
構成プロセス中は、常に様々な問題が発生します、そして、ここで私が最も一般的にいくつかの問題を設定する使用されます、私はあなたが助けることができると思います。1. Djangoの起動エラー

setup@labideas-data:~/myweb$ python3 manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

March 20, 2018 - 06:28:52
Django version 2.0.3, using settings 'myweb.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.



新しいプロジェクトを作成し、Djangoの独自のテストサーバーは、上記のエラーが開始されます。プロジェクトおよびデフォルトデータの一部がデータベースに移行されていないためです。

ソリューション:

データベースにデータを移行します

python3 manage.py migrate


2.エラーを開始uwsgi
スタートアップ情報でuwsgiの起動時に次のエラーメッセージがあるとします。

!!! no internal routing support, rebuild with pcre support !!!


依存性の問題があります

ソリューション:

uwsgiアンインストールし、この時間をアンインストールするために注意を払う、ピップは、システムキャッシュに残ります

pip uninstall uwsgi


PCRE依存ライブラリをインストールします。

CentOSのインストール

sudo yum install pcre pcre-devel pcre-static


Ubuntuのインストール

sudo apt-get install libpcre3 libpcre3-dev



uwsgiを再インストールし、ピップキャッシュを行っていません

pip install uwsgi -I --no-cache-dir


再び起動Uwsgi、何!!!何の内部ルーティングをサポートしていない、PCREサポートのエラーで再構築!!!。

3.ポートのエラーは
、次のように、時には開始と表示されることがありuWSGI Djangoのエラーを上書きすることであっ

Error: That port is already in use



これは、すでに使用されているservrがすでに実行されている、バックグラウンドで実行することも可能であるか、リソースとポート番号のプロセスがリリースされていない、しかし、ジャンゴを停止することができるポート番号です。

ソリューション:

殺す見つけるためのプロセス

sudo ps aux | grep uwsgi
sudo kill -9 PID


あるいは、最も簡単な解決策は、直接殺すことです

sudo fuser -k 8000/tcp


このようなポート8000​​および関連のプロセスが死亡しているだろう

4.公共のポートセキュリティセットはシールド
も、明らかに構成されたすべてのものを感じて、いくつかの例を多くの時間を確認してください。しかし、犬のオンライン日付は、常にレポート「サーバーが応答しない」ローカルではないわずかな問題やその他のエラー、またはローカルホストのアクセスが、しかし今度は、コンピュータを打つしたいドメイン名または外部ネットワークへのアクセス、ガスを使用していません...それはどのようになるのですか?

ライン上の正式な環境でのプロジェクト、それは時々我々は、クラウドサーバーを選択します、公共のインターネットでなければなりません、ここではアリのクラウドサーバに、例えば、私たちは、その対応するポート番号を開く必要があります。

スマート学生はすでに上の図は、uwsgi.iniポート番号8888がそれを提出しない理由を認識することも?

セキュリティグループは、アリのポートは、外部のクラウド盾であるルールこれは、我々は、それが影響を受けていないネットワーク環境に含まれているnginxのと8888のuWSGIの間の通信に使用するポート番号をソケット。

5.正式モードを立ち上げ
、我々は実際の開発では、DEBUGモードを使用する必要があるので、しかし、一度我々は正式に発足DEBUGモードを閉じる必要があります。

で開くDjangoプロジェクトsettings.pyの設定ファイル

DEBUGとしてDEBUG = Trueの改正は、= Falseが

ALLOWED_HOSTS = []またはALLOWED_HOSTS = [ '*']、ALLOWED_HOSTS = [ 'data.labideas.cn']のように変更します
ワイルドカード*を使用することは推奨されていない、あなたは、特定のドメイン名を追加することができます!

6.管理者の管理インターフェースのスタイルシートは、失われた
管理者のテストは成功基準のDjangoインストールするかどうかで、ずっと前に。しかし、正式な環境の中で、多くの場合、不足しているスタイルシートの問題が発生しました。なぜこれがそうですか?

これは、nginxの正式な環境であるため、静的ドキュメントDjangoプロジェクトを見つけることができません。

ソリューション:

①一部の静的ファイルを置くために、静的なディレクトリDjangoプロジェクトを作成します

②設定ファイルsettings.py Djangoプロジェクトを開きます。

行を追加します。

STATIC_ROOT = '/home/setup/myweb/static/'


静的なディレクトリの静的ファイルを保存するSTATIC_ROOTポイント

③静的ディレクトリSTATIC_ROOTに必要なリソースバンドルジャンゴ静的ファイルからコピーされたのでに必要な管理インターフェーススタイルシート(スタイル)、画像(イメージ)、スクリプト(JS)を含み、これは、を指摘しました。

python3 manage.py collectstatic



なお、そうでない場合は最初のステップ①、その後、直接、エラーの原因となる、このコマンドを実行します。

④設定ファイルnginxのを修正

location /static {

    expires 30d;
    autoindex on; 
    add_header Cache-Control private;
    alias /home/setup/html/data/static/;
}



別名でも静的ファイルを保存するために、静的なディレクトリを指して、一貫性のあるディレクトリに必要とDjangoプロジェクトのsettings.pyプロファイルSTATIC_ROOTポイント。

⑤uWSGIと再起動nginxの

# 杀掉 uwsgi.ini 进程
ps aux | grep uwsgi | grep -v grep | awk '{print $2}' | xargs kill -9
uwsgi --ini /home/setup/html/data/uwsgi.ini &

sudo /etc/init.d/nginx restart



さて、これまでのところ、このチュートリアルは終了しました。最初Django2.0からのみPython3.4のバージョンよりも多くをサポートするため、下位互換性はありません、Django2.0のバージョンとのpython3の展開を選択しました。そして、このピットの学生に次の急落は、より多くの、PythonとDjangoのコミュニティへの寄与が小さい何かをする、この目的のために考慮することができます。
私は学校の友人を学習する方法がわからない、混乱があるエディターズチョイスPythonの学習qun 315 -346- 913一緒に学ぶことを学んで進歩して理解することができます!

おすすめ

転載: blog.csdn.net/weixin_44995023/article/details/92419527