本文用來記錄Django部署的一些筆記,文中描述的系統環境爲Ubuntu,採用的服務器爲nginx以及用uwsgi來鏈接Django,這也是目前Django比較主流的部署套餐。html
瀏覽器發起web請求<——>nginx接收請求<——>uwsgi處理請求<—–>django程序python
安裝nginxlinux
sudo apt-get install nginx
運行並查看狀態nginx
/etc/init.d/nginx start
/etc/init.d/nginx status
先安裝python-dev,不然uwsgi安裝可能會報錯web
apt-get install python-dev
安裝uwsgi django
pip install uwsgi
安裝完後添加環境變量: vim
打開文件:sudo vim .bashrc,添加如下內容:瀏覽器
export PATH=/home/nmask/.local/bin/:$PATH
而後運行source .bashrc使之生效,就能夠在命令行直接運行uwsgibash
/etc/init.d/nginx start
測試uwsgi打開http://localhost:80,能看到nginx說明nginx安裝成功。服務器
項目根目錄下建立test.py文件,寫入:
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World」
項目根目錄下運行:
uwsgi --http :8001 --wsgi-file test.py#表示運行test文件,8001端口
訪問http://localhost:8001,若是能看到hello world,說明uwsgi安裝成功。
uwsgi --http :8001 --chdir /home/nmask/mydjango --wsgi-file mydjango/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:8080
http : 協議類型和端口號經常使用選項:
以配置文件形式設置
項目根目錄下建立:myweb_uwsgi.ini文件(名字能夠是任意的),寫入:
# myweb_uwsgi.ini file [uwsgi] # Django-related settings socket = :8000#推薦將socket換成http # the base directory (full path) chdir = /home/nmask/mydjango # Django s wsgi file module = mydjango.wsgi # process-related settings # master master = true # maximum number of worker processes processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
利用uwsgi運行django:(與前面命令行的方式同樣,這樣爲了方便寫成了文件)
uwsgi --ini myweb_uwsgi.ini
配置文件參數:
打開/etc/nginx/nginx.conf,http內添加如下內容:
server { listen 8890; server_name 127.0.0.1#0.0.0.0爲任意IP都可訪問 charset UTF-8; access_log /var/log/nginx/myweb_access.log; error_log /var/log/nginx/myweb_error.log; client_max_body_size 75M; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; uwsgi_read_timeout 2; } location /static { expires 30d; autoindex on; add_header Cache-Control private; alias /home/fnngj/pydj/myweb/static/; } }
說明:這裏的8000端口是uwsgi的端口,nginx運行將開啓8890端口,也就是nginx的8890端口與uwsgi的8000端口相互通訊。
運行uwsgi
nohup uwsgi --ini myweb_uwsgi.ini &
運行nginx:
/etc/init.d/nginx start
最後訪問http://IP地址:8890,能夠看到django項目已經被運行在nginx上了。
注意:在更新Django代碼後,最好重啓一下uwsgi進程,避免出現不可預知的Bug!
#關閉uwsgi和nginx sudo nginx -s stop killall -9 uwsgi
No module named django.core.wsgi
啓動uwsgi時報如下錯誤:ImportError: No module named django.core.wsgi for uwsgi
uwsgi在python虛擬環境中啓動時,配置文件裏面要加虛擬的路徑。
打開django.init(本身建立)寫入:
home=/path/to/venv/
運行:
uwsgi --ini django.ini --protocol=http
uwsgi http is ambiguous
這也是由於虛擬環境的緣由,建議退出python的虛擬環境,而後pip install uwsgi。