项目部署教程

在线演示

1.1.原理介绍

django

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

uwsgi

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

nginx

  • 常用高性能代理服务器

wsgi.py

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

nginx

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

流程

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

作用

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

centos7的部署

以全新服务器为例:

  1. yum -y update
  2.  
  3. yum install gcc
  4.  
  5. yum -y install zlib*
  6.  
  7. yum install openssl-devel -y

1.2.ssh安装

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

11.2.mysql安装

  1. #1.安装
  2. wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
  3. rpm -ivh mysql-community-release-el7-5.noarch.rpm
  4. yum install mysql-community-server
  5.  
  6. #2.重启服务
  7. service 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
  17. mysql -u root
  18.  
  19. #5. 设置外部ip可以访问
  20. #mysql中输入命令:
  21. #后面用navicat连接远程服务器mysql的用户名和密码
  22. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION;
  23.  
  24. FLUSH PRIVILEGES
  25.  
  26. #6.设置mysql密码
  27. 进入mysql
  28. set password =password(''); #密码123456
  29. flush privileges;

11.3.pip和python3.6的安装

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

11.4.虚拟环境安装

  1. yum install python-setuptools python-devel
  2. pip install virtualenvwrapper
  3.  
  4. #编辑.bashrc文件
  5. vim ~/.bashrc
  6.  
  7. #添加进去
  8. export WORKON_HOME=$HOME/.virtualenvs
  9. source /usr/bin/virtualenvwrapper.sh
  10.  
  11. #sudo find / -name virtualenvwrapper.sh 查看你的virtualenvwrapper.sh在什么地方
  12.  
  13. #重新加载.bashrc文件
  14. source ~/.bashrc
  15.  
  16. #虚拟环境保存的路径
  17. cd ~/.virtualenvs/ (创建的虚拟环境都会保存在这个目录,前面设置的)
  18.  
  19. #创建指定python版本的虚拟环境方法
  20. mkvirtualenv -p /usr/local/bin/python3.6 MxOnline

  21. workon MxShop
  22. #进虚拟环境安装依赖包

    首先 pip freeze > requirements.txt
    将本地的虚拟环境安装包导出来,上传到服务器
  23. pip install -r requirements.txt
  24.  
  25. #安装mysqlclient出问题
  26.  
  27. centos 7
  28. yum install python-devel mariadb-devel -y
  29.  
  30. ubuntu
  31. sudo apt-get install libmysqlclient-dev
  32.  
  33. 然后:
  34. pip install mysqlclient

11.5.git安装

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

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

11.7.uwsgi

(1)安装

进虚拟环境安装

  1. workon MxOnline
  2.  
  3. pip install uwsgi

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

MxOnine/uwsgi.ini

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

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

11.8.nginx

(1)安装

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

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

(2)配置文件

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

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

配置好后

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

11.9.navicat数据传输

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

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

(2)新建项目数据库

(3)传输数据

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

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

ubuntu的基本环境搭建

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

mysql

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

pip和python3.6

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

虚拟环境

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

git

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

如果安装软件时候报错

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

github

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

Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)的更多相关文章

  1. Django+nginx+uwsgi部署教程

    00-所需工具 xshell:https://www.netsarang.com/zh/downloading/?token=ZlZnVUNsWDJuM0VaZnVPUjZST1dwd0AzYlNte ...

  2. ubuntu+Django + nginx + uwsgi 部署

    ubuntu+Django + nginx + uwsgi 部署 0.前期准备 注意:以下几件事都必须在激活虚拟环境下完成 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requireme ...

  3. Django+Nginx+uWSGI部署

    一.介绍 Django的部署可以有多种方式,采用nginx+uwsgi的方式是最常见的一种方式.在这种方式中,将nginx作为服务器前端,接收WEB的所有请求,统一管理请求.nginx把所有静态请求自 ...

  4. centos django+Nginx+uwsgi部署

    第五天 部署python3+uwsgi+nginx的博客系统 ================================ mysql基本命令 mysql mysql -p mysqladmin ...

  5. django+nginx+uwsgi 部署配置

    django官方文档在这 https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/uwsgi/ 第一步:先收集静态文件 之前要先设置 S ...

  6. Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统

    Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...

  7. CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇

    CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...

  8. 填坑!!!virtualenv 中 nginx + uwsgi 部署 django

    一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...

  9. 使用Nginx+uWSGI部署Django项目

    1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi l ...

随机推荐

  1. 【详细】Lucene使用案例

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引 ...

  2. 【技巧】Java工程中的Debug信息分级输出接口及部署模式

    也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...

  3. JAVA_SE基础——67.System类

    System类对大家都不陌生吧! 以前经常需要打印结果时使用的都是"System.out.println()"语句,这句代码中就使用了System类.System类定义了一些与系统 ...

  4. django报错Manager isn't accessible via UserInfo instances

    出现这种错误是因为调用模型对象时使用了变量名,而不是对象名(模型类),例如: user = UserInfo()user_li = user.objects.filter(uname=username ...

  5. Mybatis和Hibernate本质区别和应用场景

    Hibernate:是一个标准ORM(对象关系映射)框架.入门门槛较高,不需要程序员写sql语句,sql语句自动生成,对sql语句优化.修改比较困难 应用场景:适用于需求变化不多的中小型项目,比如后台 ...

  6. Angular 学习笔记 ( CDK - Accessibility )

    @angular/ckd 是 ng 对于 ui 组建的基础架构. 是由 material 团队开发与维护的, 之所以会有 cdk 看样子是因为在开发 material 的时候随便抽象一个层次出来给大家 ...

  7. Spring Security入门(1-13)Spring Security的投票机制和投票器

    1.三种表决方式,默认是 一票制AffirmativeBased public interface AccessDecisionManager { /** * 通过传递的参数来决定用户是否有访问对应受 ...

  8. centos7配置Apache支持HTTPS

    Apache版本2.4 安装mod_ssl yum install mod_ssl 建立文件夹,存放sslkey mkdir /etc/httpd/ssl/ 建立凭证档 openssl req -x5 ...

  9. hdu 6205 card card card

    https://vjudge.net/contest/184514#problem/L题意:排成一行的一堆牌,每堆牌都有一定数量的牌,然后每堆牌对应有一个惩罚值.一开始所有的牌都是正面向下的,并且在游 ...

  10. ansible+packer+terraform在aws上布署web服务器

    各工具所扮演的角色 ansible: 配合packer生成安装有apache的基础镜像 packer: 生成amazon AMI terraform: 以packer生成的镜像为基础,布署web服务器 ...