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目錄下運行該指令)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM