做后台开发,不光需要python的基础知识和Django框架的熟悉,还应该需要知道具体怎么部署一个服务器,包括服务器的性能,处理并发的能力,否则一个项目就算做出来也只能自我安慰。
尽管网上关于这类部署的教程有很多,但是不太详细,所以作为同样是新手的我先踩踩坑,为各位大佬垫垫底。
一、基础知识
nginx
Ngnix是一个轻量级高性能的HTTP和反向代理服务器,工作在HTTP层,具有强大的稳定、丰富的功能集、实例配置文件和低系统资源消耗。当然Apache也是个很好的选择,但我选择了Nginx,因为国内越来越多的服务器网站开始转向Nginx,从某种程度上说明Nginx可能比Apache更高性能和稳定
Gunicornn
Gunicorn 绿色独角兽是一个Python WSGI UNIX的HTTP服务器,这是一个pre-fork-worker的模型,从Ruby的独角兽(Unicorn)项目一职。改Gunicornfuwuqi大致与各种Web款回家兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。
当然,Uwsgi也是一个很好的选择,但从配置过程来看,gunicorn会比uwsgi来得简单,并且gunicorn能更好地嵌套Django。
Supervisor
Supervisor是一个用python写的进程管理工具,可以很方便的用来启动、重启关闭进程(不仅仅是Python进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程。但是这个工具只支持Python2,不支持Python3,这点在安装是就体现出来。如果你使用的是Python3,也可以安装其他类似的工具,如monit
nginx与gunicorn作用
nginx作为反向代理,工作在HTTP层,缓冲请求和响应,然后转发给指定的服务器或进程,这里是转发给gunicorn,,gunicorn将收到的请求分配到指定的具体空闲进程。nginx更强大的功能是直接处理静态文件,提供额外的访问控制,限速,限连接数等等。整个过程实现负载均衡,以及并发处理。
二、部署方法:
这里,我假设各位已经对Django有一定的了解,并且创建过一个project,所以我就直接从创建好Django项目开始!
我所部署的服务器: 腾讯云 1核 1GB内存 20GB(云硬盘) Ubuntu 16.04.1 LTS 64位
1、安装
安装之前,如果你是工作在virtualenv环境下的话,记得先进入到virtualenv环境!
如果没有使用virtualenv的话就没必要进入了。
安装gunicorn:
|
|
安装supervisor:
|
|
安装nginx:
|
|
2、配置Django
首先确保Django项目能正常访问!
然后我们来配置Django的settings.py文件,添加ALLOW_HOSTS使项目能从外网访问。一般申请云服务器都会有两个主IP地址,公网和内网IP,我们只需要添加公网IP就足够了:
settings.py :
为了方便nginx可以直接处理静态文件,我们可以预先将项目的静态文件放在一起,在项目目录下创建collectedstatic文件夹:
添加settings.py:
这里的BASE_DIR一般Django会自带有。
然后运行命令:
3、配置gunicorn和supervisor
对于gunicorn需要了解用法即可:
进入virtualenv,输入命令:
|
|
- -w3: 表示启用3个进程,官方说法 进程数 = 2*CPU个数 + 1
- -b0.0.0.0:8080: 表示绑定全网IP(即0.0.0.0),占用8080端口,这里端口号可以改其他,但请记得是那个。
如果运行失败,可能是限权不够,提升限权即可,更有可能是8080端口被占用,你可以用一下命令查看:
确实被占用的话要么kill了那个进程,要么选择其他端口。
配置supervisor:
首先生成supervisor默认配置文件:
/path/to/supervisord.conf 是存放配置文件的路径
然后打开supervisord.conf, 在最底部添加(每一行前面不要有空格,防止报错):
- projectname:项目名,也可以其他名字,用于supervisor启动;
- command:命令行,和gunicorn的命令一样
- user: 能够使用的用户,即你当前登陆服务器的用户,也可以是root
配置好后,就可以运行:
初次使用最好运行上面这条命令,相当于告知配置文件,然后就可以用下面命令方便启动、停止、重启:
启动后可以尝试从外网进行访问!
4、配置nginx
创建配置文件project.conf
一般默认放在 /etc/nginx/sites-available 中
配置:
- listen 80: 表示nginx监听80端口;
- error_log:表示debug日志,可以自己选择路径;
- proxy_pass : 表示提供服务的进程/服务器,http://0.0.0.0:8080就是gunicorn绑定的端口。
配置完成后,激活配置文件:
然后检查配置语法问题:
启动、重启、停止nginx服务器:
或者
这里有个小bug,nginx停止后再启动比较容易出现错误:
这个错误是因为nginx不正常关闭导致/run/nginx.pid文件丢失,解决方法:
到此,整个简单服务器就算部署就好了!
最后附送几个可能会用到的ubuntu命令:
查看gunicorn占用端口:
查看运行时间,健康状态和平均负载:
or
vim编辑下只读,无法保存?vim下运行命令
声明:
欢迎转载,转载时请注明出处
JacobYRJ