Nginx+uWSGI或fastcgi部署Django项目
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
virtualenv = <path to env> #virtualenv
其中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
virtualenv = <path to env>
按配置重启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
<uwsgi>
<socket>127.0.0.1:8080</socket>
<chdir>/home/user/mysite/</chdir>
<module>mysite/wsgi</module>
</uwsgi>
启动:
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
Nginx+uWSGI或fastcgi部署Django项目的更多相关文章
- Ubuntu Nginx Uwsgi Python布置服务器Django项目
1 安装python 3.6 ubuntu预装了2.7,不需要卸载预装库,直接安装python3.6(其实现在的阿里云18.04会给你自动装python2.7.15和3.6.8) 你可以分别查看一下 ...
- 基于Nginx和uWSGI在Ubuntu上部署Django项目
前言: 对于做Django web项目的童鞋,重要性不言而喻. 参考:https://www.cnblogs.com/alwaysInMe/p/9096565.html https://blog.cs ...
- 使用uWSGI+nginx部署Django项目
最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...
- docker 部署django项目(nginx + uwsgi +mysql)
最近在学习用docker部署Django项目,经过百折不挠的鼓捣,终于将项目部署成功,爬过好多坑,也发现很多技能需要提高.特此写下随笔与小伙伴们分享,希望能对大家有所启发. docker的理论我就不赘 ...
- 使用Nginx+uWSGI部署Django项目
1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi l ...
- ubuntu18+uwsgi+nginx部署django项目
更新系统软件源 sudo apt-get update pip3安装 sudo apt install python3-pip 安装virtualenvwrapper pip3 install vir ...
- nginx + uwsgi 部署django项目
因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式 环境: centos7 python3.5.4 django2.1.4 u ...
- nginx+uwsgi部署Django项目到Ubuntu服务器全过程,以及那些坑!!!
前言:自己在windows上用PyCharm编写的Django项目,编写完后在windows上运行一点问题都没有,但是部署到服务器上时却Bug百出.百度,CSDN,sf,各种搜索寻求解决方案在历时3天 ...
- linux上使用nginx、uwsgi部署django项目
参考:CentOS7下部署Django项目详细操作步骤 注意事项: 在虚拟环境中操作,虚拟环境中安装nginx.uwsgi,虚拟环境外需安装uwsgi -- 临时关闭防火墙:systemctl sto ...
随机推荐
- yum的一些用法
对于配置仓库这里就不做讲解了,这里只是列出比较实用的yum的用法 yum install packagename #安装软件包 yum remove packagena ...
- linux 正则表达式深度解析
正则表达式的文法分为3种标准:BRE.ERE 和 ARE.其中 BER 和 ERE 属于 POSIX 标准,ARE 则是由各家定义的扩展 简介 大体来讲,正则表达式的文法分为3种标准:BRE.ER ...
- 国产CPU研究单位及现状
1.国产CPU主要研制单位 (1)高性能通用CPU(“大CPU”,主要应用于高性能计算及服务器等) 主要研发单位:中国科学院计算所.北大众志.国防科技大学.上海高性能集成电路设计中心 (2)安全适用计 ...
- ajax中的post方法中回调函数不执行的问题
前一段时间接触了JQuery Ajax中的.post()方法和.get()方法,感觉到ajax的简洁和强大,当用到.post()方法时,去W3上查找相关的使用方法,感觉十分简单,用法很明了,然后,直接 ...
- 获取股票历史数据和当前数据的API
关键字:股票,stock,API,接口 1.获取股票当前数据 新浪数据接口:http://hq.sinajs.cn/list={code}.{code}替换为股票代码,沪市股票代码加前缀sh,深市股票 ...
- sirius的python学习笔记(1)
1.可以通过try...except语句来简单的判断字符串是否为整数值,如例程 x = raw_input('>') try: print int(x) except ValueError: r ...
- 内核升级修复nfs
Not starting NFS kernel daemon: no support in current kernel. sudo gedit /etc/init.d/nfs-kernel-serv ...
- Mac OS X 软件推荐
1. 前言 每个操作系统都有自己的一套软件系统,但是不同的用户却会有不同的需求,系统虽会为用户提供一些基础软件,不过为了能无碍的进入自己的学习和工作状态,总有一些软件是必须安装的,同时这些软件也可以 ...
- html template
https://wrapbootstrap.com/tag/single-page http://themeforest.net/ https://wrapbootstrap.com/themes h ...
- [转]struct实例字段的内存布局(Layout)和大小(Size)
在C/C++中,struct类型中的成员的一旦声明,则实例中成员在内存中的布局(Layout)顺序就定下来了,即与成员声明的顺序相同,并且在默认情况下总是按照结构中占用空间最大的成员进行对齐(Alig ...