• 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目录下运行该指令)

  • 相关阅读:
    POJ 2155 Matrix(二维树状数组)
    HDU 1280 前m大的数
    HDU 3183 A Magic Lamp(二维RMQ)
    HDU 3743 Frosh Week(归并排序求逆序数)
    POJ 2299 Ultra-QuickSort ( 归并排序 + 求逆序数 )
    HDU 1166 敌兵布阵(树状数组)
    HDU 2846 Repository(字典树)
    HDU 1896 Stones(优先队列)
    HDU 4393 Throw nails(优先队列)
    进程池
  • 原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12689563.html
Copyright © 2020-2023  润新知