前期准備
更新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