如何將django項目用Nginx部署到伺服器?
剛開始學,百度找了好幾個教程,跟著做但卻都不行。
Ubuntu上通過nginx部署Django筆記 - j_hao104 - 博客園
我前兩天剛搞過,遇到很多坑。把過程寫了下來,希望對你有用吧
這裡有一個 step by step 的教程,http://zmrenwu.com/post/20/
儘管如此,部署環節是 django 開發最複雜的環節,即使嚴格按照教程來,依然有可能操作失敗,如果遇到問題,可以參考一下文章下面的評論,很多熱心的網友把他們遇到的問題和解決方案都分享了出來。
看官方文檔
Deploying Django
最權威!
之前也是頭疼這件事情,現在再不頭疼了
Liunx之Ubuntu下Django+uWSGI+nginx部署_Linux_陳新明
本文採用uwsgi+nginx來部署Django。
這種方式是將nginx作為伺服器前端,將接受web所有的請求,統一管理。Nginx把所有的靜態請求自己處理(靜態文件處理是ngInx強項),然後把所有非靜態請求通過uwsgi傳遞給Django,由Django來處理,從而完成一次web請求。
一、uWSGI
1. 安裝
pip install uwsgi
2. 測試uWSGI是否安裝成功
在終端中輸入以下命令查看uwsgi的版本號,如果輸出正常,說明uswgi已安裝成功
$ uwsgi --version
2.0.15
3. 編寫一個簡單的wsgi應用測試uwsgi是否能正常使用
首先創建一個test.py文件(命令:vim test.py)
# test.py
def application(env, start_response):
start_response("200 OK", [("Content-Type","text/html")])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
4.運行uwsgi:
uwsgi --http :8000 --wsgi-file test.py
參數解釋:
http :8000表示使用http協議,埠號為8000,
wigi-file則表示要運行的wsgi應用程序文件。
uwsgi運行後打開瀏覽器,訪問http://127.0.0.1:8000/ ,或者是相應伺服器地址的8000埠,就可以看到hello world 頁面了。
運行截圖:
如果想要運行項目來測試
# uwsgi --http :8000 --chdir 項目路徑 -w 項目.wsg --static-map=/static=static
uwsgi --http :8000 --chdir /home/teacher/ -w teacher.wsgi --static-map=/static=static
uWSGI常用命令:
uwsgi --chdir=/path/to/your/project
--module=mysite.wsgi:application
--env DJANGO_SETTINGS_MODULE=mysite.settings
--master --pidfile=/tmp/project-master.pid
--socket=127.0.0.1:49152 # 可以ip地址,也可以是文件
--processes=5 # 進程數量
--uid=1000 --gid=2000 # 如果是root用戶,uwsgi可以有刪除許可權
--harakiri=20 # 一個請求超時時間
--max-requests=5000 # 一個工作進程最大請求數
--vacuum # 退出時清楚環境
--home=/path/to/virtual/env # virtualenv的路徑
-- static # 做一個映射,指定靜態文件
--http # 這個就和runserver一樣指定IP 埠
--daemonize=/var/log/uwsgi/yourproject.log # 日誌
Liunx之Ubuntu下Django+uWSGI+nginx部署_Linux_陳新明
##### 安裝nginx,django
##### 在項目下創建mysite_uwsgi.ini:
添加下面的內容:
```
# myweb_uwsgi.ini file
[uwsgi]
# Django-related settings
socket = :8000
# the base directory (full path)
chdir = /home/www/mysite # Django s wsgi file
module = myweb.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
```
#### 配置/etc/nginx/nginx.conf:
```
http{
server
{
listen 80;
server_name blog.nothing.ml
charset UTF-8;
access_log /var/log/nginx/mysite_access.log;
error_log /var/log/nginx/mysite_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/www/mysite/static;
}
}
....
```
##### 重啟nginx:
&>/etc/init.d/nginx restart
##### 運行,在mysite_uwsgi.ini所在文件下輸入:
&>uwsgi --ini mysite_uwsgi.ini
##### 參考:
(通過Nginx部署Django(基於ubuntu))
(NGINX配置多域名)
最好的教程在這裡,一次成功
Nginx + uWsgi 部署 Django生產伺服器
http://www.bilibili.com/video/av10247256
http://www.bilibili.com/video/av10244432
最精彩的部分就在於,作者將背後的工作流程和原理用下面的兩張圖講明白,這是其他教程沒有的。
下面是視頻作者參考的文章(文章裡面有詳細的步驟和代碼,官方的教程很靠譜)
Setting up Django and your web server with uWSGI and nginx
http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html?highlight=django
比較主流的方法是使用 WSGI (或者 FastCGI),比如 django + uwsgi, django + gunicorn。
你可以搜索一下上面兩種配置方式,很多的, 還有,記得用 Google。
部署的時候確實會遇到很多問題,這些問題還是要靠自己調查調試。
也可以通過 tornado 的 WSGI 模塊將 django 封裝一下然後跑在 tornado server 上,但是由於靜態文件的處理和對 tornado 進程監控的需求還需要搭配 supervisord,還有 gevent 聽說也很不錯。
如果是 windows server 的話比較常用的好像是 nginx + flup +django, 這個我沒有用過。一步步來,首先你需要學習nginx如何做反向代理,比如利用proxy_pass來綁定一個UNIX套接字都是可以的。讓assest走Nginx其他的交給uwsgi。
uwsgi
實在不行,直接proxy_pass
看官方文檔
之前部署也遇到很多坑
強烈要求注意部署工具版本和django版本!
遇到和教程有出入的命令善用 help
這個教程是work的,我試過了,最好再加個supervisor來守護進程。
Django Nginx+uwsgi 安裝配置
Nginx+uwsgi+Django伺服器部署
為什麼要查教程?
uwsgi的官方文檔不好嗎?
推薦閱讀:
※PHP 比 Python 牛在哪?
※requests 和 scrapy 在不同的爬蟲應用中,各自有什麼優勢?
※Python 寫的爬蟲爬久了就假死怎麼回事?