本人的服務器環境爲Ubuntu14.04,使用的是Python3.4版本,而且安裝有pip(Ubuntu中Python3配合的是pip3),而且以管理員身份運行,若是是普通用戶,請切換管理員權限(sudo)。 html
gunicorn須要搭配nginx使用,那麼二者的做用究竟是什麼。 python
1.gunicorn簡介:gunicorn是一個Python WSGI UNIX服務器。WSGI(Web Server Gateway Interface)是Web服務網關接口,位於WEB應用層和WEB服務器層之間。在這裏WEB應用固然是指Python解釋器及Django編寫的程序,而WEB服務器指的是Nginx,因此Gunicorn位於二者之間。 linux
2.Nginx簡介:Nginx是反向代理服務器,接收外部Internet網絡請求,並將請求轉發給內部網絡的WSGI,並將響應信息反饋給外部Internet用戶。因此gunicorn就是起到溝通做用,將Django和Nginx聯繫起來,也就是咱們說的網關做用。 nginx
在這裏咱們使用的是Django最新版本1.8.4,固然,你也能夠選擇其餘版本。 web
#pip3 install Django==1.8.4 shell
#pip3 install gunicorn django
#apt-get install python-dev nginx 服務器
1.建立Django項目 網絡
建立mysite項目 session
#django-admin.py startproject mysite
#cd mysite/
建立home應用
# python3 manage.py startapp home
2.設置setting.py文件
添加app,須要添加gunicorn和home(你本身設置的應用名)兩項。
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# add app
'bugapp',
'gunicorn',
)
3.運行gunicorn
#nohup gunicorn mysite.wsgi:application -b 127.0.0.1:1010&
nohup是後臺運行指令,詳細請查看:《nohup-真正的shell後臺運行》
固然,你也能夠參考《鳥哥的linux私房菜(第三版)》,第17章第2節《脫機管理問題》
運行後可tail查看nohup.out文件,gunicorn的運行狀況會輸出到這個文件中。
4.查看端口
#netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5414/nginx
tcp 0 0 127.0.0.1:1010 0.0.0.0:* LISTEN 5131/python3
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 30237/sshd
很明顯,gunicorn已經運行起來了,使用curl測試一下:
#curl 127.0.0.1:1010
這時候若是返回一個HTML頁面,說明gunicorn運行成功。接下來就是將gunicorn的WEB數據發送到發向代理服務器Nginx了,並由它發佈到Internet上接收訪問。
4.配置Nginx
打開Ngnix配置文件/etc/nginx/site-available/default文件,建議提早將原文件作個備份。將該文件修改爲一下內容:
1 server{
2 listen 80;
3
4 server_name www.edse.cn;
5 location / {
6 proxy_pass http://127.0.0.1:1010;
7 proxy_set_header Host $host;
8 proxy_set_header X-Real-IP $remote_addr;
9 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
10 }
11
12 location /static/{
13 root /data/testweb;
14 }
15 location /media/{
16 root /data/testweb;
17 }
18 }
保存後測試一下配置文件:
# nginx -t
nginx: [warn] conflicting server name "www.edse.cn" on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
OK了!
5.最後重啓服務器
#service nginx restart
修改過Django代碼後,須要從新創建gunicorn鏈接,不然頁面仍是維持代碼變動前的狀態。固然咱們能夠採起兩種方法:
1.你能夠KILL掉gunicorn進程,而後從新創建。可是費時費力,太麻煩,若是你在測試代碼頻繁變動,那無疑是巨大的工做量。
2.其實在gunicorn的19.0版本後已經加入了--reload選項,只要在運行gunicorn添加進去就能夠了。以下:
#nohup gunicorn mysite.wsgi:application -b 127.0.0.1:1010 --reload&
加入--reload字段,就能夠實時顯示變動代碼了。
參考文獻: