Gunicorn及Nginx的配置

(小编的环境为python3.6,django==2.1.2)

Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server(即一种服务器)。和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。

Nginx是一个高性能的静态服务器,支持负载均衡,多进程,多线程,数据压缩,日志监控,限流等多种功能。是目前比较主流的服务器

1.   gunicorn是一个python Wsgi http server, 只支持Unix系统上(Linux来源于Unix)运行

  https://gunicorn.org/

  pip install gunicorn

2. gunicorn基本配置方法

  (在项目的根目录下创建一个conf.py文件,代码如下:)

  import multiprocessing

  bind = '127.0.0.1:8001'
  workers = multiprocessing.cpu_count() * 2
  worker_class = 'gevent'     (配置前先安装 pip install gevent)

3. Gunicorn部署后静态文件的调整(即需对项目根目录下的urls.py文件修改)

  from django.contrib.staticfiles.urls import staticfiles_urlpatterns
  from django.urls import path, include
  from app.client import urls as client_urls
  from app.dashboard import urls as dashboard_urls

  urlpatterns = [
  path('client/', include(client_urls)),
  path('dashboard/', include(dashboard_urls)), 
  ]

  urlpatterns += staticfiles_urlpatterns()

3. Gunicorn启动服务

  gunicorn --config=conf.py config.wsgi:application

4. 利用supervisor做服务器进程管理

  supervisor是用python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启

  http://www.supervisord.org/

  pip install supervisor(似乎要安装在非虚拟环境外)

  安装好后在/etc/会生成一个supervisord.conf文件及一个supervisord.d文件目录,默认是没有生成配置文件的, 可以通过以下命令生成配置文件,执行以下命令来生成配置文件及文件夹:

  echo_supervisord_conf  >  /etc/supervisord.conf(该命令似乎只能在root权限下使用,  小编使用sudo无效)

  mkdir /etc/supervisord.d

         接下来对/etc/supervisord.conf文件进行修改:

  

   files是将某个文件导入进来,这里导入的是自己项目的supervisor配置文件

  

5. 配置supervisor,书写/etc/supervisord.d/*.conf所匹配到的文件代码,代码内容如下:

    (注意*.conf是你自己定义的文件名称,如小编命名为muke_video.conf,这是你的supervisor配置文件,即小编的路径为/etc/supervisord.d/muke_video.conf)

  [program:muke_video]    # 项目名称

      directory=/Users/zhangdewei/muke/python/django/lessions/lession8/muke_video_test/video

  # 项目执行的目录

  command=/Users/zhangdewei/muke/python/django/env/bin/gunicorn --config=conf.py             config.wsgi:application

  # 要执行的命令

  autostart=true

  autorestart=true

  # 遇到程序异常、报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务

  startsecs=1

  # 1s后启动

  numprocs=1

  # 启动1个进程

  stderr_logfile=/Users/zhangdewei/muke/python/django/lessions/lession8/err-web.log

  stdout_logfile=/Users/zhangdewei/muke/python/django/lessions/lession8/out-web.log

  stopasgroup=true

  killasgroup=true    #默认为false    

 // [supervisord]

 // nodaemon=true

 // [supervisorctl]

6. 启动supervisor

  supervisord -c /etc/supervisord.conf  (运行结果如下图:)

7. 查看supervisor服务状态

  supervisorctl ->进入控制台

  通过status查看服务状态,通过restart/stop/start/muke_video 对服务重启,关闭和重启。

         

   

   

  运行成功后,即可访问自己的项目:如:127.0.0.1:8001/dashboard(其中127.0.0.1:8001是由conf.py文件配置的,见步骤2,如果你的项目是在虚拟机中启动的,那么就用虚拟机中的浏览器访问自己的项目)

   

修改配置文件再次启动时会报错: Another program is already listening on a port that one of our HTTP servers is configured to
  查看supervisord正在运行的进程:
   ps -ef | grep supervisord
  杀掉所有supervisord正在运行的pid(pid是进程号)
   kill  -s  SIGTERM pid
   再重启supervisord,即 supervisord -c /etc/supervisord.conf
 
 
 
      Nginx反向代理gunicorn服务:
 
(需在root权限下执行)
brew install nginx            (mac)
apt-get install nginx         (ubuntu)
yum install nginx              (rehat & centos)
 
1.nginx配置django的方向
  每个人的安装路径都不一样,先找到nginx配置路径(使用find命令)
        小编的路径为  /etc/nginx/nginx.conf
  

    接下来配置nginx.conf文件:

   打开nginx.conf文件,添加server

    代码如下:

    server{

      listen  8080;

      location / {

        service_name www.muke.com;

        client_max_body_size 3M;

        proxy_pass http://127.0.0.1:8001;

      }

    }

    其中,listen 是监听的端口,service_name是配置你的域名(如果没有域名不加这行代码,直接通过http://127.0.0.1/dashborad访问你的项目下的dashboard),client_max_body_size是请求资源的最大容量为3M(如post请求的资源的大小不能超过3M),proxy_pass http://127.0.0.1:8001实现supervisor代理。

  在http里配置,把server加进来如下:

    

       

  nginx启动后,即可通过形如http://127.0.0.1:8080/dashboard访问项目下的dashboard,注意这次使用的是server配置的8080端口,使用supervisor配置的8001端口一样可以进行访问,形如:http://127.0.0.1:8001/dashboard

 

启动nginx:

  如果是自动安装,nginx会被自动启动起来,当书写好conf文件之后,

  进行重启  ./nginx -s reload(在nginx目录下使用这个命令)

  如果nginx初始化并没有启动,找到nginx执行命令后,执行./nginx即可启动。

 查看nginx的启动:

  ps aux | grep nginx

  

 修改.conf文件后,需对nginx重启 ./nginx -s reload   (在nginx目录下运行该指令)

原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12689563.html