最近線上部署運維工單系統,使用django+uwsgi+nginx部署,發現這篇文章,很詳細,以爲不錯,轉載一下:
css
寫了那麼長時間的django,一直沒跟nginx結合一下,訪問的時候總是得加端口號,以爲不爽。故想到部署到nginx上面。html
環境:python:2.7.6python
nginx:1.0.5 (yum直接安裝的,版本好低的說,須要高版本的能夠自行編譯安裝這都不是重點)linux
uWSGI: 2.0.10 (pip install uwsgi直接安裝的,安裝完成會提示你安裝到哪了,個人是/usr/local/python27/bin/uwsgi,將uwsgi複製到/usr/bin/下面,方便直接運行)nginx
django : 1,7,1django
環境介紹完畢,開搞。bash
首先要有一個django項目,至於怎麼建立就不贅述了,既然能找這篇文章看,對django確定是了得的差很少了。app
一。編輯nginx的配置文件運維
因爲我是yum安裝的,個人配置文件在/etc/nginx/目錄下,自行編譯的根據本身實際狀況查找。爲了方便管理我就放在了/etc/nginx/conf.d/,沒錯就是放vhosts配置文件的目錄裏面。socket
稍微話嘮一下:因爲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
六。若是沒成功,請從頭排查一遍。