Django +uwsgi+python3+nginx + mysql 部署
环境:
服务器ip:192.168.0.110
centos服务器 6.4 + mysql 5.6 + django1.11 +nginx 1.13.7 + uwsgi 2.0.18
uwsgi介绍
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
- WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
- uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。
uWSGI的主要特点如下
- 超快的性能
- 低内存占用
- 多app管理
- 详尽的日志功能
- 高度可定制(内存大小限制,服务一定次数后重启等)
nginx+uwsgi
工作原理:
nginx负责建立一个本地的工作环境,就是本地服务器,类似于pycharm的 run调试django一样,可以打开一个 http:127.0.0.1的本地服务页面
并开启一个可使用的端口。
uwsgi 负责转发,将外网发过来的请求转发给 nginx,nginx就像处理内部访问一样来处理请求。(所以他们的端口明显不一样)
nginx+uwsgi+django是我们常用的django部署方式。nginx作为最前端的服务器,他负责接收所有的客户端请求,对于请求的静态文件,由nginx服务器自己完成,因为它具有很好处理静态文件的能力,性能进行过优化,支持高并发量;uWSGI服务器作为支持服务器,是用来服务nginx的,nginx将请求的动态文件交给uWSGI进行处理。uWSGI实现了uwsgi、wsgi和http协议,uwsgi协议是uWSGI自定义的协议,定义的是框架(django)和服务器对接的接口。
Nginx和uWSGI都是Web服务器 ,Nginx负责静态内容,uWSGI负责Python这样的动态内容,请求先交由Nginx,如果是静态内容就自己处理了,如果是动态内容就交给uWSGI服务器,uWSGI服务器处理整个Django项目的Python代码,响应请求,原路返回
nginx + uwsgi 提供高并发
mysql安装 参考
http://www.cnblogs.com/mingerlcm/p/6792503.html
为centos系统增加编译功能
yum install gcc-c++
安装nginx依赖包
yum install pcre pcre-devel
安装wget
yum install wget
安装这个模块是为了让uwsig支持使用“-x"选项,能通过xml文件启动项目
yum install libxml*
# yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
下载python3
Python下载源
.下载软件包
# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
.解压
# tar -xzvf Python-3.6..tgz
.创建目录
#mkdir -p /usr/local/python3.
.把Python3.6安装到 /usr/local/python3. 目录
# ./configure --prefix=/usr/local/python3.
# make && make install .创建软连接
ln -s /usr/local/python3.6/bin/python3. /usr/bin/python3
ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3 .查看Python版本
#python --version
Python 3.6.
给python3安装django和uwsgi,pymysql以及配置启动项目的xml文件
pip3 install pymysql
pip3 install django==1.11
pip3 install uwsgi
为了在终端中使用uwsgi命令,执行以下命令
ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi3
专门用来放我们的django项目
mkdir /www/
将你的django项目放到你想放的路径下,例如/www/,假设我们的Django项目名为"myproject"
在你的django项目下新建 myproject.xml,内容如下:
[root@mysql myproject]# vim myproject.xml
<uwsgi>
<socket>127.0.0.1:8002</socket><!-- 内部端口,自定义 -->
<chdir>/www/myproject</chdir><!-- 项目路径 -->
<module>myproject.wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>
wq保存
安装nginx和配置nginx.conf文件
下载nginx,执行解压命令
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz
进入解压后的nginx-1.13.7文件夹,编译安装nginx
[root@mysql myproject]# cd /soft/
[root@mysql soft]# cd nginx-1.13.
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
nginx一般默认安装好的路径为/usr/local/nginx
在/usr/local/nginx/conf/中打开nginx.conf,加入以下内容,先备份nginx.conf文件
[root@mysql nginx-1.13.]# cd /usr/local/nginx/conf/
[root@mysql conf]# cp nginx.conf nginx.conf.bak
vim nginx.conf
server {
listen ; # 暴露给外部访问的端口
server_name localhost; charset utf-; #access_log logs/host.access.log main; location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:; # 外部访问8001就转发到内部8002
} location /static/ {
alias /www/myproject/statics/; #项目静态路径设置
}
关闭 selinux
vim /etc/selinux/config
SELINUX=enforcing
改为disabled
SELINUX=disabled
iptables加上允许8001,8002,3306,80端口
vim /etc/sysconfig/iptables
配置文件配置
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
配置好重启iptables
[root@mysql myproject]# service iptables restart
启动nginx
[root@mysql conf]# /usr/local/nginx/sbin/nginx
访问项目页面
进入你的django项目路径,执行以下命令:
uwsgi3 -x myproject.xml
注:执行该xml后django就算是启动了,内部的nginx服务也将被启动,uwsgi将能够连接到nginx的服务了,此时网络应该是通畅的了。
以上步骤都没有出错的话,打开你的浏览器,输入以下链接,http://192.168.0.110:8001 (请将该ip替换成你的服务器ip)
网站访问成功!
部署完成之后发现django后台admin访问时无样式
解决方法如下:
1.先打开django项目中settings.py文件(/www/myproject/myproject/settings.py),添加如下配置
[root@mysql myproject]# vim settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "statics")
2.然后在django项目下 执行 python3 manage.py collectstatic 此命令是搜集静态文件的命令,
[root@mysql myproject]# python3 manage.py collectstatic You have requested to collect static files at the destination
location as specified in your settings: /www/myproject/statics This will overwrite existing files!
Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes
搜集后的静态文件存放在/home/myproject/statics/中
3.重新启动uwsgi和nginx
[root@mysql myproject]# /usr/local/nginx/sbin/nginx -s reload
[root@mysql myproject]# pkill uwsgi
[root@mysql myproject]# uwsgi3 -x myproject.xml
[uWSGI] parsing config file myproject.xml
可以看到admin样式
Django +uwsgi+python3+nginx + mysql 部署的更多相关文章
- 基于centos7+nginx+uwsgi+python3+django2.0部署Django项目
0.序言 本文讲解如何基于centos7+nginx+uwsgi+python3+django2.0把windows上的本地项目部署到云服务器上. 本文服务器上的django项目和虚拟环境的路径将建立 ...
- django -- uwsgi+nginx部署
一. 安装nginx How To Install Nginx on CentOS 7 添加epel扩展仓 sudo yum install epel-release 安装Nginx yum inst ...
- nginx+uwsgi+python3+pipenv+mysql+redis部署django程序
1.下载项目 git clone https://github.com/wangyitao/MyBlogs.git 2.进入Myblogs目录 cd MyBlogs 3.创建虚拟环境并且安装依赖 pi ...
- Django models python3搭载mysql
1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite的数据库,默认自带sqlite ...
- django开发个人简易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5
前面说完了此项目的创建及数据模型设计的过程.如果未看过,可以到这里查看,并且项目源码已经放大到github上,可以去这里下载. 代码也已经部署到sina sea上,地址为http://fengzhen ...
- 【翻译】使用nginx作为反向代理服务器,uWSGI作为应用服务器来部署flask应用
最近在看关于Docker和Nginx方面的内容,先于在Docker上开发以及部署python应用自然要先能够在本机上部署,其中找到一篇文章写的最为详细并且实验成功,所以在此翻译转载过来以备后需.[原文 ...
- Django项目部署(django+guncorn+virtualenv+nginx)
一.说明 为了django项目部署到生产环境上,能够稳定的运行,且能够同时指出http和https的访问,对django的部署进行了一些研究,决定采用django + gunicorn + virtu ...
- 阿里云 centos7 django + uWSGI+Nginx + python3 部署攻略
centos7+nginx+python3+django+uwsgi配置Django 项目部署 1.租的服务器(选择centos)的话,需要在阿里云后台控制台开放几个端口,克隆一下已开放的端口,t ...
- django 本地项目部署uwsgi 以及云服务器部署 uwsgi+Nginx+Docker+MySQL主从
一 .django 本地项目部署uwsgi 1 本地部署项目 uwsgi安装测试 通过uwsgi 进行简单部署 安装uwsgi命令:pip install uwsgi -i http://pypi.d ...
随机推荐
- html/php/mysql乱码
1. html通过jquery的ajax传递数据给php. encodeURI("my.php?name=博客园") 2. php接受 urldecode($_GET[" ...
- JDBC批量执行executeBatch
JDBC事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这 ...
- 推荐系统之隐语义模型(LFM)
LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型.那这种模型跟ItemCF或UserCF的不同在于: 对于UserCF,我们可以先计算和目标用户兴趣 ...
- WP8.1学习系列(第十章)——中心控件Hub设计指南
Windows Phone 应用商店应用中的中心控件指南 在本文中 说明 示例 用法指南 设计指南 相关主题 重要的 API Hub (XAML) HubSection (XAML) 说明 中心控 ...
- try except与try finally不同之处
try except与try finally不同之处 try//尝试执行 {SomeCode} except//出错的时候执行, Except有特定的错误类型 {SomeCode} end; t ...
- android:listView Button 焦点问题
要想listView的item与其上的button皆能得到焦点响应: 在listView item 的布局中: 在<RelativeLayout>中 android:descendantF ...
- Android中Handler引起的内存泄露
在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. 1 2 3 4 5 6 7 8 9 public class SampleActivit ...
- Openstack的网卡设置
本博客已经添加"打赏"功能,"打赏"位置位于右边栏红色框中,感谢您赞助的咖啡. 最开始接触Openstack,这块是比较头疼的,不同的文档,设置都会有所差异,并 ...
- 3-2 axios基础介绍
1.静态引用 <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 2.npm ...
- Sass::SyntaxError related to active_admin/mixins
in active_admin.css.sass, change: @import "active_admin/mixins"; @import "active_admi ...