nginx--gunicorn 部署Web服务

gunicorn 安装

pip install gunicorn
  • gunicorn 指定服务器后台运行
gunicorn 项目名.wsgi -b 0.0.0.0:9999
  • 查看正在运行的进程
netstat -tpl
  • 进入我自己的django项目中配置(创建)一个gunicorn.conf.py 的配置文件
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing

bind = "127.0.0.1:8080"   #绑定的ip与端口
backlog = 512                #监听队列数量,64-2048
chdir = '/root/sites/DjangoBlog'  #gunicorn要切换到的目的工作目录**
worker_class = 'sync' #使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = multiprocessing.cpu_count()
#workers = 4 # multiprocessing.cpu_count()    #进程数
threads = 16 #multiprocessing.cpu_count()*4 #指定每个进程开启的线程数
loglevel = 'info' #日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'

accesslog = "/root/sites/DjangoBlog/log/gunicorn_access.log"      #访问日志文件  **
errorlog = "/root/sites/DjangoBlog/log/gunicorn_error.log"        #错误日志文件  **
# accesslog = "-"  #访问日志文件,"-" 表示标准输出
# errorlog = "-"   #错误日志文件,"-" 表示标准输出

proc_name = 'fof_api'   #进程名

  • 后台运行服务
旧版本命令
gunicorn python:gunicorn.conf.py
新版本          (-c 表示指定的文件 , -D 表示后台运行)
gunicorn -c gunciorn.conf.py 项目名称.wsgi -D 

nginx

不同的nginx版本配置不同
源码安装会在/usr/local/ 下 , yum 安装会自动分配目录

  • nginx的配置文件: 我们也可以单独再创建一个文件下的conf, 在Nginx本身的conf文件中吧serve剪切到 新创建的里面,在本身自带的conf文件中include路径指定新创的conf (*.conf) 在新创建的conf中添加
server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        charset utf-8;
       # root         /usr/share/nginx/html;
        root         /root/message/_book;
        # Load configuration files for the default server block.

        access_log  /var/log/nginx/build-access.log;                                        
        error_log  /var/log/nginx/build-err.log;                                            
        location = /favicon.ico { access_log off; log_not_found off; }                      
        location /static/ {                                                                 
        #静态文件如js,css的存放目录                                                          
                alias /root/Code/django-log/DjangoBlog-master/sites-data/;                  
        }                                                                                   
        location / {                                                                        
                                                                                            
                proxy_pass http://0.0.0.0:8080; # 这里要配合启动文件使用                      
                proxy_redirect     off;                                                     
                proxy_set_header   Host                 $http_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;                            
        }                                                                                   


        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

  • 重新启动Nginx服务
systemctl restart nginx.service
  • 杀死gunicorn进程
killall gunicorn
  • 现在修改gunicorn.conf.py 绑定的端口,因为风险大
  • 再次启动gunicorn
gunicorn -c gunicorn.conf.py 项目名称.wsgi -D

Django

  • 打开manage.py文件有一个收集静态资源的文件
python manage.py collectstatic (收集所有的静态资源到某个文件下(该文件在settings里有指定【STATIC_ROOT = os.path.join(SITE_ROOT, 'sites-data')
】))
  • 接着在nginx 新创的conf中指定静态资源收集的路径 然后重新加载nginx配置文件
指定: alias /root/Code/django-log/DjangoBlog-master/sites-data/;
重新加载: systemctl reload   然后页面也就会跟指定的路径进行映射,出现效果

nginx + gunicorn 部署Django博客访问速度比较快

  • nginx负责静态资源 gunicorn负责动态资源
原文地址:https://www.cnblogs.com/xinzaiyuan/p/12105899.html