设为首页 收藏本站
查看: 1288|回复: 0

[经验分享] Nginx+uWSGI或fastcgi部署Django项目

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-26 13:32:36 | 显示全部楼层 |阅读模式
nginx+uWSGI
  ubuntu下先安装下C编译器和Python环境:



sudo apt-get install build-essential python-dev

  使用pip安装uWSGI:



pip install uwsgi

  nginx配置:
  可以单独为站点设置一个配置文件:



sudo vim /etc/nginx/sites-enabled/mysite

  或者直接在nginx.conf中设置:



sudo vim /etc/nginx/nginx.conf

  设置:



server {
listen   80; ## listen for ipv4; this line is default and implied
#listen   [::]:80 default ipv6only=on; ## listen for ipv6
server_name 站点域名;
location / {
uwsgi_pass 127.0.0.1:8080;
include uwsgi_params;
}
#设置该网站应用中所需要的静态文件的根目录,需要将admin和用到的第三方库像restframework的静态文件都放到此目录中
location ~/static/ {
root   /home/user/mysite/;  #项目地址
# root  html;
# index  index.html index.htm;
break;
}
#设置媒体文件的根目录
location ~/media/ {
root   /home/user/mysite/;
# root  html;
# index  index.html index.htm;
break;
}
}

  自己电脑上搭建localhost服务器时,注意别被/etc/nginx/sites-enabled/default中的配置覆盖掉了,最好将其注释掉。
  然后设置uWSGI,建立文件myfile.ini:



[uwsgi]
socket = 127.0.0.1:8080   #与nginx配置中的uwsgi_pass相同
chdir = /home/user/mysite/    #项目地址
wsgi-file = mysite/wsgi.py
processes = 4
threads = 2
pidfile=/tmp/project-master.pid
stats = 127.0.0.1:9191
  其中wsgi-file是django(1.4版本以上)项目自动建立的文件,里面内容为:



import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "weixian.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

  如果django版本过低无此文件的话,可以自己建立,或者在myfile.ini中设置env,module,pythonpath:



[uwsgi]
socket = 127.0.0.1:8080
chdir = /home/user/mysite/
pythonpath = ..
env = DJANGO_SETTINGS_MODULE=mysite.settings
module = django.core.handlers.wsgi:WSGIHandler()
processes = 4
threads = 2
stats = 127.0.0.1:9191

  按配置重启nginx:



/usr/sbin/nginx -s reload

  或者:



killall -9 nginx
nginx -c /etc/nginx/nginx.conf

  启动uWSGI:





uwsgi myfile.ini
  重启uWSGI:



# using kill to send the signal
kill -HUP `cat /tmp/project-master.pid`
# or the convenience option --reload
uwsgi --reload /tmp/project-master.pid
# or if uwsgi was started with touch-reload=/tmp/somefile
touch /tmp/somefile
  ini文件也可以用xml文件来设置。
  添加xml支持:



sudo apt-get install libxml2-dev

  配置myfile.xml




127.0.0.1:8080
/home/user/mysite/
mysite/wsgi


  启动:



uwsgi -x myfile.xml
nginx+fastcgi
  fastcgi需要安装flup:



wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
tar zxvf flup-1.0.2.tar.gz
cd flup-1.0.2
python setup.py install

  或者:



sudo apt-get install  python-flup

  nginx配置:



server {
listen       80;
server_name  localhost;
#设置该网站应用中所需要的静态文件的根目录
location ~/static/ {
root   /home/user/mysite/;
# root  html;
# index  index.html index.htm;
break;
}
#设置媒体的根目录
location ~/media/ {
root   /home/user/mysite/;
# root  html;
# index  index.html index.htm;
break;
}
#host and port to fastcgi server
location / {
fastcgi_pass 127.0.0.1:8080;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param pass_header Authorization;
fastcgi_intercept_errors off;
}
#设置浏览器缓存这些图片格式文件浏览器缓存时间是30天,css/js缓存时间1小时
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
}

  重启nginx,然后启动fcgi:



python manage.py runfcgi host=127.0.0.1 port=8080 method=prefork --settings=mysite.settings  #采用静态进程池的话性能会比动态线程生成高2倍左右

  ok。
  要更新django项目的话,



ps -ef |grep fcgi

  找出主进程号kill掉,再重启fcgi即可。
  也可以写个重启脚本。使用pidfile选项将fcgi的pid存储到文件中,重启时读取kill掉。



#!/bin/bash
PROJDIR="/home/user/myproject"
PIDFILE="$PROJDIR/mysite.pid"
cd $PROJDIR
if [ -f $PIDFILE ]; then
kill `cat -- $PIDFILE`
rm -f -- $PIDFILE
fi
exec python manage.py runfcgi host=127.0.0.1 port=8080 method=prefork pidfile=$PIDFILE --settings=mysite.settings
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-90828-1-1.html 上篇帖子: nginx+tomcat集群负载均衡(实现session复制) 下篇帖子: nginx发布Asp.net程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表