Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程


Posted in Python onNovember 18, 2014

具体环境:
Ubuntu 14.04 Python 2.7.6 Django 1.7.1 Virtualenv name:test Nginx uwsgi

假设 项目文件夹位于 /data/www/ts 设置保存在 ./conf

virtualenv name = test

domain name = example.com

django+uwsgi的部署实在是太蛋疼了..网上已有的教程似乎有新版本的兼容问题。最后跑到uwsgi官网上找的教程终于跑通了..
不过官网的教程似乎有引导教学性质,部署的时候就显得很绕弯路,在这里记录下来精简内容

http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html

首先,需要一个uwsgi_params文件,放在项目的conf文件夹里面。之后需要指向它。文件内容如下:

uwsgi_param QUERY_STRING $query_string;

uwsgi_param REQUEST_METHOD $request_method;

uwsgi_param CONTENT_TYPE $content_type;

uwsgi_param CONTENT_LENGTH $content_length;

uwsgi_param REQUEST_URI $request_uri;

uwsgi_param PATH_INFO $document_uri;

uwsgi_param DOCUMENT_ROOT $document_root;

uwsgi_param SERVER_PROTOCOL $server_protocol;

uwsgi_param HTTPS $https if_not_empty;

uwsgi_param REMOTE_ADDR $remote_addr;

uwsgi_param REMOTE_PORT $remote_port;

uwsgi_param SERVER_PORT $server_port;

uwsgi_param SERVER_NAME $server_name;

创建一个叫做ts_nginx.conf 的文件,内容如下

# ts_nginx.conf
# the upstream component nginx needs to connect to

upstream django {

    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket

    server 127.0.0.1:8001; # for a web port socket (we'll use this first)

}
# configuration of the server

server {

    # the port your site will be served on

    listen 80;

    # the domain name it will serve for

    server_name .example.com; # substitute your machine's IP address or FQDN

    charset utf-8;
    # max upload size

    client_max_body_size 75M; # adjust to taste
    # Django media

    location /media {

        alias /data/www/ts/media; # your Django project's media files - amend as required

    }
    location /static {

        alias /data/www/ts/static; # your Django project's static files - amend as required

    }
    # Finally, send all non-media requests to the Django server.

    location / {

        uwsgi_pass django;

        include /data/www/ts/conf/uwsgi_params; # the uwsgi_params file you installed

    }

}

把这个conf文件连接到nginx的搜索目录里面。

sudo ln -s /data/www/ts/conf/ts_nginx.conf /etc/nginx/sites-enabled/

先决条件:这里要设置好django项目的settings里面static files

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

and then run
python manage.py collectstatic

之后:

service nginx restart

应该就可以看到
http://example.cn:8000/media/1.gif
了(事先放进去一个静态文件)

之后的blabla步骤都是废话,跳到这里:

Configuring uWSGI to run with a .ini file

ts_uwsgi.ini 在项目根目录

[uwsgi]

# Django-related settings

# the base directory (full path)

chdir = /data/www/ts

# Django's wsgi file

module = ts.wsgi

# the virtualenv (full path)

home = /root/.envs/test

# process-related settings

# master

master = true

# maximum number of worker processes

processes = 10

# the socket (use the full path to be safe

socket = 127.0.0.1:8001

# ... with appropriate permissions - may be needed

# chmod-socket = 664

# clear environment on exit

vacuum = true

# set an environment variable

env = DJANGO_SETTINGS_MODULE=conf.settings 

uwsgi --ini mysite_uwsgi.ini # the --ini option is used to specify a file

这里环境变量设置env需要conf文件夹有init.py,否则conf不会被认为是module

(目前除了80端口,其他端口都可以通过地址:端口访问。已经测试8000,81.80测试不知道为什么不成。明天待续)

Python 相关文章推荐
python远程登录代码
Apr 29 Python
Python库urllib与urllib2主要区别分析
Jul 13 Python
Python标准库之循环器(itertools)介绍
Nov 25 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
Python实现命令行通讯录实例教程
Aug 18 Python
python3+PyQt5自定义视图详解
Apr 24 Python
Python占用的内存优化教程
Jul 28 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
Python 语言实现六大查找算法
Jun 30 Python
python服务器与android客户端socket通信实例
Nov 12 #Python
Python访问MySQL封装的常用类实例
Nov 11 #Python
python实现ipsec开权限实例
Nov 11 #Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 #Python
python实现在目录中查找指定文件的方法
Nov 11 #Python
Python实现list反转实例汇总
Nov 11 #Python
用python实现面向对像的ASP程序实例
Nov 10 #Python
You might like
一个PHP+MSSQL分页的例子
2006/10/09 PHP
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
QQ登录简单实现代码
2021/03/09 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python对象体系深入分析
2014/10/28 Python
python实现bucket排序算法实例分析
2015/05/04 Python
python简单分割文件的方法
2015/07/30 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python仿抖音表白神器
2019/04/08 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
优秀生推荐信范文
2013/11/28 职场文书
国税会议欢迎词
2014/01/16 职场文书
公司请假条范文
2014/04/11 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
基于Python实现nc批量转tif格式
2022/08/14 Python