Django+nginx+uwsgi+linux生産環境構築


linux:Ubuntu 12.04 64ビット
python:持参2.7.13
django 1.7.1
nginx:1.1.19
uwsgi:pipを使用してインストール、バージョン不明
ソースの更新
apt-get update

NginxとuWSDiのインストール
apt-get install nginx uwsgi uwsgi-plugin-python

Python関連環境のインストール
apt-get install python-dev python-virtualenv python-pip

ここでもしインストールが成功しなければ、別々にインストールすることができて、一度試したことがあって、別々にインストールしてやっと成功して、原因は今私のレベルでまだ発見できなくて、残念です.
MySQLのインストール
apt-get install mysql-server mysql-client libmysqld-dev

MySQLのインストール中にパスワードを入力する必要があります
MySQLのインストールが完了したらmysqlを実行する必要があります.secure_インストールコマンドはMySQLのセキュリティを向上させ、ヒントに従って行います.
PHPを取り付ける
apt-get install php5-cli php5-cgi php5-fpm php5-mcrypt php5-mysql

Djangoおよびマルチサイトサポートの構成
ここでは、私のWebサイトのディレクトリを/wwwと仮定し、各ユーザーには独立したフォルダがあります(ここでは、test 1とtest 2の2つのユーザー名を例に使用します).
前の手順は簡単のため、test 1というフォルダ名のサイトを1つだけ新規作成します.
ディレクトリの作成
mkdir /www
mkdir /www/test1
mkdir /www/test1/media
mkdir /www/test1/static

ここで作成したmediaディレクトリとstaticディレクトリは、Djangoプロジェクトのmediaファイルとstaticファイルを格納するために使用されます.
virtualenvで仮想環境を作成し、テストプロジェクトを新規作成する
cd /www/test1
virtualenv env
source env/bin/activate
pip install Django
django-admin.py startproject django_test

ここでは/www/test 1/envディレクトリの下に仮想環境を新規作成してアクティブ化し、Djangoをインストールしてdjango_というプロジェクトを新規作成しました.test .
 :
       :mkvirtualenv env1
    :deactivate
              :workon env1  env2
    : rmvirtualenv env1

Nginxの設定
Nginxのsites-availableの下に新しいプロファイルを作成
vim /etc/nginx/sites-available/test1

ファイルの内容は次のとおりです.
server {
    listen  80;
    server_name test1.yourdomain.com;
    access_log /var/log/nginx/test1.access.log;
    error_log /var/log/nginx/test1.error.log;
    location / {
        uwsgi_pass  unix:///tmp/test1.sock;
        include     uwsgi_params;
    }
    location /media/  {
        alias /www/test1/media/;
    }
    location  /static/ {
        alias /www/test1/static/;
    }
}

次にsites-availableフォルダにさっき追加したファイルlnをsites-enabledフォルダに
ln -s /etc/nginx/sites-available/test1 /etc/nginx/sites-enabled/

uWSDIの設定
次にuWSDiを構成し、uWSDiのディレクトリの下に新しいプロファイルを作成します.
vim /etc/uwsgi/apps-available/test1.ini

ファイルの内容は次のとおりです.
[uwsgi]
vhost = true
plugins = python
socket = /tmp/test1.sock
master = true
enable-threads = true
processes = 4
wsgi-file = /www/test1/django_test/django_test/wsgi.py
virtualenv = /www/test1/env
chdir = /www/test1/django_test
touch-reload = /www/test1/django_test/reload

注:ファイル内容のdjango_testは先ほど作成したDjangoのプロジェクト名です
次にapps-availableのプロファイルlnをapps-enabledフォルダに
ln -s /etc/uwsgi/apps-available/test1.ini /etc/uwsgi/apps-enabled/

NginxとuWSDiの再起動
service uwsgi restart
service nginx restart

