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脚本和ADB命令实现卸载App
Feb 10 Python
Python处理Excel文件实例代码
Jun 20 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
Python基于进程池实现多进程过程解析
Apr 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
php命令行用法入门实例教程
2014/10/27 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
prototype class详解
2006/09/07 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
Django中使用Celery的教程详解
2018/08/24 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
女大学生个人求职信
2013/12/09 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
原生JS实现分页
2022/04/19 Javascript