django生产环境部署
测试环境:linux centos7下
1、安装uwsgi
python3下安装:
pip3 install uwsgi
python2下安装:
pip install uwsgi
如果是系统自带的python2.7环境下安装的话,有可能会出错:
Command "/usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-
jjOBXy/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-3cX7u0-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-jjOBXy/uwsgi/
这时候需要我们先安装一个python开发包:
yum install -y python-devel
然后就可以安装了
2、测试 uwsgi
#python 3.x
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] #Python 3.x 需要 返回字节字符串 #python 2.x
#def application(env, start_response):
# start_response('200 OK', [('Content-Type','text/html')])
# return ["Hello World"]
test.py
运行:
uwsgi --http :8000 --wsgi-file test.py
3、添加并发和监控
并发:
uWSGI 默认启动一个单独的进程和一个单独的线程
我们可以通过 --processes 选项或者 --threads (或者两个选项都使用)来增加更多的进程或者线程
uwsgi --http :8000 --wsgi-file test.py --master --processes 4 --threads 2
将会产生 4 个进程(每个进程 2 个线程),一个主进程(当你的进程死掉时会重新 spawn 一个新的)以及 HTTP 路由器
监控:
知道发生了什么在生产环境中是极其重要的。stats 子系统允许你 用 JSON 输出 uWSGI 的内部数据:
uwsgi --http :8000 --wsgi-file test.py --master --processes 4 --threads 2 --stats 127.0.0.1:8181
用 “uwsgitop”监控应用实例
pip isntall uwsgitop
uwsgitop--uwsgi服务器性能查看工具,用法:
uwsgitop 127.0.0.1:8181
3、连接Django和uwsgi
先测试Django项目本身是可运行的:
python manage.py runserver 0.0.0.0:8001
倘若django 项目没问题,我们就可以把uwsgi与Django连接起来
进入到django项目中,以uwsgi启动django
uwsgi --http :8001 --module WebSite.wsgi
4、编写uwsgi配置文件[uwsgi]
demo
[uwsgi] socket = 127.0.0.1:8000 chdir = /home/zhi_hu_04 wsgi-file = zhi_hu/wsgi.py home = /home/mysite_venv master = true processes = 4 threads = 2 vacum = true
daemonize=/var/log/uwsgi.log #使进程在后台运行,并将日志打到指定的日志文件
然后放到django项目中
启动uwsgi:
uwsgi --ini path/to/project/uwsgi.ini
然后成功访问到我们的django项目
39.108.132.2xx:9000
5、安装Nginx
yum -y install nginx
启动Nginx
systemctl start nginx.service
关闭Nginx
systemctl stop nginx.service
重启
systemctl restart nginx.service
设置开机启动
systemctl enable nginx
查看nginx 启动状态
systemctl status nginx
查看是否监听
ss -tnl | grep 80
查看nginx进程命令
ps -ef | grep nginx pkill -9 nginx
nginx配置
方法一:直接修改nginx.conf:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
#添加
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; #要跟uwsgi中的绑定的socket一致
}
#静态文件
location /static {
alias /home/www/library_system/static/;
}
#日志
access_log /var/log/nginx_access.log;
error_log /var/log/nginx_error.log;
#添加
error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
方法二:添加站点配置
在项目中添加website_nginx.conf
demo
server {
#侦听80端口
listen 80;
#网站域名
server_name www.xxx.com xxx.com www.xxx.xyz xxx.xyz;
#rewrite 规则 如可将www.zhihu086.com 请求转发至 www.zhihu086.com/bbb/
# rewrite ^/$ /bbb/ break;
charset utf-8;
#上传最大限制75M
client_max_body_size 75M;
#你的Django项目的媒体文件路径
location /media {
alias /home/zhi_hu_04/media;
}
# 静态文件路径
location /static {
alias /home/zhi_hu_04/static;
}
# 将动态请求转发到uwsgi
location / {
#一定要和uwsgi的对应
uwsgi_pass 127.0.0.1:8000;
# uwsgi_params文件要新建写入配置
include uwsgi_params;
}
}
然后将站点配置软链接到 /etc/nginx/conf.d 目录下
或者,直接 放到/etc/nginx/conf.d
ln -s /root/workplace/WebSite/website_nginx.conf /etc/nginx/conf.d/website_nginx.conf
最后:
copy /etc/nginx下的uwsgi_params 文件 到项目中 重启nginx 启动uwsgi.ini
6、Django静态文件收集
把Django所有静态文件收集到同一个static中,不然访问Django的admin页面会找不到静态文件。在django的setting文件中添加:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
然后运行:
python manage.py collectstatic
django生产环境部署的更多相关文章
- django 生产环境部署建议
参考django官方建议 一种优秀的作法是使用前缀/ws/来区分WebSocket连接和普通HTTP连接,以便修改配置后,使Channels更容易部署到生产环境中. 特别是对于大型站点,可以配置像ng ...
- django 生产环境部署手册
Django 是 python 的 web 框架,以下是其部署到生产环境的详细步骤,包含 Apache 和 nginx 版本. 部署环境 操作系统:centeros7.3 数据库:MySQL5.6.5 ...
- 【Python之路】特别篇--Django生产环境部署
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. uWSGI uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中H ...
- uwsgi+nginx+django生产环境部署
1.升级python到2.7版本 2.安装uwsgi 出现uwsgi未找到 yum groupinstall "Development tools"yum install zlib ...
- Django + Uwsgi + Nginx 的生产环境部署
使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本 uwsgi- ...
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...
- 第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1
第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1 1.检查系统是否安装了python [root@192 ~]# rpm -qa ...
- 第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6
第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6 1.检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步 ...
随机推荐
- jackson 不拼null节点的注解
http://blog.sina.com.cn/s/blog_544a7be401011url.html ——————————————————————————————————————————————— ...
- JQuery EasyUI DataGrid动态合并(标题)单元) 一
JS: /** * EasyUI DataGrid根据字段动态合并单元格 * @param fldList 要合并table的id * @param fldList 要合并的列,用逗号分隔(例如:&q ...
- php -- 魔术方法 之 调用方法:__call()、__callStatic()
方法重载:当调用一个不存在或者权限不够的方法的时候,会自动调用__call()方法 public function __call($name,$args){} :用对象调用方法 public sta ...
- UIView 坐标转换
例子1 Controller的view中有一个tableView,tableView的cell上有一个button,现在需要将button的frame转为在Controller的view中的frame ...
- php队列算法[转]
<?php/*** php队列算法* * Create On 2010-6-4* Author Been* QQ:281443751* Email:binbin1129@126.com**/cl ...
- Angular 组件与模板 - 属性指令
指令概览 在 Angular 中有三种类型的指令: 组件 — 拥有模板的指令 结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令 属性型指令 — 改变元素.组件或其它指令的外观和行为 ...
- Oracle自定义聚集函数
今天工作中看见别人写的自定义聚集函数,所以一门心思的想搞懂,就在网上找资料了. 自定义聚集函数 自定义聚集函数接口简介 Oracle提供了很多预定义好的聚集函数,比如Max(), Sum(), AVG ...
- 《C++ Primer Plus》第8章 函数探幽 学习笔记
C++ 扩展了 C 语言的函数功能.通过将 inline 关键字用于函数定义,并在首次调用该函数前提供其函数定义,可以使得 C++ 编译器将该函数视为内联函数.也就是说,编译器不是让程序跳到独立的代码 ...
- Windows下IPython安装
1:安装Python, 下载后安装即可:https://www.python.org/downloads/windows/,(选择Python2或Python3) 添加Path环境变量 2:安装ez_ ...
- Caused by: java.lang.ClassNotFoundException[android的终极解决错误]
from:http://blog.csdn.net/changemyself/article/details/7861525 08-13 18:29:22.924: E/AndroidRuntime( ...