基于git搭建djang
服务器:腾讯云 Ubuntu 16.04.4
- 先sudo apt-get update sudo apt-get upgrade
- 确认已安装python3环境。
~$ python3
如果响应,则有python3
- 确认已安装python3的pip
pip3
若没有安装,则通过sudo apt-get install python3-pip
- 安装git
sudo apt-get install git
设置全局参数
git config –global user.name “name”
git config –global user.email email@xx.com
- 通过pip方式安装virtualenv
使用pip3 install virtualenv 安装在python3环境下,不要安装在python2环境下
- 使用virtualenv新建python虚拟环境
python3 –m virtualenv 虚拟环境名
当然也可以使用virtualenv的方式指定python解释器版本,都可以使用
激活虚拟环境,进入对应的bin文件后
source activate
- 使用git clone方式下载下项目代码
git clone 项目的http链接 链接通过码云管理
- 新建git remote
git remote add gitee git@gitee.com:qiuyfchina/zmrenLearn.git
- 安装依赖库。
pip install –r requestion.txt
- 安装nginx
sudo apt-get install nginx
- 编辑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 项目目录;
}
}
- 凡是修改了nginx配置,记得重启nginx。官方文档有详细说明相关命令
sudo nginx –s reload # 重启
sudo nginx –s quit # 关闭
sudo nginx –s stop # 强制关闭
sudo service nginx start # 启动
- 启动django,注意启动的django的IP:PORT需要与nginx中设置的一致,即代理目标相同,否则nginx代理不过去。
- 可以使用django自带的服务器runserver,但不可用于正式应用,仅用于开发。正式应用可使用gunicorn。
gunicorn –bind IP:port app_name.wsgi:application
- 可以通过设置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服务。
当单个均衡器无法满足性能要求时,也可以增加均衡器来部署。