次に、上にバインドされたserverにアクセスします.nameドメイン名でIt workedが見えます!のインタフェースです.
注意:コードを更新するたびにサービスuwsgi restartの変更を実行する必要があります.または、上記のtouch-reloadファイルで変更更新コードを検出します.
DJANGOアプリケーションの導入
まずは/www/test 1/django_に入りますtestディレクトリを作成し、django appを作成します.
cd /www/test1/django_test
django-admin.py startapp appname

これでdjango_testディレクトリの下にappnameディレクトリがあります.
中のviewsを編集できます.pyファイル.同時に/django_を編集します次のurlspyファイルは、自分で定義したURLやビュー方法で、自分のアプリケーションに正常にアクセスできます.
マルチサイト構成
複数のDjangoサイトを構成する必要がある場合は、上記の操作を繰り返すだけです.
2番目のサイトtest 2を作成する手順を簡単に説明します.
mkdir /www/test2
mkdir /www/test2/media
mkdir /www/test2/static
cd /www/test2
virtualenv env
source env/bin/activate
pip install Django
django-admin.py startproject django_test
vim /etc/nginx/sites-available/test2

上の内容に倣ってプロファイルを塗りつぶし、バインドされたドメイン名は異なる必要があります.
ln -s /etc/nginx/sites-available/test2 /etc/nginx/sites-enabled/
vim /etc/uwsgi/apps-available/test2.ini

上の内容に倣ってプロファイルを塗りつぶす
ln -s /etc/uwsgi/apps-available/test2.ini /etc/uwsgi/apps-enabled/
service uwsgi restart
service nginx restart

phpMyAdminのインストール
まずphpMyAdminの独立したディレクトリを作成します
mkdir /www/phpmyadmin

phpMyAdminのソースコードをフォルダにアップロードし、次に対応するリクエストをPHPに転送できるようにNginxを構成します.
Nginxの設定
Nginxのsites-availableディレクトリの下にプロファイルを新規作成
vim /etc/nginx/sites-available/phpmyadmin

以下の構成を書き込みます.
server {
    listen 80;
    server_name phpmyadmin.yourdomain.com;
    root /www/phpmyadmin;
    index index.html index.htm index.php;
    location / {
        try_files $uri $uri/ /index.html;
    }
    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

sites-enabledディレクトリにリンクします
ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/

サービスの再起動
service php5-fpm restart
service nginx restart

今、バインドされたドメイン名にアクセスするとphpMyAdminに正常にアクセスできるはずです.
問題:
1、pythonコンポーネントのインストールに失敗しましたが、別々にインストールしました.
2、nginxが起動できない、ヒント
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80

原因は80ポートが占有されているため、誰が占有しているのかを調べるだけで、プロセスを殺して再起動することができ、私のはデフォルトでインストールすべきapacheのために80ポートを占有しています.
netstat -nlp |grep :80
killall -9 httpd

参考:http://oott.me/archives/552.html   
===================12.02补充============
2つのモジュールahocorasickとesmreが新しくインストールされました.コマンドラインモードでは、
/usr/local/lib/python2.7/site-packages

ディレクトリにはこのモジュールがありますが、djangoアプリケーションのviewsです.pyではenvでインポートできません
/www/test1/env/local/lib/python2.7/site-packages

このディレクトリの下にはahocorasickモジュールはありません.djangoアプリケーションで参照されるモジュールはenvというディレクトリの下にあります.
djangoアプリケーションで正常に参照できるようにenvモードでpipで対応するモジュールをインストールします.
virtualenv env
source env/bin/activate


nginx

Restarting nginx: nginx: [emerg] unknown directive "uwsgi_pass" in /etc/nginx/sites-enabled/test1:7
nginx: configuration file /etc/nginx/nginx.conf test failed

apt-get install nginx-full



uwsgi ,

Restarting nginx: nginx: [emerg] unknown directive "uwsgi_pass" in /etc/nginx/sites-enabled/test1:7


apt-get install nginx-full



============================ ========================


sql

   : select * from article where category = current_category and id > current_id order by id desc limit 1;
   : select * from article where category = current_category and id