Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

项目部署教程

在线演示

1.1.原理介绍

django

  •  一个基于python的开源web框架

uwsgi

  •  一是一个web服务器,也可以当做中间件

nginx

  • 常用高性能代理服务器

wsgi.py

  • django项目携带的一个wsgi接口文件

nginx

1Nginx是一个Http和反向代理服务器 2什么是反向代理服务器呢? 3 4正向的就是由浏览器主动的想代理服务器发出请求,经代理服务器做出处理后再转给目标服务器 5反向的就是不管浏览器同不同意,请求都会经过代理服务器处理再发给目标服务器 6这其中的区别就是必须经过Nginx反向代理服务器,这就有了使用Nginx的几个好处: 7 8安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器 9负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能 10提高web服务器的IO性能:这个我也没看懂,总结来说就是请求从客户端传到web服务器是需要时间的,传递多长时间就会让这个进程阻塞多长时间,而通过反向代理,就可以在反向代理这完整接受请求,然后再传给web服务器,从而保证服务器性能,而且有的一些简单的事情(比如静态文件)可以直接由反向代理处理,不经过web服务器

流程

1首先客户端请求服务资源, 2nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析, 3如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源, 4如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi, 5wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi, 6wsgi将返回值进行打包,转发给uWSGI, 7uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)8*:不同的组件之间传递信息涉及到数据格式和协议的转换

作用

11. 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程; 22. 在nginx上加上安全性或其他的限制,可以达到保护程序的作用; 33. uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡; 44. django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。

centos7的部署

以全新服务器为例:

1yum -y updateyum install gcc 2 3yum -y install zlib* 4 5yum install openssl-devel -y

1.2.ssh安装

1yum install openssh-server -y 2 3service sshd restart 4 5#xshell连不上,SSH服务端不允许密码验证。 6#服务端开启密码验证的方法: 7 8vim /etc/ssh/sshd_config 9 10把PasswordAuthentication项为yes 11 12重启服务 13 14service sshd restart

11.2.mysql安装

1#1.安装 2wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 3rpm -ivh mysql-community-release-el7-5.noarch.rpm 4yum install mysql-community-server 5 6#2.重启服务 7service mysqld restart 8 9#3. 设置bind-ip 10 11 vim /etc/my.cnf 12[mysqld]: 13 下面加一行 14 bind-address = 0.0.0.0 15 16#4.登录mysql 17mysql -u root 18 19#5. 设置外部ip可以访问 20#mysql中输入命令: 21#后面用navicat连接远程服务器mysql的用户名和密码 22GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 23 24FLUSH PRIVILEGES25 26#6.设置mysql密码 27进入mysql: 28set password =password('123456'); #密码123456 29flush privileges;

11.3.pip和python3.6的安装

1#安装pipwget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 2 3sudo python get-pip.py 4 5#安装python3.6 61. 获取 7 8wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz 9tar -xzvf Python-3.6.2.tgz -C /tmp 10cd /tmp/Python-3.6.2/ 11 122. 把Python3.6安装到 /usr/local 目录 13 14./configure --prefix=/usr/local 15make 16make altinstall 17 183. 更改/usr/bin/python链接 19 20ln -s /usr/local/bin/python3.6 /usr/bin/python3

11.4.虚拟环境安装

yum install python-setuptools python-devel pip install virtualenvwrapper #编辑.bashrc文件 vim ~/.bashrc #添加进去 export WORKON_HOME=$HOME/.virtualenvs source /usr/bin/virtualenvwrapper.sh #sudo find / -name virtualenvwrapper.sh 查看你的virtualenvwrapper.sh在什么地方

#重新加载.bashrc文件 source ~/.bashrc #虚拟环境保存的路径 cd ~/.virtualenvs/ (创建的虚拟环境都会保存在这个目录,前面设置的) #创建指定python版本的虚拟环境方法 mkvirtualenv -p /usr/local/bin/python3.6 MxOnline

workon MxShop
#进虚拟环境安装依赖包
首先 pip freeze > requirements.txt 将本地的虚拟环境安装包导出来,上传到服务器 pip install -r requirements.txt #安装mysqlclient出问题 centos 7: yum install python-devel mariadb-devel -y

1ubuntu: 2 sudo apt\-get install libmysqlclient-dev 3 4然后: 5 pip install mysqlclient

11.5.git安装

1yum install git 2 3git config --global user.name "Your Name" 4git config --global user.email "youremail@domain.com" 5 6cd ~/ && ssh-keygen -t rsa -C "你的邮箱" 7 8#提示的信息,直接按enter就行 9 10cd .ssh 11 12把公钥文件(id_rsa.pub)中的码复制到github 13 14#就可以开始clone代码了 15 16git clone git@github.com:derek-zhang123/MxOnline.git

这是我的项目目录和虚拟环境目录

  • 项目目录:          /home/gitpackage/MxOnline
  • 虚拟环境目录:  /root/.virtualenvs/MxShop

11.6.拉取项目静态文件

1#在django的setting文件中,添加下面一行内容: 2 3 STATIC_ROOT = os.path.join(BASE_DIR, "static/") 4 5#运行命令 6 python manage.py collectstatic

 

settings中其它需要设置的地方

