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 从远程服务器下载日志文件的程序
Feb 10 Python
python中List的sort方法指南
Sep 01 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
python实现机器学习之多元线性回归
Sep 06 Python
详解python和matlab的优势与区别
Jun 28 Python
python图像处理模块Pillow的学习详解
Oct 09 Python
python SVD压缩图像的实现代码
Nov 05 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 Python
pycharm安装及如何导入numpy
Apr 03 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
Python常用断言函数实例汇总
Nov 30 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 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
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
require.js的用法详解
2015/10/20 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
Vue 实现简易多行滚动"弹幕"效果
2020/01/02 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
python中将字典形式的数据循环插入Excel
2018/01/16 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
python障碍式期权定价公式
2019/07/19 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
python实现双色球随机选号
2020/01/01 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
小学后勤管理制度
2014/01/14 职场文书
中青班党性分析材料
2014/02/16 职场文书
安全标准化实施方案
2014/02/20 职场文书
领导干部对照检查材料
2014/08/24 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
辩护词格式
2015/05/22 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
PHP获取学生成绩的方法
2021/11/17 PHP
python周期任务调度工具Schedule使用详解
2021/11/23 Python
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python