python-django框架-电商项目-项目部署:

uwsgi作为web服务器:

  • 在pycharm中启动项目:使用python manage.py runserver
  • 这个runserver是django提供的开发的时候的web服务器,这个服务器只在开发的时候使用,部署的时候不会,部署的时候使用uwsgi,
  • uwsgi
  • 这是一个遵循wsgi协议的web服务器,
  • ###################            报错            ###########################
  • 安装:pip install uwsgi,这个转入自己的虚拟环境,
  • 报错:AttributeError: module 'os' has no attribute 'uname'
  • 解决:
  • 定位到uwsgiconfig.py文件中,首先import platform后,将os.unam()都改为platform.uname()即可。
  • os.uname()是不支持windows系统的。platform模块是支持任何系统。
  • 2.下载uwsgi离线安装
  • https://pypi.python.org/pypi/uWSGI/
  • 解压后,进入目录下
  • python setup.py install
  • 报错:Exception: you need a C compiler to builduWSGI
  • 安装了MinGW的c编译器,但是还是不行,
  • ################################################################
  • 下面我尝试在Linux系统部署项目
  • 安装:pip install uwsgi,这个转入自己的虚拟环境,
  • Ubuntu pip3安装uwsgi报错
  • Running setup.py install for uwsgi ... error
  • 解决方法:sudo apt-get install -y python3-dev
  • 测试uwsgi是否安装成功完成:uwsgi --version
  • 安装成功了,
  • uwsgi这个安装好了,怎么用它启动我们的项目?
  • uwsgi的配置:
  • 项目部署的时候,一定要把settings下面的DEBUG改为FALSE
  • DEBUG = False
  • ALLOWED_HOSTS = ['*']
  • 使用uwsgi还需要进行一个配置,
  • 在项目目录下,新建一个文件uwsgi.ini,这个ini就是配置文件的后缀
  • uwsgi的启动和停止,
  • 启动:uwsgi --ini uwsgi.ini    (后面是配置文件的路径) #不加--ini也可以
  • 停止:uwsgi --stop uwsgi.pid
  • 重启:uwsgi --reload uwsgi.pid
  • 启动的时候报错:
  • uwsgi: option ‘–http’ is ambiguous
  • getopt_long() error
  • 解决:sudo apt-get install uwsgi uwsgi-core uwsgi-plugin-python#uwsgi-plugin-python一定要安装
  • 但是还是不行,
  • 又找到一个解决方案:Ubuntu 安装  libxml*
  • 然后我找到了方法:sudo apt-get install libxml*
  • 但是又报错了:报错:无法安装XXX, 需要依赖于XXX,那就先去安装这个依赖的XXX
  • 然后开始找这个报错的解决方案:
  • 首先需要安装 aptitude:sudo apt-get install aptitude
  • 然后使用 aptitude 安装包:sudo aptitude install libxml*
  • 发现这个方法也不对,!!!!!!
  • 不对,还是要理清思路 !!!!!!!!!!!!!!

#############################################################

重新理清思路:

第一步:安装uwsgi

  • 进入虚拟环境:
  • pip install uwsgi
  • uwsgi --version,看到版本就安装好了,

第二步:uwsgi的配置

  • 1,项目部署的时候,一定要把settings下面的DEBUG改为FALSE
  • DEBUG = False
  • ALLOWED_HOSTS = ['*']
  • 2,在项目目录下,新建一个文件uwsgi.ini,这个ini就是配置文件的后缀
#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
#socket=127.0.0.1:
#直接做web服务器使用 python manage.py runserver ip:port
http=127.0.0.1:
#配置项目路径,项目的所在目录
chdir=/home/andy/bj18/dailyfresh
#配置wsgi接口模块文件路径
wsgi-file=dailyfresh/wsgi.py
#配置启动的进程数
processes=
#配置每个进程的线程数
threads=
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log
#设置虚拟环境的路径
virtualenv=/home/andy/.virtualenvs/lq_py3

