从基本ubuntu系统搭建django并部署+性能优化

基于git搭建djang

服务器:腾讯云 Ubuntu 16.04.4

  1. 先sudo apt-get update   sudo apt-get upgrade
  2. 确认已安装python3环境。

~$ python3

如果响应,则有python3

  1. 确认已安装python3的pip

pip3

若没有安装,则通过sudo apt-get install python3-pip

  1. 安装git

sudo apt-get install git

设置全局参数

git config –global user.name “name”

git config –global user.email email@xx.com

  1. 通过pip方式安装virtualenv

使用pip3 install virtualenv  安装在python3环境下,不要安装在python2环境下

  1. 使用virtualenv新建python虚拟环境

python3 –m virtualenv 虚拟环境名

当然也可以使用virtualenv的方式指定python解释器版本,都可以使用

激活虚拟环境,进入对应的bin文件后

source activate

  1. 使用git clone方式下载下项目代码

git clone 项目的http链接     链接通过码云管理

  1. 新建git remote

git remote add gitee git@gitee.com:qiuyfchina/zmrenLearn.git

  1. 安装依赖库。

pip install –r requestion.txt

  1. 安装nginx

sudo apt-get install nginx

  1. 编辑nginx配置文件,可以选择直接配置nginx.conf文件,我选择的是在/etc/nginx/site-available文件下新建配置文件进行配置

配置文件名称随意,只要在这个目录下就可以

server {

    listen 8000;  # 监听的端口,浏览器输入

    location / {  # 代理目录,会对url进行匹配,并代理下面的ip

        proxy_pass http://localhost:8080;  # 代理目标,若匹配到/,则代理到该IP下,                                                                                   # proxy_pass 用于http的代理,还有其他方式                                                                                    # 如fastCGI等,详情查看nginx文档

    }

    localhost /static/ {   # 与上面一样,对向服务器请求的url进行匹配,若匹配到static,                                       # 则代理向下面的目录,用于代理静态文件。 注意斜杠。

        alias 项目目录;

    }

}

  1. 凡是修改了nginx配置,记得重启nginx。官方文档有详细说明相关命令

sudo nginx –s reload    # 重启

sudo nginx –s quit      # 关闭

sudo nginx –s stop      # 强制关闭

sudo service nginx start  # 启动

  1. 启动django,注意启动的django的IP:PORT需要与nginx中设置的一致,即代理目标相同,否则nginx代理不过去。
  2. 可以使用django自带的服务器runserver,但不可用于正式应用,仅用于开发。正式应用可使用gunicorn。

gunicorn –bind IP:port app_name.wsgi:application

  1. 可以通过设置ubuntu的自启动进程来管理,当gunicorn挂了还可以自动拉回来。

/usr/lib/system/system/qiuyf.service    # system自己新建,服务名后缀必须为service

内容:

[Unit]

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

# 你的用户

User=siar

# 你的目录

WorkingDirectory=/home/siar/sites/django-blog-learning/blogproject

# gunicorn启动命令

ExecStart=/home/siar/sites/env/bin/gunicorn --bind unix:/tmp/siar.socket blogproject.wsgi:application

Restart=on-failure

[Install]

WantedBy=multi-user.target

 

sudo systemctl restart servicename.service  重启

sudo systemctl stop servicename.service  停止

sudo systemctl start servicename.service 开始

 

注:

  当发生http请求时(向Nginx监听的端口发起请求),Nginx根据配置,若为static静态文件请求,则转向对应的文件资源并进行操作。若为动态页面请求,则通过TCP socket与gunicorn进行进程交互。

以上的安装部署操作,是将Nginx、静态资源文件、Django服务、数据库资源都部署在了同一台服务器上。

在这个部署方案中,Nginx需要占用系统资源,静态资源文件需要占用系统资源,Django、database都需要占用系统资源,当流量增加时,会发生资源争夺,导致拖慢整个系统的响应速度及性能。对于小型站点而言,这样的部署方案没有任何问题,反而因成本低会成为首选。

性能限制原因:

对于IO密集型应用而言,磁盘IO的速度远远低于CPU运算速度。

  1.改用高速硬盘。提高磁盘IO速度,提升性能。

  2.扩大内存。将需要进行磁盘IO操作的内容全加载至内存,如数据库数据。可显著提升性能。但对内存提出要求。

  3.使用cache缓存机制,Django有自带的缓存框架。

另外,关闭Keep-Alive。

    Keep-Alive为常连接/连接重用模式,它使客户端到服务器端的连接持续有效,当该客户端出现对服务器的后续访问时,keep-alive模式避免了简历或重新建立连接的过程。但此功能会导致多个客户端访问服务器时,导致连接数过多,从而阻塞,降低HTTP响应时间。

 

高并发性及高可用性。

一、业务分离

    使用独立服务器进行数据库服务运行,静态资源处理,Django服务运行,最大限度降低各个业务的资源竞争。

    业务分离后带来的可靠性要求提升,否则其中一台服务器挂了会导致全线瘫痪,提出了高可用性要求。

二、服务器集群化

    通过多个实例并行运行,使用资源来换取高可用性。当一台服务器挂了之后,立刻有另一台相同功能的服务器顶上,避免业务瘫痪。热备份。

    根据不同的业务要求进行对应的集群化优化方案,如数据库集群的连接池及数据库备份。

    Django的集群化对负载均衡提出了要求,需要根据各Django服务负载来分配请求分发,当某一台Django服务器挂了的时候可以将其屏蔽起来。注:Django服务集群化后,尤其是关闭常连接后,如何保证会话识别?

三、负载均衡

    负载均衡可以通过硬件实现,也可以通过软件实现。硬件实现的成本较高,但性能好,很多服务公司都提供专用的硬件均衡器。软件实现的成本相对可控,但是性能上没有硬件来的好,依赖于负载均衡算法。

    软件如Nginx等可实现负载均衡,挂接多个Django服务。

    当单个均衡器无法满足性能要求时,也可以增加均衡器来部署。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值