今天來(lái)看下基于Django開(kāi)發(fā)的應用如何在Centos6環(huán)境部署
系統環(huán)境:Centos6.5 x64
軟件版本:Django 1.9.5 、uwsgi-2.0.13.1
nginx 安裝配置(略)請見(jiàn):http://tchuairen.blog.51cto.com/3848118/1771597
一、安裝uwsgi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 安裝有兩種方式# 1、源碼安裝# 從官網(wǎng)下載uwsgi源碼包 : http://uwsgi-docs.readthedocs.io/en/latest/# 安裝編譯需要的程序包yum install libxml2-devel libxml2 -ycd uwsgi-2.0.13.1python setup.py install# 2、使用工具直接安裝( pip or easy_install )pip install uwsgi# 如果沒(méi)有mysql庫,為保證Django正常工作,需要安裝mysql庫pip install mysql-python |
二、測試uwsgi
準備測試文件
test1.py
1 2 3 | def application(env, start_response): start_response('200 OK',[('Content-Type','text/html')]) return "uwsgi ok!" |
命令執行
1 2 3 | uwsgi --http :8001 --wsgi-file test1.py# 瀏覽器測試 IP:8001 |
三、配置uwsgi+Django
創(chuàng )建Django wsgi文件(路徑和manage.py文件同級目錄,一般安裝了Django會(huì )自帶。)
wsgi.py
1 2 3 4 5 6 7 8 | import osimport sysfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault("DJANGO_SETTINGS_MODULE", "devops.settings")application = get_wsgi_application() |
創(chuàng )建 uwsgi 服務(wù)主配置文件
uwsgi.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | [uwsgi]uid = www # 設置啟動(dòng)的用戶(hù)組gid = wwwchdir = /alidata/www/fdcode/devops # 指定項目目錄module = wsgi # 加載wsgi.py模塊master = true # 啟動(dòng)主進(jìn)程,一般設置true或 1processes = 2 # 設置啟動(dòng)的進(jìn)程數listen = 100 # 設置socket監聽(tīng)隊列大小,超出隊列的請求將會(huì )被拒絕;socket = /var/run/uwsgi/uwsgi.sock # 設置socket監聽(tīng)socket = :9090 # 設置端口監聽(tīng)pidfile = /var/run/uwsgi/uwsgi.pid # 指定pid文件vacuum = true # 當服務(wù)器退出的時(shí)候自動(dòng)刪除unixsocket文件和pid文件。enable-threads = true # 允許用內嵌的語(yǔ)言啟動(dòng)線(xiàn)程。這將允許你在app程序中產(chǎn)生一個(gè)子線(xiàn)程buffer-size = 32768 # 設置用于uwsgi包解析的內部緩存區大小為64k。默認是4k。reload-mercy = 8 # 設置在平滑的重啟(直到接收到的請求處理完才重啟)一個(gè)工作子進(jìn)程中,等待這個(gè)工作結束的最長(cháng)秒數。這個(gè)配置會(huì )使在平滑地重啟工作子進(jìn)程中,如果工作進(jìn)程結束時(shí)間超過(guò)了8秒就會(huì )被強行結束(忽略之前已經(jīng)接收到的請求而直接結束)max-requests = 5000 # 為每個(gè)工作進(jìn)程設置請求數的上限。當一個(gè)工作進(jìn)程處理的請求數達到這個(gè)值,那么該工作進(jìn)程就會(huì )被回收重用(重啟)。你可以使用這個(gè)選項來(lái)默默地對抗內存泄漏limit-as = 512 # 通過(guò)使用POSIX/UNIX的setrlimit()函數來(lái)限制每個(gè)uWSGI進(jìn)程的虛擬內存使用數。這個(gè)配置會(huì )限制uWSGI的進(jìn)程占用虛擬內存不超過(guò)256M。如果虛擬內存已經(jīng)達到256M,并繼續申請虛擬內存則會(huì )使程序報內存錯誤,本次的http請求將返回500錯誤。harakiri = 60 # 一個(gè)請求花費的時(shí)間超過(guò)了這個(gè)harakiri超時(shí)時(shí)間,那么這個(gè)請求都會(huì )被丟棄,并且當前處理這個(gè)請求的工作進(jìn)程會(huì )被回收再利用(即重啟)daemonize = /alidata/log/uwsgi/uwsgi_server.log # 使進(jìn)程在后臺運行,并將日志打到指定的日志文件或者udp服務(wù)器 |
啟動(dòng)服務(wù)
uwsgi --ini uwsgi.ini
另一種配置方式
當.ini配置文件不好用時(shí),也可以使用xml配置文件
uwsgi-socket.xml
1 2 3 4 5 6 7 | <uwsgi> <socket>127.0.0.1:8001</socket> # 設置監聽(tīng)地址:端口,如果監聽(tīng)全部地址則可以這樣寫(xiě) :8001 <chdir>/alidata/www/dev/devops</chdir> # 設置項目目錄 <module>wsgi</module> # 加載Django的 wsgi.py 模塊 <processes>2</processes> # 設置進(jìn)程數 <daemonize>uwsgi.log</daemonize> # 設置日志文件路徑</uwsgi> |
啟動(dòng)服務(wù)
uwsgi -x uwsgi-socket.xml
Nginx 配置文件
django_nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | server { listen 80; server_name abc.xxx.com; location / { rewrite ^/$ /ops01/login/ last; include uwsgi_params; uwsgi_pass 127.0.0.1:9090; } location /static { alias /alidata/www/fdcode/devops/static; }} |
uwsgi各項配置參數詳解,請參考 : http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html
聯(lián)系客服