第三步:配置完了之后启动:

  • 启动:uwsgi --ini uwsgi.ini    (后面是配置文件的路径)
  • 出现这一句就对了:[uWSGI] getting INI configuration from uwsgi.ini
  • ps aux | grep uwsgi,查看启动的服务,会发现有很多的uwsgi的服务都启动了,
  • 执行了这些服务之后,就相当于执行了runserver,我们的服务就启动了,
  • 我们就可以通过监听的ip和端口号访问我们的网站了,
  • 停止:uwsgi --stop uwsgi.pid (后面是文件的路径)
  • 报错了:ImportError: No module named 'haystack'
  • 安装了之后不报错了,
  • 但是还需要配置,
  • 现在还有几个模块没有在Linux上面安装的,现在都安装一下,
  • 然后再进行,在Linux上面运行,python manage.py runserver,不报错了,就对了,
  • 经过了痛苦的一天的时间,终于搞定了这个服务的问题!!!!!还是非常的喜悦的心情的,哈哈哈哈!!!!!

第四步:访问Linux上面的http://127.0.0.1:8080/index

  • 访问这个网址可以显示网页,就说明你配置的是对的了,
  • 现在有一个问题,是不能显示样式的问题,
  • django配置中setting,有一个debug=True,那时候django自动帮你处理静态文件,现在部署的时候,把这个debug改成了False,所以django也不能帮你处理静态文件了,
  • 所以静态文件没有显示,
  • 怎么处理?
  • 需要用到Nginx,使用Nginx帮我们提供静态文件,
  • 现在我们已经知道uwsgi可以作为一个服务器,来访问,不需要使用启动django的方式了。

#####################

基本的部署框架解析

  • 刚刚我们使用uwsgi作为服务器的流程:
  • 用户浏览器,web服务器uwsgi,django代码
  • 这是三层,
  • 这3层怎么交互的,
  • 用户请求网站,首先是请求uwsgi这个web服务器,然后uwsgi调用django框架的入口,然后django处理,处理完成之后,会返回给uwsgi服务器,然后uwsgi返回给用户的浏览器,
  • 这就是刚刚搭建的过程,
  • 这是部署项目最简单的模型,
  • 下载这个模型有一个问题,就是我的静态文件不能显示,
  • 在uwsgi的前面加上一个Nginx服务器,这个Nginx服务器就是放在用户和uwsgi之间的,这就是四层了,
  • #########################
  • 用户浏览器,Nginx服务器,uwsgi服务器,django代码
  • Nginx也可以作为web服务器,用户浏览器请求,先去请求Nginx,Nginx里面配置,
  • 1,如果是动态请求,转交给uwsgi服务器,后面的过程不需要管, 只需要转交,然后uwsgi再到django代码,返回的时候,django把处理的信息给uwsgi,然后uwsgi给Nginx,然后Nginx给web浏览器,
  • 2,如果不是一个动态请求,是一个静态的请求,提前把项目用到的静态文件,放到Nginx所在电脑的某一个目录中,然后Nginx做一个配置,它会根据配置到目录下方,找到这个静态文件,然后直接返回给用户的浏览器,就不经过uwsgi了,
  • 这就是我们搭建Nginx的作用,
  • 到底是动态请求还是动态请求,都是根据url的配置,根据Nginx里面的location地址的配置,比如在Nginx里面配置一个/,一个/static,凡是static开头的就是一个静态的请求,其他的就是一个动态的请求,所以主要看Nginx的配置,
  • 我们这就是对之前3层的一个升级,

Nginx转交给uwsgi的部署:

  • 现在的问题就是怎么通过Nginx和uwsgi进行一个对接,
  • 第一步:要对接,我们uwsgi的文件需要做一个更改,找到配置文件,
  • 后面的操作,我只在我的Linux上面进行修改,
  • 进入我的Linux上面的项目目录:cd /home/andy/bj18/dailyfresh
  • #配置和nginx连接的socket连接
  • socket=127.0.0.1:8080   #把这一行放出来,
  • #直接做web服务器使用 python manage.py runserver ip:port
  • #http=127.0.0.1:8080
  • 第二步:Nginx也要配置
  • 进入Nginx目录:cd /usr/local/nginx/conf
  • 修改配置文件,
  • location / {
  • # 包含uwsgi的请求参数
  • include uwsgi_params;
  • #转交请求给uwsgi
  • uwsgi_pass 127.0.0.1:8080
  • }
  • 配置完了,增加了一个配置项,这个时候还没有配置静态和动态的区分,
  • 现在分别启动Nginx和uwsgi,
  • 现在就可以直接访问Nginx了,
  • #####################################
  • Nginx的ip和端口号是多少?
  • 127.0.0.1端口是80,你访问127.0.0.1,就是默认访问80,
  • 你想要访问首页,就是127.0.0.1/index
  • 好了这样访问这个地址就对了,

Nginx配置处理静态文件:

  • 继续配置Nginx,
  • 新建一个目录用户存放静态文件
  • cd /var/
  • mkdir -p /var/www/dailyfresh/static,没有父级目录,就新建,
  • 这就是我们的目录:/var/www/dailyfresh/static
  • location /static {
    # 指定静态文件存放的目录
    alias /var/www/dailyfresh/static/;
    }

  • 配置好了,
  • 下一步要把静态文件收集过来,放到我们的这个目录下面,
  • 不能把项目中static整个的文件夹全部copy过去,这只是你看到的静态文件,实际上比这还要多,
  • 那怎么把所有的静态文件找出来呢?
  • django提供了怎么收集项目所用到的静态文件,
  • django的settings中配置收集静态文件的路径,
  • #指定收集静态文件的路径
    STATIC_ROOT='/var/www/dailyfresh/static'

  • 然后修改文件夹的权限,
  • sudo chmod 777 /var/www/dailyfresh/static
  • 然后进入虚拟工作区,workon lq_py3
  • 进入项目目录:cd /home/andy/bj18/dailyfresh
  • 执行命令:python manage.py collectstatic
  • 这样就收集完了,
  • 重启Nginx,sudo /usr/local/nginx/sbin/nginx -s reload
  • 再次在Linux上面,访问这个页面,127.0.0.1/index
  • 发现这个页面就是有静态页面的好看的页面了,哈哈哈!!!!
  • 这样,我们的静态文件都是/static开头的,根据Nginx里面的配置,就能找到静态文件了,

到了这一步,基本的部署基本就可以了,

  • 这就是整个的部署架构了,
  • 在这个基础上,还有,
  • 之前有把首页生成静态文件,用户是访问我们的静态的首页,还是django的首页,我们需要做一个区分,如果访问包含/index的话,就交给django,如果访问的地址只有一个/,我们就交给celery上面的Nginx,让他产生一个静态页面,返回回来,
  • 怎么实现这个区分?
  • 我们需要在用户后面,django项目前面加入一个调度的Nginx,我就用刚刚的Nginx来做,
  • 流程图再次梳理一下:
  • 用户去访问我的网站,在网站的最前面会有一个调度的Nginx,后面就是我们的django项目(uwsgi+django),还有一个产生静态页面的电脑,静态页面服务器,在服务器上回生成静态的首页,静态页面是使用的celery,怎么生成提供这个页面?就需要在这个静态页面的服务器配置一个Nginx,
  • 整个网站部署完了之后,用户只会知道我们Nginx的ip或者域名,根据请求,我们的Nginx可以做一个区分,如果访问的是一个/,就是找静态的首页,如果是访问的/index,就是访问django去了,
  • 刚刚已经配置好了,可以实现如果是访问的/index,就是转交访问django去了,可以实现这个转交,现在关键的一点是,如果访问的是/,怎么找静态的首页,
  • 所以Nginx在这个项目承担了两个角色,一个是调度,转交给uwsgi处理,转交给静态服务器,还有一个功能就是处理静态文件,
  • 我们可以给Nginx的ip绑定一个域名,用户访问我们的网站, 输入域名,就是访问我们的Nginx,用户不知道其他内容,

