CentOS上使用nginx+uwsgi部署django

作者:我就是个世界 发表于:2012-11-07
1.先下载安装 setuptools-0.6c11
    [code]
wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086
sh setuptools-0.6c11-py2.6.egg
    [/code][separator]
2.安装virtualenv及pip
    [code]
    easy_install virtualenv
    easy_install pip
    [/code]

3.在指定的位置创建ENV虚拟环境
    [code]
    cd home                 进入指定目录
    virtualenv myproject     创建env虚拟环境
    cd myproject             进入虚拟环境目录
    source ./bin/activate   激活env虚拟环境
    pip install django      安装django最新版本1.3
    django-admin.py startproject mysite     创建django项目mysite
    cd mysite
    django-admin.py startapp myapp              创建django应用APP myapp
    [/code]

4.安装uwsgi

    [code]
    yum install python-devel
    yum install libxml2(需要的组件)

                #wget http://projects.unbit.it/downloads/uwsgi-0.9.6.2.tar.gz
                #tar -zxvf uwsgi-0.9.6.2.tar.gz
                #cd uwsgi-0.9.6.2
                #make
                #cp uwsgi /usr/bin
    [/code]

    因为我用虚拟环境,所以进入虚拟环境使用pip安装
    [code]
    cd /home/myproject
    source ./bin/activate
    pip install uwsgi       安装uwsgi
    [/code]

5.创建Nginx相关配置 django配置文件django_uwsgi.conf

    [code]
    cd /usr/local/nginx/conf
    vi django_uwsgi.conf
-----------------------------------
# Django project
server {
        listen  80;
        server_name v.husw.net;

        location / {
            uwsgi_pass   127.0.0.1:3031;
            include     uwsgi_params;
            access_log  off;
        }

        location ^~ /static {
            root   /home/myproject/mysite;
        }

        location ^~ /admin/ {
            uwsgi_pass   127.0.0.1:3031;
            include  uwsgi_params;
            access_log   off;
        }

        location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ {
            root    /home/myproject/mysite/static;
            access_log  off;
        }

}
-----------------------------------

    *Nginx-0.8.50默认已添加uwsgi输出头支持
    include uwsgi_params;

    vi nginx.conf
    追加子配置文件django_uwsgi.conf
-----------------------------------
http{
........
include django_uwsgi.conf;
}
-----------------------------------
    [/code]

6、UWSGI配置

    [code]
    mkdir -p /home/myproject/uwsgi;cd /home/myproject/uwsgi
    mkdir -p /home/myproject/logs
    echo "" > /home/myproject/logs/django.log
    vi uwsgi.xml
-----------------------------------
<uwsgi>
  <socket>127.0.0.1:3031</socket>
  <listen>200</listen>
  <master>true</master>
  <pidfile>/usr/local/nginx/uwsgi.pid</pidfile>
  <processes>8</processes>
  <pythonpath>/home/myproject/mysite</pythonpath>
  <pythonpath>/home/myproject/</pythonpath>
  <module>django_wsgi</module>
  <profiler>true</profiler>
  <memory-report>true</memory-report>
  <enable-threads>true</enable-threads>
  <logdate>true</logdate>
  <limit-as>256</limit-as>
  <daemonize>/home/myproject/logs/django.log</daemonize>
</uwsgi>
-----------------------------------
    [/code]
参数说明  http://projects.unbit.it/uwsgi/wiki/Doc
/home/myproject/mysite/  是我的django项目目录
limit-as 是内存占用
listen     是等待客户端连接时间  超过这个时间没反应直接断掉
127.0.0.1:3031  是 uwsgi 使用的端口
django_wsgi   这个是要在django项目根目录建立一个同名的 .py 文件  即 django_wsgi.py内容看下一步

7、创建应用模块运行文件django_wsgi.py

    [code]
    cd /home/myproject/mysite
    vi django_wsgi.py
-----------------------------------
from django.core.handlers.wsgi import WSGIHandler
import os, sys

import site
site.addsitedir('/home/myproject/lib/python2.6/site-packages/')
activate_this = '/home/myproject/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

ROOT = '/home/myproject/'
sys.path.append(ROOT)
sys.path.append('/home/myproject/lib/python2.6/site-packages/')
sys.stdout = sys.stderr
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
application = WSGIHandler()
-----------------------------------
    [/code]

8、启动与关闭服务
    [code]
    uwsgi -x /home/myproject/uwsgi/uwsgi.xml
    /usr/local/nginx/sbin/nginx

    killall -9 uwsgi    #关闭uwsgi服务
    /usr/local/nginx/sbin/nginx -s  reload  #平滑重启
    [/code]

