部署django应用
Autor: wangxianlong
2016/7/10 16:17:55
环境:
- centos 6.5
- python 2.7.5
- django 1.9
- nginx 1.8
- selinux diabled
- 项目目录: /data/task/xuptlib/
安装必要的软件
python
由于centos
自带的python2.6.6
已经驱动不起来django1.9
了. 大概会报这样的错误
Traceback (most recent call last):File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/django/__init__.py", line 1, in <module>
from django.utils.version import get_versionFile "/usr/lib/python2.6/site-packages/django/utils/version.py", line 7, in <module>
from django.utils.lru_cache import lru_cacheFile "/usr/lib/python2.6/site-packages/django/utils/lru_cache.py", line 28
fasttypes = {int, str, frozenset, type(None)},
SyntaxError: invalid syntax
所以我们升级为python2.7.5
. 我们用来pyenv
来管理环境,当然也可以重新编译python
# 下载pyenv脚本
wget https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer
chmod +x pyenv-installer
./pyenv-installer
# 配置环境
cat /etc/profile.d/pyenv.sh
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
source /etc/profile
# 安装python 2.7.5
pyenv install 2.7.5
# 使用 python2.7.5
pyenv local 2.7.5
pyenv rehash
django
yum install -y python-pip
pip install django==1.9
pip install Mysql-python # 连接数据库
nginx
wget http://nginx.org/download/nginx-1.8.1.tar.gz
./configure --prefix=/usr/local/nginx --with-http_stub_status_module--with-http_gzip_static_module && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/bin/
uwsgi
pip install uwsgi
测试一下: uwsgi --http :8000 --wsgi-file test.py
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
在浏览器中看到helloworld
部署
首先看下流程,知道流程思路清晰,做的才不会乱,问题也好解决:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
1. 部署nginx
配置文件
cat /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 2; #主进程数
events {
use epoll; # 使用epoll I/O模型
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 45;
server {
listen 80;
server_name x.x.x.x;
charset utf-8;
client_max_body_size 32M;
location /static {
alias /data/task/xuptlib/staticfile; #静态文件位置,自己需要使用django来collect静态文件
}
location / { # 注意使用scoket,免去TCP的连接消耗
uwsgi_pass unix:///data/task/xuptlib/bookhelper.sock;
include uwsgi_params; # 在配置文件conf中
}
}
}
配置完成:
nginx -t
nginx
2. django的部署
2.1 关闭django的debug
DEBUG = False
ALLOWED_HOSTS = ['*'] # 注意允许的主机不要忘写了, 否则HTTP400会来
# 顺带提一下可以关闭url中admin后台管理
2.2 配置静态文件收集
# 刚才有在nginx配置文件中提到哦!!
STATIC_ROOT = os.path.join(BASE_DIR, "staticfile/")
# 收集
python manage.py collectstatic
3. uwsgi
可以理解uwsgi
在django
和nginx
搭了桥. 身份有点像Tomcat
配置文件/或者直接用命令
cat /etc/uwsgi.ini
[uwsgi]
chdir = /data/task/xuptlib #项目父目录
module = bookhelper.wsgi #项目下的wsgi文件位置
socket = /data/task/xuptlib/bookhelper.sock # socket 文件位置,和nginx配置文件中的一样哦!!
chmod = 666 # socket 权限, 不够的话,会permission denied
master = true
processes = 3 # 起的三个子进程数
vacuum = true # 退出清理环境
pidfile = /var/run/uwsgi.pid
daemonize = /var/log/uwsgi.log # 日志位置
uwsgi启动脚本
[root@rikewang xuptlib]# cat /etc/init.d/uwsgi
#! /bin/sh
PATH="/root/.pyenv/plugins/pyenv-virtualenv/shims:/root/.pyenv/shims:/root/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
NAME=uwsgi
EXEC=uwsgi
CONFIGFILE=/etc/$NAME.ini
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
do_start() {
$EXEC $CONFIGFILE &> /dev/null || echo -n "uwsgi already running"
}
do_stop() {
$EXEC --stop $PIDFILE &> /dev/null || echo -n "uwsgi not running"
rm -f $PIDFILE
}
do_reload() {
$EXEC --reload $PIDFILE &> /dev/null || echo -n "uwsgi can't reload"
}
do_status() {
ps aux|grep $EXEC
}
case "$1" in
status)
echo -en "Status $NAME: \n"
do_status
;;
start)
echo -en "Starting $NAME: \n"
do_start
;;
stop)
echo -en "Stopping $NAME: \n"
do_stop
;;
reload|graceful)
echo -en "Reloading $NAME: \n"
do_reload
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
exit 3
;;
esac
exit 0
在回顾一下流程:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
部署django应用的更多相关文章
- mac osx 上面部署Django项目 apache+mysql+mod_wsgi
1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tool ...
- Ubuntu上通过nginx部署Django笔记
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式.今天在Ubuntu上使用Nginx部署Django服务,虽然不是第一次搞这个了,但是发现还是跳进了好多坑,g ...
- Apache2.4部署django出现403 Forbidden错误解决办法
前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- Ubuntu16.04 apache2 wsgi 部署django
在Ubuntu16.04上部署django其实还算简单直观,最重要的问题就是路径设置正确,并且保证版本统一,这个测试是在 Apache/2.4.18 (Ubuntu) apt-get install ...
- 通过Nginx部署Django(基于ubuntu)
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- apache部署django记录
在ubuntu下通过apache部署django 首先需要下载python,django,apache以及wsgi模块 python基本已经自带,我用的是2.7,不是的话可以重新装一个 下载djang ...
- Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈
版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...
- Windows下Apache部署Django过程记录
Win7/Apache/Python2.7/Django1.9部署Web 环境: Windows7 Apache httpd-2.4.16-win64-VC14 Python2.7.11 Djan ...
- fabric自动化部署django
使用fabric部署django应用 使用fabric部署django应用 本文是我的网站易读中文网自动化部署的脚本实现,以下代码在ubuntu和debian中测试通过 由于网站使用的是python技 ...
随机推荐
- 【poj1113】 Wall
http://poj.org/problem?id=1113 (题目链接) 题意 给定多边形城堡的n个顶点,绕城堡外面建一个围墙,围住所有点,并且墙与所有点的距离至少为L,求这个墙最小的长度. Sol ...
- css常用技巧
去点号 list-style:none; 字体居中 text-align:center; 链接去下划线 text-decoration:none; 鼠标禁止右键 <body oncontextm ...
- abstract 类 构造函数
public abstract class CommonReq { private String TransNo { get; set; } public String SubmitData { ge ...
- [名词解释]Constant Amortized Time
http://stackoverflow.com/questions/200384/constant-amortized-time 分摊常量时间: Amortised time explained i ...
- mingw32-g++.exe: *: No such file or directory错误解决方法
初次使用CodeBlocks,好不容易把环境配好, 编译没有错误了,但是程序并不生成exe,提示以下问题: mingw32-g++.exe: /W3: No such file or director ...
- ajax原理,验证码生成原理
什么是ajax AJAX:”Asynchronous JavaScript and XML” 中文意思:异步JavaScript和XML 指一种创建交互式网页应用的网页开发技术. 不是指一种单一的 ...
- javascript模板方法模式
一:什么是模板方法模式: 模板方法模式由二部分组成,第一部分是抽象父类,第二部分是具体实现的子类,一般的情况下是抽象父类封装了子类的算法框架,包括实现一些公共方法及封装子类中所有方法的执行顺序,子类可 ...
- 如何测试本机的公网IP能否被Internet用户访问
声明:本机的公网IP是指ADSL拨号方式取得的公网IP,并非指固定公网IP. 一.新建IIS站点 xp系统需要有安装包才能安装IIS服务 windows7及以上与系统直接在windows->控制 ...
- 微信公开课发布微信官方教程:教你用好微信JS-SDK接口
微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获 ...
- PHP数字格式化,每三位逗号分隔数字,可以保留小数
在报价的时候为了给浏览者更清晰明确的数字,所以需要用到数字格式化,有两种方法,一种自己写函数,另一种当然是系统自带的,其实我更喜欢系统自带的. 先来系统简单的: string number_forma ...