当访问的是/的时候,怎么去访问静态页面?

  • 我们之前做的静态页面在哪里?
  • 在我们的fastdfs,
  • 我们在进入Nginx的配置文件:sudo vi /usr/local/nginx/conf/nginx.conf
  • 我们之前配置的,80端口是提供我们的静态页面,8888端口是提供我们的图片的,
  • 现在Linux的配置,80端口是用来,作为调度的,如果是/就是访问django,如果是/static就是访问静态文件,
  • 配置Nginx的配置文件,
  • sudo vi /usr/local/nginx/conf/nginx.conf
  • 难道我要两台Nginx服务器????
  • 看来是的,这个问题不影响大局,我后面再看,
  • # 等于号是精确匹配,上面都是模糊匹配,
     location = / {
     #传递请求给静态文件服务器上的Nginx,
     proxy_pass http://192.168.100.128;
     }

  • 这个proxy,就是在满足这个条件的时候,转发给另外一个服务器,让它提供我们的静态首页,,

Nginx配置upstream思想实现均衡,

  • django项目后面是
  • 1,我们的数据库,,
  • 2,还有我们的fastdfs(里面有两个角色,tracker和storage,),
  • 3,还使用到了redis(承担了很多的功能,承担了缓存的作用,session的缓存存储,celery异步中承担broker的角色,购物车和浏览记录)
  • 后面的东西,就是我们的django和这些有一个交互的过程,
  • django项目可能在一台电脑上,mysql在另外一台电脑上,fastdfs也可能在另外一台电脑,我们看到的所有的东西都可以在不同的电脑上,
  • 比如redis的几个功能都可以放到不同的电脑上,
  • 但是Nginx是跟着fastdfs走的,因为要提供图片,Nginx也要跟着静态页面服务器走的,
  • 这样的一个过程,
  • Nginx我们一般叫做调度服务器,或者叫做负载均衡服务器,
  • 怎么叫负载均衡服务器,我一个网站, 在做好了之后去部署的时候,服务的代码可能启动的不只是一套,我们的代码可以运行多份,每跑一个,就是一个进程,就可以提供服务,用户的请求过来之后,我们就可以进行配置,Nginx可以转交给不同的代码服务器上去,这样就可以实现我们的负载的均衡了,
  • 比如用户的请求过来,Nginx做一个转交,可能转交到了代码服务器1,用户来了第二个请求,我可能就转交给代码服务器2,这种就是叫做负载均衡,
  • 这一点我们怎么配置?
  • 找到我们的项目配置文件,
  • 把uwsgi的配置文件复制一份,改动一下端口为8081,然后改名字为uwsgi2,
  • 然后启动这个uwsgi2,我们就会看到两个了uwsgi,uwsgi2,我们就是启动了两个服务器,我们通常叫做应用服务器,或者叫做业务处理的服务器,
  • 我现在需要在Nginx中做一个配置,在转发请求的时候,可以转发给这两个,实现一个负载均衡,
  • 配置:
  • sudo vi /usr/local/nginx/conf/nginx.conf
  • 至于怎么配置,我现在先不考虑,
  • 实际工作中,我们可以使用很多台的服务器,来做这个负载均衡,
  • 代码层面的优化是有极限的,所以要靠硬件来解决了,
  • 这个部署也不是我们部署的,是运维部署的,

项目总结:

  • 部署之后,项目就结束了,

python-django框架-电商项目-项目部署_20191127的更多相关文章

  1. Python Django(WEB电商项目构建)

    (坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...

  2. python-django框架-电商项目-首页开发_20191122

    python-django框架-电商项目-首页开发 业务背景: 用户浏览网站一定是先到首页, 没有登陆的话首页内容完全一样,而且是不经常变化的, 一段时间内,有100用户访问,就要有几个用户就要查询多 ...

  3. python-django框架-电商项目-订单模块开发_20191125

    python-django框架-电商项目-订单模块开发 提交订单页面: 在购物车中点击提交订单,就应该到达提交订单页面了, 显示: 1,收获地址, 2,支付方式 3,用户购买的商品信息,数量,小计, ...

  4. python-django框架-电商项目-购物车模块开发_20191125

    python-django框架-电商项目-购物车模块开发 商品详情页js代码: 在商品详情页,有加入购物车按钮, 点击加减号可以增加减少,手动输入也可以, 点击加入购物车,就要加过去, 先实现加减的操 ...

  5. django框架使用及创建项目

    一.django框架使用及创建项目 (1)创建Django项目 1>在cmd命令行下输入:django-admin startproject RecourceRegist(进入相应路径下) 2& ...

  6. [Python] Django框架入门

    说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...

  7. Java生鲜电商平台-服务器部署设计与架构

    Java生鲜电商平台-服务器部署设计与架构 补充说明:Java开源生鲜电商平台-服务器部署设计与架构,指的是通过服务器正式上线整个项目,进行正式的运营. 回顾整个章节,我们涉及到以下几个方面: 1. ...

  8. 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

    利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcode qr = ...

  9. Python Django框架笔记(一):安装及创建项目

     #推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...

随机推荐

  1. 更新anaconda包

    升级安装python环境后, 把老的包重新安装回去. ls -l /opt/anaconda3/lib/python3.7/site-packages/ | grep "\-info&quo ...

  2. Python pip安装时You are using pip version 9.0.1, however version 18.0 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.

    在我们安装第三方库的时候会在结尾出现如下两行内容 You are using pip version 9.0.1, however version 18.0 is available. You sho ...

  3. 《打造扛得住的MySQL数据库架构》第3章 MySQL基准测试

    3-1 什么是基准测试 测量系统性能,优化是否有效?MySQL基准测试. 定义:基准测试是一种测量和评估软件性能指标的活动,用于建立某个时刻的性能基准,以便当系统发生软硬件 变化时重新进行基准测试以评 ...

  4. iPhone到底能不能充一整夜电?

    其实在国内,手机充电一直是个"玄学问题".早在多年前就有大神向小白敦敦教导,"新买的手机要将电用完,并充12个小时,如此反复三次才能延长手机电池寿命".甚至直到 ...

  5. Linux上创建RStudio快捷方式

    在Linux平台上经常会有一些软件需要通过命令行的方式启动,这没有图标启动方便,下面是在Linux平台为RStudio创建图标链接的方法: 下面以在桌面上创建RStudio快捷方式为例: (1) 首先 ...

  6. CPython中的GIL

    GIL:全局解释器锁(cpython中) GIL产生的背景,由于C语言底层原因,CPpython中多线程运行,每个线程都需要申请全局资源,但是Cpython并不能应对所有线程同时的资源请求,为防止发生 ...

  7. Cocoapod-终端

    安装循序: Xcode->RVM->Ruby(安装过程中需要安装homebrew)->CocoaPats 参考文章: 安装地址:http://www.cnblogs.com/dagu ...

  8. Jupyter notebook 和 Jupyter lab 的区别

    Jupyter Notebook Jupyter Notebook 是一个款以网页为基础的交互计算环境,可以创建Jupyter的文档,支持多种语言,包括Python, Julia, R等等.广泛用于数 ...

  9. Django学习---多人博客项目(1)

    一.创建项目和应用 ​ 在Pycharm中用Django模板创建一个工程文件 创建项目 python manage.py startproject 项目名 . 创建应用 python manage.p ...

  10. redis day03 下

    事务 能够有回退状态 事务命令 安命令执行没问题,redis是弱事务型 nulti incr n1   -->QUEUED(返回仅队列了) EXEC -->返回结果 pipeline 流水 ...