Python Web應用部署方式:Django+Gunicorn+Gevent+nohup+Nginx


 

前期准備

更新apt-get

apt-get update

安裝pip

sudo apt-get install python-pip

安裝Django Gunicorn Gevent

gunicorn:高性能WSGI服務器;
gevent:把Python同步代碼變成異步協程的庫;
sudo pip install django gunicorn gevent

確保安裝Nginx,及server最簡配置

server {
        listen   80;
        server_name 服務器ip;
        access_log  /var/log/nginx/access.log;

        location / {
                proxy_pass http://127.0.0.1:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

以上是最簡單的Nginx配置,目的是為能跑起來就行,更多其他詳細配置還請參照其他文章。

 

啟動

Gunicorn方式

Gunicorn:一個開源Python WSGI UNIX的HTTP服務器,Github倉庫地址在這,傳說速度快(配置快、運行快)、簡單,默認是同步工作,支持Gevent、Eventlet異步,支持Tornado,官方有很詳細的文檔可以參閱。

需要在你的Django項目的settings.py中的INSTALLED_APPS加入:gunicorn

INSTALLED_APPS = [
    ...
    ...
    'gunicorn',  # 部署用
]
Gunicorn啟動語法:gunicorn --worker-class=gevent 項目名.wsgi:application
  • –worker-class 指定工作方式,這里我用的gevent 如果提示You need gevent installed to use this worker則表示你還沒有安裝 gevent。
  • 項目名.wsgi:application 這里是需要指定django的項目名,你找到wsgi文件,就知道項目名是什么了,wsgi文件就是在Django創建項目的時候會自動生成對應名字文件夾中的wsgi.py。

 

 

nohup方式

nohup是一個 Linux 命令,搭配 & 來不掛斷地運行某條命令達到后台執行的效果,默認會在根目錄生成一個 nohup.out 文件用來記錄所有的 log 信息,也可以重定向到其他位置。這里我們用它來執行gunicorn,來保持 gunicorn 進程不會被掛斷。

不使用gunicorn配置文件(需進入項目目錄)

nohup gunicorn --worker-class=gevent 項目名.wsgi:application -b 127.0.0.1:8000&

  • –worker-class來指定工作方式為gevent,-b指定地址和端口號。
  • 在尾部加上&(and)字符表示后台運行
  • 執行這條命令后可以用ps命令查看進程,就能看到gunicorn了

使用配置文件方式

gunicorn.conf.py:
import multiprocessing

bind = "127.0.0.1:8000"   #綁定的ip與端口
workers = 4                #進程數
errorlog = '/home/xxx/xxx/gunicorn.error.log' #發生錯誤時log的路徑
accesslog = '/home/xxx/xxx/gunicorn.access.log' #正常時的log路徑
#loglevel = 'debug'   #日志等級
proc_name = 'gunicorn_project'   #進程名
nohup gunicorn --worker-class=gevent 項目名.wsgi:application -c /home/xxx/xxx/gunicorn.conf.py& 



supervisor方式
supervisord.conf :
[program:項目名]
autorestart=true
command= 這里寫上面gunicorn 的command
directory= 網站所在的目錄
process_name= top 中顯示的進程名
redirect_stderr=true
stdot_logfile=log文件

啟動supervisor 用命令

  • supervisord -c /etc/supervisor/supervisord.conf 
關閉supervisor 用命令
  • supervisorctl shutdown 
如果先建的djangoblog.conf(控制文件),在使用啟動命令后這些經過配置的程序也會啟動
 
啟動程序
  • supervisorctl start program_name 
這里的program的name是配置文件ini中的[program:name],所以這里的program_name是djangoblog
 
關閉程序
  • supervisorctl stop program_name 
 
刷新配置文件 如果啟動后,修改了ini文件,可以通過reload命令來刷新
  • supervisorctl reload 
 
查看supervisor的運行狀態
  • ps -efH|grep supervisor

Start

好了,以上就是整個服務器的配置了。然后我們重啟下Nginx,刷新頁面就能看到你的Django App了。

sudo service nginx restart


免責聲明!

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



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