django+uwsgi+nginx部署

最近線上部署運維工單系統,使用django+uwsgi+nginx部署,發現這篇文章,很詳細,覺得不錯,轉載一下:


寫了那麼長時間的django,一直沒跟nginx結合一下,訪問的時候老是得加端口號,覺得不爽。故想到部署到nginx上面。


環境:python:2.7.6


nginx:1.0.5 (yum直接安裝的,版本好低的說,需要高版本的可以自行編譯安裝這都不是重點)


uWSGI: 2.0.10 (pip install uwsgi直接安裝的,安裝完成會提示你安裝到哪了,我的是/usr/local/python27/bin/uwsgi,將uwsgi複製到/usr/bin/下面,方便直接運行)


django : 1,7,1


環境介紹完畢,開搞。


首先要有一個django項目,至於怎麼創建就不贅述了,既然能找這篇文章看,對django肯定是了得的差不多了。


一。編輯nginx的配置文件


由於我是yum安裝的,我的配置文件在/etc/nginx/目錄下,自行編譯的根據自己實際情況查找。爲了方便管理我就放在了/etc/nginx/conf.d/,沒錯就是放vhosts配置文件的目錄裏面。


稍微話嘮一下:由於yum安裝的nginx 會在/etc/nginx/conf.d/


目錄下生成default.conf配置文件,防止衝突就把它重命名好了.編輯django.conf(任意起名)

django.conf

server {
        listen  80;
        server_name localhost;
 
        location / {
            root /djangoproject/cmdb04;  #這個是我django項目所在的絕對路徑,cmdb04是我的項目名,下同
            include     uwsgi_params;
            uwsgi_pass   127.0.0.1:9000; #這個要跟之後配置的uwsgi配置文件保持一致
            uwsgi_param UWSGI_CHDIR  /djangoproject/cmdb04; #這個也是我django項目所在的絕對路徑
            uwsgi_param UWSGI_SCRIPT django_wsgi;#這個要和uwsgi配置文件裏module的內容一致,嗯,應該是這樣
            #access_log  off;
            access_log /var/log/nginx/access.log; #日誌存放目錄,當然前提是這個目錄要事先存在,不然啓動nginx會報錯,手動創建就好了。
            }
        location /statics/ {            #這個statics名稱要跟django setting文件裏靜態目錄的配置保持一致,不然的話css等靜態文件會找不到。
       alias /djangoproject/cmdb04/statics/; #這個就是statics所在的目錄
       index index.html;
}
}

二。配置uWSGI。


在nginx目錄創建一個uwsgi配置文件(當然了這個配置文件放在哪都行,只要你能找到的就行,那小弟先放/etc/nginx/下了哈)

uwsgi.xml
<uwsgi>
 <socket>127.0.0.1:9000 </socket> #和nginx配置一致
 <listen>80</listen>
 <master>true </master>
 <pidfile>/usr/local/nginx/uwsgi.pid </pidfile> 
 <processes>8 </processes>
 <pythonpath>/djangoproject/cmdb04 </pythonpath> #我的django項目路徑
 <module>django_wsgi</module> #和nginx裏配置一致
 <profiler>true </profiler>
 <memory-report>true </memory-report>
 <enable-threads>true </enable-threads>
 <logdate>true </logdate>
 <limit-as>6048 </limit-as>
 <daemonize>/tmp/uwsgi.log</daemonize> #日誌存放位置
</uwsgi>

uwsgi.xml裏其他一些配置暫且保持一致就行了,可根據自己要求修改。


三。創建django應用模塊。


1.情況一:如果你的django項目是使用IDE創建的,那麼在你的項目下應該會有wsgi.py這個文件,我的是在/djangoproject/cmdb04/cmdb04/(就是兩個cmdb04,cmdb04是我的項目名),


直接複製到項目的根目錄下,並重命名爲django_wsgi.py。爲什麼是這個文件名呢,因爲你在nginx配置文件和uwsgi配置文件的module都是寫的這個文件名。如果沒找到wsgi.py這個文件,那麼別費勁了,直接看情況二吧。


2.情況二:就是沒找到那個wsgi.py,那就手動創建吧。在django項目根目錄下創建django_wsgi.py文件。


uwsgi.py


i

mport os
os.environ['DJANGO_SETTINGS_MODULE'] = 'cmdb04.settings' #注意cmdb04要改成你的項目名
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

四。寫一個uwsgi的啓動腳本,方便start,stop,restart

uwsgi
#!/bin/bash
# uwsgi script
# it is v.0.0.1 version.
# chkconfig: - 89 19
# description: uwsgi script
# processname: uwsgi
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
     
uwsgi_config=/etc/nginx/uwsgi.xml   #這裏要配置對剛纔寫的uwsgi.xml路徑
uwsgi_pn=`ps aux|grep -v "grep"|grep -c "uwsgi"`
uwsgi_pid=`ps -eo pid,comm|grep uwsgi|sed -n 1p|awk '{print $1}'`
uwsgi_PID=/usr/local/nginx/logs/uwsgi.pid
uwsgi=/usr/bin/uwsgi  #最開始就讓你複製到這裏了,啥?找不到了?那自己用locate命令找吧
RETVAL=0
prog="uwsgi"
# Source function library.
.  /etc/rc.d/init.d/functions
     
     
if [ $(id -u) != "0" ]; then
    printf "Error: You must be root to run this script!\n"
    exit 1
fi
     
     
# Start nginx daemons functions.
start() {
if [ $uwsgi_pn -gt 5 ];then
        action "uwsgi is running!" /bin/true
    exit 0
fi
    daemon $uwsgi -x ${uwsgi_config}
        action "uwsgi start ..." /bin/true
}
# Stop nginx daemons functions.
stop() {
if [ $uwsgi_pn -gt 5 ]
then
        kill -9 `ps -eo pid,comm|grep uwsgi|sed -n 1p|awk '{print $1}'`
    RETVAL=$?
        action "uwsgi stopping ..." /bin/true
else
        action "uwsgi not running!" /bin/false
fi
}
     
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
restart)
        stop
        start
        ;;
*)
        echo $"Usage: $prog {start|stop|restart}"
        exit 1
esac
exit $RETVAL


五.萬事大吉了,可以啓動測試了


server nginx start


server uwsgi start


注意查看端口中是否存在uwsgi的9000端口


linuxcmd:   netstat -antpl | grep uwsgi


linuxout:   tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      6780/uwsgi


六。如果沒成功,請從頭排查一遍。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章