Nginx+gunicorn项目部署

  当写完项目以后,常常须要将项目部署到网络服务器上,以便于能够随时进行访问(注意:项目部署以前要将debug改为false)。前端

  通常来讲,部署项目到服务器须要使用中间代理服务器,通常咱们使用Nginx。做为We服务器:相比Apache,Nginx使用资源更少,支持更多的并发链接,体现更高的效率,使Nginx倍受欢迎,可以支持高达50000个并发链接数的响应。做为负载均衡服务器:Nginx既能够在内部直接支持Redis和PHP,也能够支持做为HTTP代理服务器对外进行服务,Nginx使用C编写,不管是系统资源开销仍是CPU使用效率都处理的很是优秀。Nginx安装很是简单,配置文件很是简洁,Bug很是少:Nginx启动很是容易,而且几乎能够作到24小时不间断运行,即便运行数个月也不须要从新启动。python

  gunicorn是一个被普遍使用的高性能的Python WSGI UNIX HTTP服务器,,使用pre-fork worker模式,具备使用很是简单,轻量级的资源消耗,以及高性能等特色。linux

为何要同时使用nginx和gunicorn?nginx

  gunicorn 能够单独提供服务,但生产环境通常不这样作。首先静态资源会占用很多的请求资源,而对于 gunicorn 来说它自己更应该关注实际业务的请求与处理而不该该把资源浪费在静态资源请求上;此外,单独运行 gunicorn 是没有办法起多个进程多个端口来负载均衡的。nginx 的做用就是弥补以上问题,首先做为前端服务器它能够处理一切静态文件请求,此时 gunicorn 做为后端服务器,nginx 将会把动态请求转发给后端服务器,所以咱们能够起多个 gunicorn 进程,而后让 nginx 做均衡负载转发请求给多个 gunicorn 进程从而提高服务器处理效率与处理能力。最后,nginx 还能够配置不少安全相关、认证相关等不少处理,可让你的网站更专一业务的编写,把一些转发规则等其它业务无关的事情交给 nginx 作。django

  supervisor这东西,其实就是用来管理进程的。相对于咱们linux传统的进程管理方式来讲,它有不少的优点,如简单、精确、可扩展,集中式管理等等。后端

 

1、配置Nginx:

一、首先须要安装Nginx:sudo apt install nginx安全

二、在/etc/nginx/conf.d 目录下新建一个你的配置文件,如nignx.conf服务器

三、在建立的配置文件中加入如下配置网络

server{
    listen 80;
    server_name 47.94.225.12;    #写你的域名或者IP
    location / {
      proxy_pass http://127.0.0.1:12345;    #Django服务使用的端口
      proxy_set_header Host $host;    #捕获客户端真实IP
      proxy_set_header X-Real-IP $remote_addr;     #$remote_addr 表明客户端IP
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    location /static {
    alias  /home/wusir/hz_python/django_test/axf_1806/static;  #静态文件路径
    }
}
Nginx配置文件

四、配置完成后,重启Nginx,执行 :sudo nginx -s reload 并发

 

2、配置gunicorn

一、首先须要安装gunicorn:pip3 install gunicorn

二、在你的工程下新建一个gunicorn的配置文件目录,如server_confs目录,在server_confs下新建一个gunicorn的配置文件,如叫gunicorn.conf。

三、在建立的配置文件中加入如下配置

cmmand = '/home/wusir/.local/bin/gunicorn'  #gunicorn命令的绝对路径
pythonpath = '/home/wusir/hz_python/django_test/axf_1806'   #项目路径
bind = '127.0.0.1:12345'   #运行服务的IP和端口
workers = 3   #开几个线程来执行请求
gunicorn配置文件

四、在包含manage.py的同级目录下执行下面命令来运行项目。

gunicorn 工程名.wsgi -c gunicorn配置文件夹/配置文件

 

3、配置supervisor

一、首先须要安装supervisor,命令为:安装:sudo apt install supervisor。

二、在/etc/supervisor/conf.d 目录下新建你的配置文件,如叫axf.conf。

三、在配置文件中加入如下配置:

[program:axf_1806]
directory=/home/wusir/hz_python/django_test/axf_1806     #项目路径
command=/home/wusir/.local/bin/gunicorn axf_1806.wsgi -c server_confs/axf_gunicorn.conf    #须要执行的命令
autostart=true         #在supervisord启动的时候也自动启动
startsecs=10           #启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true       #程序退出自动重启,默认unexpected,表示进程意外杀死才重启
startretries=3        #启动失败自动重试次数,默认是3
user=wusir           #哪一个用户启动进程,默认是root
priority=999          #进程启动优先级,默认999,值小的优先启动
redirect_stderr=true       #把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=100MB     #stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20     #stdout 日志文件备份数,默认是10
stdout_logfile=/var/log/supervisor_logs/axf.log     #日志文件路径,当指定目录不存在        
                                                                #时没法正常启动,因此须要手动建立目录
stopasgroup=false   #默认false,进程被杀死时,是否向该进程组发stop信号,包括子进程
killasgroup=false   #默认false,进程被杀死时,是否向该进程组发送kill信号,包括子进程
    
supervisor配置文件

PS:一、当咱们修改了原码的时候就要重启咱们的supervisor。

   二、supervisor 不支持python3 也就是默认python对应版本是python2。

   三、若是启动问题 先去看看log有没有问题,log的位置 stdout_logfile=/var/log/supervisor_logs/axf.log

   四、最好不要在配置文件里面加汉语注释。

   五、若是在程序配置中加入了环境变量,如

须要在配置文件中加入下面这行

gunicorn的经常使用命令:

supervisord                     #启动supervisor
supervisorctl reload            #修改完配置文件后从新启动supervisor
supervisorctl status            #查看supervisor监管的进程状态
supervisorctl start 进程名       #启动XXX进程
supervisorctl stop 进程名        #中止XXX进程
supervisorctl stop all          #中止所有进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl update            #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启

 

PS:作负载均衡的配置

在Nginx的配置文件中加入upstream的如下配置:

upstream axf_1806{
    server 127.0.0.1:12345;
}
server{
    listen 80;
    server_name 47.94.225.12;

    location / {
      proxy_pass http://axf_1806;     #配置好了之后IP能够换成上面取的项目名称
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    location /static {
    alias  /home/wusir/hz_python/django_test/axf_1806/static;
    }
}
负载均衡配置

补充:能够配置多个机器,便可以配置多个server,后面还能够加上每台机器配置的权重,达到负载均衡的效果。

例:server 127.0.0.1:12355 weight=3

相关文章
相关标签/搜索