从基本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 protected]

  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 [email protected]: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服务。

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

 

 

你可能感兴趣的:(从基本ubuntu系统搭建django并部署+性能优化)