1DEBUG = True 2 3ALLOWED_HOSTS = ['*'] #自己设置可以访问的域名,‘*’代表所有都可以访问

11.7.uwsgi

(1)安装

进虚拟环境安装

1workon MxOnline 2 3pip install uwsgi

(2)在项目目录下新建uwsgi.ini文件

MxOnine/uwsgi.ini

1[uwsgi] 2 3socket =127.0.0.1:8000 4chdir = /home/gitpackage/MxOnline 5module = MxOnline.wsgi 6master = true 7processes = 4 8vacuum = true 9virtualenv = /root/.virtualenvs/MxShop 10logto = /tmp/mylog.log

注: chdir: 表示需要操作的目录,也就是项目的目录 module: wsgi文件的路径 processes: 进程数 virtualenv:虚拟环境的目录

11.8.nginx

(1)安装

这里有安装方法:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7

1sudo yum install nginx 2 3#可能会用到的命令 4service nginx restart 5service nginx stop 6service nginx start

(2)配置文件

在/etc/nginx/conf.d下新建MxOnline.conf

1# the upstream component nginx needs to connect to 2upstream django { 3# server unix:///path/to/your/mysite/mysite.sock; # for a file socket 4server 127.0.0.1:8000; # for a web port socket (we'll use this first) 5} 6# configuration of the server 7 8server { 9# the port your site will be served on 10listen 80; 11# the domain name it will serve for 12server_name 180.76.56.222; # substitute your machine's IP address or FQDN 13charset utf-8; 14 15# max upload size 16client_max_body_size 75M; # adjust to taste 17 18# Django media 19location /media { 20 alias /home/gitpackage/MxOnline/media; # 指向django的media目录 21} 22 23 24location /static { 25 alias /home/gitpackage/MxOnline/static; # 指向django的static目录 26} 27 28# Finally, send all non-media requests to the Django server. 29location / { 30 uwsgi_pass django; 31 include uwsgi_params; }}

 

 配置好后

1nginx -t #提示success说明没问题 2 3service nginx restart

11.9.navicat数据传输

一切都配置好后,把本地数据库的数据传到服务器上面

(1)连接你的服务器数据库

(2)新建项目数据库

(3)传输数据

 数据传输完成,配置也都配置好后,就可以开始访问了

1#创建超级用户python manage.py createsuperuser#把uswgi服务开启uwsgi --ini uwsgi.ini 2 3#访问 4http://你的ip地址/

ubuntu的基本环境搭建

1sudo apt-get update 2 3apt-get install gcc 4 5apt-get install libssl-dev 6 7sudo apt-get install openssl 8 9 10apt-get install zlib1g 11 12apt-get install zlib1g.dev

 mysql

1sudo apt-get install mysql-server 2 3输入密码 4 5mysql -u root -p 6 7sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 8 9 bind-address = 0.0.0.0 #添加进去 10 11sudo service mysql restart 12 13#设置远程访问 14 15GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 16 17flush privileges;

 pip和python3.6

1wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 2 3sudo python get-pip.py 4 5wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz 6 7tar -xzvf Python-3.6.2.tgz -C /tmp 8cd /tmp/Python-3.6.2/ 9 102. 把Python3.6安装到 /usr/local 目录 11 12./configure --prefix=/usr/local 13make 14make altinstall 15 163. 更改/usr/bin/python链接 17 18ln -s /usr/local/bin/python3.6 /usr/bin/python3

 虚拟环境

1pip install virtualenv 2pip install virtualenvwrapper 3 4vim ~/.bashrc 5 6export WORKON_HOME=$HOME/.virtualenvs 7source /usr/local/bin/virtualenvwrapper.sh 8 9source ~/.bashrcmkvirtualenv MxOnline --python=python3.6 10 11worko MxOnline 12 13sudo apt-get install libmysqlclient-dev 14 15pip install -r requirements.txt

 git

1sudo apt-get update 2sudo apt-get install git 3 4git config --global user.name "Your Name" 5git config --global user.email "youremail@domain.com"

如果安装软件时候报错

1E: Sub-process /usr/bin/dpkg returned an error code (1)错误解决 2 3在用apt-get安装软件时出现了类似于 4install-info: No dir file specified; try --help for more information.dpkg:处理 gettext (--configure)时出错: 子进程 post-installation script 返回了错误号 1 在处理时有错误发生: 5findutils 6E: Sub-process /usr/bin/dpkg returned an error code (1) 7办法如下: 81.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名 92.$ sudo mkdir /var/lib/dpkg/info //再新建一个新的info文件夹 103.$ sudo apt-get update,再$sudoapt-get -f install //不用解释了吧 114.$ sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old //执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_old文件夹下 125.$ sudo rm -rf /var/lib/dpkg/info //把自己新建的info文件夹删掉 136.$ sudo mv /var/lib/dpkg/info_old /var/lib/dpkg/info //把以前的info文件夹重新改回名字 14到此问题顺利解决

github

1cd ~/ && ssh-keygen -t rsa -C "你的邮箱" 2 3#提示的信息,直接按enter就行 4 5cd .ssh 6 7把公钥文件(id_rsa.pub)中的码复制到github 8 9#就可以开始clone代码了 10 11git clone git@github.com:derek-zhang123/MxOnline.git
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )