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-installerchmod  +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 installln -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

可以理解uwsgidjangonginx搭了桥. 身份有点像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/shPATH="/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/$NAMEdo_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" instatus)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}" >&2exit 3;;
esacexit 0

在回顾一下流程:

the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

转载于:https://www.cnblogs.com/wxl-dede/p/5657933.html

部署django应用相关推荐

  1. 使用Gunicorn Ngnx Supervisor部署Django项目

    Django作为最受欢迎基于Python的Web框架之一,为用户提供了一个轻量级的测试Server,但这个Server最好不要用于生产环境.那么如果我们需要在生产环境上面部署Django项目,那么我们 ...

  2. 【转】Nginx+uWSGI 部署 Django 应用

    原文来自: http://www.oschina.net/question/54100_30386 http://obmem.info/?p=703 常见的django webapp 部署方式采用FC ...

  3. 基于nginx和uWSGI在Ubuntu系统上部署Django项目

    1. nginx 1.1 安装 sudo apt-get install nginx 1.2启动.停止和重启 sudo /etc/init.d/nginx start sudo /etc/init.d ...

  4. Apache上部署Django

    目前,Apache和mod_python是在生产服务器上部署Django的最健壮搭配.mod_python 是一个在Apache中嵌入Python的Apache插件,它在服务器启动时将Python代码 ...

  5. python django部署docker_Docker 部署 Django+Uwsgi+Nginx+Vue

    简介 * 1.两年前接触docker是因为要部署selenium_gird,后来呢发现zalenium可以录制ui自动化视频的工具,都是直接pull镜像,启动容器.所以一直以来就只用到了pull. r ...

  6. docker部署django项目、mysql主从搭建、django实现读写分离

    目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dock ...

  7. 使用Capistrano向EC2部署Django代码--关于SSH相关的配置

    使用Capistrano向EC2部署Django代码--关于SSH相关的配置 - foxracle - 博客园 使用Capistrano向EC2部署Django代码--关于SSH相关的配置 在使用Ca ...

  8. nginx、uwsgi部署django项目理论+实战

    基本环境: Ubuntu 16.04.4 LTS python 3.5 virtualenv django project deployable #理论分析   部署django项目有很多方法,方法推 ...

  9. centos7根据端口查进程_记录一次CentOs7下Nginx+WSGI部署Django项目(超详细)

    记录一次Django部署的文章,不是很熟悉Linux系统,踩了不少坑,本篇文章相当于是一个总结,我会在本文中详细介绍,部署单个Django项目和多个Django的方法,如读者有更好的方法,欢迎留言一起 ...

  10. python项目管理器 宝塔面板 django 404_宝塔面板成功部署Django项目流程(图文)

    上线 Django 项目记录,超简单,避免无意义的踩坑! 第一步:安装python管理器 在宝塔在线面板安装" python项目管理器 " 第二步:安装适配python版本 因为服 ...

最新文章

  1. 如何将非官方扩展程序加入chrome的白名单
  2. PMCAFF | 史上最完整的沙龙活动策划总结
  3. Elasticsearch-5.1.2分词器IK+pinyin简单测试
  4. 爱立信与中国联通成功完成国内首个LTE三载波聚合大规模部署测试
  5. Spring Boot----SpringBoot整合 Dubbo 和 Zookeeper
  6. 使用正态分布变换(Normal Distributions Transform)进行点云配准
  7. python裁剪图片box并保存_python实现图像随机裁剪
  8. Spring Boot-------JPA——EntityManager构建通用DAO
  9. 太极root权限_太极iOS 8.4完美越狱曝安全隐患:Root权限易获取
  10. 免费视频压缩软件实现压缩视频不损画质的技巧
  11. 【有利可图网】PS实战系列:PS制作人像印章效果
  12. wso2 mysql_WSO2 DAS使用mysql集群APIM
  13. 灰色预测模型python实例_12-6:数学模型(灰色模型)与Python编程预测
  14. 【Vim】安装你的第一个Vim插件vim-pathogen
  15. PYTHON爬取豆瓣电影Top 250排行榜
  16. Rosalind第88题:Counting Rooted Binary Trees
  17. 如何用python实现爬虫_如何用python实现网络爬虫原理?
  18. 服务器中的固态硬盘优缺点,「服务器」固态硬盘的优缺点有哪些
  19. 如何确定系统上的CPU插槽数量
  20. MySQL5.7系列的安装教程

热门文章

  1. 材料之kube-dns.yaml
  2. 随机抽样方法正太分布 MC, MCMC, Gibbs采样 原理实现(in R)
  3. 边缘保留滤波matlab,【DIP】各种边缘保留滤波器一览
  4. 利用Vailyn识别路径遍历和文件包含漏洞
  5. 1.两数之和(力扣leetcode) 博主可答疑该问题
  6. php 工业通讯录,PHP 制作通讯录(六)
  7. python樱花树画法图片_武大樱花又盛开,用Python画一棵樱花树
  8. html帮助文档看不了,Service Log按照文档设置之后,在web页面看不到,帮助文档的图片有点问题(看不到了),能不能处理一下...
  9. java 微信 百度地图,android 百度地图gps转百度地图坐标java.lang.UnsatisfiedLinkError: CoordinateEncryptEx...
  10. mysql控制文件位置_重建控制文件