9、查看进程
    [code]ps -ef|grep uwsgi|grep -v grep[/code]

10、监听端口
    [code]netstat -an|grep 3031[/code]


11、访问测试
    输入http://v.husw.net/


*附uwsgi启动脚本
[code]
#cd /home/uwsgi
#vi uwsgiserver.sh

-----------------------------------
#!/bin/bash
if [ $1 = start ];then
  psid=`ps aux|grep "uwsgi"|grep -v "grep"|wc -l`
  if [ $psid -gt 2 ];then
    echo "uwsgi is running!"
    exit 0
  else
    uwsgi -x /home/myproject/uwsgi/uwsgi.xml
  fi
  echo "Start uwsgi service [OK]"
elif [ $1 = stop ];then
  killall -9 uwsgi
  echo "Stop uwsgi service [OK]"
elif [ $1 = restart ];then
  killall -9 uwsgi
  uwsgi -x /home/myproject/uwsgi/uwsgi.xml
  echo "Restart uwsgi service [OK]"
else
  echo "Usages: sh uwsgiserver.sh [start|stop|restart]"
fi
-----------------------------------

#sh uwsgiserver.sh start
[uWSGI] parsing config file /home/uwsgi/uwsgi.xml
Start uwsgi service [OK]
[/code]
12. 安装MySQL-python连接库、PIL 及第三方扩展 django-tagging django-uni-form django-cms

[code]
    yum install MySQL-python
    pip install pil django-tagging django-uni-form django-cms
[/code]

参考网站:
http://blog.liuts.com/post/216
http://askbot.org/wiki/index.php/Askbot_on_VirtualHost

=================================================
[b]Centos 5.5默认安装的Python版本是2.4。要升级到2.6或者其他版本需要下载源码包自己编译安装[/b]

# 下载 2.7.1 版
wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz

# 安装
tar zxf Python-2.7.1.tgz
./configure
make && make install

# 查看安装的版本信息
/usr/local/bin/python2.7 -V

# 查看新装的版本,生效了然后做个软连接应该就OK
mv /usr/bin/python /usr/bin/python-bak
ln -s /usr/local/bin/python2.7 /usr/bin/python

# 升级安装好以后yum会无法使用,因为yum使用的是2.4版本的,
# 所以要修改 yum 的配置文件以便能够识别2.4版本下的 python
vim /usr/bin/yum

# 将文件头部的
#!/usr/bin/python

# 改成
#!/usr/bin/python2.4

就可以继续使用 yum 了
------------------------------------


wget http://www.python.org/ftp/python/2.6/Python-2.6.tgz

tar zxf Python-2.6.tgz
./configure
make && make install

/usr/local/bin/python2.6 -V

mv /usr/bin/python /usr/bin/python-bak
ln -s /usr/local/bin/python2.6 /usr/bin/python



vim /usr/bin/yum
# 将文件头部的
#!/usr/bin/python

# 改成
#!/usr/bin/python2.4

就可以继续使用 yum 了
=================================================

PYTHON_HOME=/usr/local/lib/python2.6/
export PYTHON_HOME
PATH=$PYTHON_HOME/bin:$PATH
export PATH

    安装egg包报错:setuptools-0.6c11-py2.6.egg: line 3: exec: python2.6: not found

    如果你的环境中python版本不是2.6,那么需要先升级python版本到2.6,升级步骤看最后!如果上面的方法无法安装egg包,那么尝试下面的方法!
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e
tar zxf setuptools-0.6c11.tar.gz
cd  setuptools-0.6c11
python setup.py install

wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz#md5=1072b66d53c24e019a8f1304ac9d9fc5
tar zxf virtualenv-1.6.4.tar.gz
cd virtualenv-1.6.4
python setup.py install

Processing virtualenv-1.6.4-py2.6.egg
creating /usr/local/lib/python2.6/site-packages/virtualenv-1.6.4-py2.6.egg
Extracting virtualenv-1.6.4-py2.6.egg to /usr/local/lib/python2.6/site-packages
Adding virtualenv 1.6.4 to easy-install.pth file
Installing virtualenv script to /usr/local/bin

Installed /usr/local/lib/python2.6/site-packages/virtualenv-1.6.4-py2.6.egg
Processing dependencies for virtualenv==1.6.4
Finished processing dependencies for virtualenv==1.6.4



PATH="$PATH":/usr/local/lib/python2.6/site-packages/

echo $PATH
/usr/local/lib/python2.6//bin:/usr/local/LuNamp/cmd/:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/lib/python2.6/site-packages/

版权声明

本文仅代表作者观点,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

请发表您的评论