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使用wxPython打开并播放wav文件的方法
Apr 24 Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 Python
浅谈python 线程池threadpool之实现
Nov 17 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
django如何连接已存在数据的数据库
Aug 14 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
pyhton中__pycache__文件夹的产生与作用详解
Nov 24 Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 Python
浅谈怎么给Python添加类型标注
Jun 08 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添加MySQL数据记录代码
2008/06/07 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
javascript this用法小结
2008/12/19 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Python使用MONGODB入门实例
2015/05/11 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python元组知识点总结
2019/02/18 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
python设置环境变量的原因和方法
2019/06/24 Python
python画图的函数用法以及技巧
2019/06/28 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
python自动化发送邮件实例讲解
2021/01/04 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
农村葬礼主持词
2014/03/31 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
招标承诺书
2014/08/30 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
python 对图片进行简单的处理
2021/06/23 Python