Django的部署能夠有不少方式,採用nginx+uwsgi的方式是其中比較常見的一種方式。html
在這種方式中,咱們的一般作法是,將nginx做爲服務器最前端,它將接收WEB的全部請求,統一管理請求。nginx把全部靜態請求本身來處理(這是NGINX的強項)。而後,NGINX將全部非靜態請求經過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。前端
可見,uwsgi的做用就相似一個橋接器。起到橋樑的做用。python
Linux的強項是用來作服務器,因此,下面的整個部署過程咱們選擇在Ubuntu下完成。nginx
2.1 準備知識web
django數據庫
一個基於python的開源web框架,請確保本身熟悉它的框架目錄結構。
uWSGIdjango
一個基於自有的uwsgi協議、wsgi協議和http服務協議的web網關
nginx後端
經常使用高性能代理服務器
wsgi.pytomcat
django項目攜帶的一個wsgi接口文件 若是項目名叫destiny的話,此文件就位於[destiny/destiny/wsgi.py]
服務器上的nginx已經安裝好了,在/etc/nginx 目錄下,部署本身的django程序時,最好寫本身的conf配置文件,而後按照本身的配置文件啓動,配置文件寫法下面會說。安全
首先要在本身的目錄下安裝anaconda環境,安裝包在 /home/updatefiles 目錄下,是一個sh文件,啓動安裝一路回車便可,而後爲本身的項目建造虛擬環境,具體作法看這裏,建造虛擬環境後,安裝你的程序對應各類包,例如django-1.11.2等等,最後在虛擬環境中,使用pip安裝uwsgi
上面的工做都完成了,最後在虛擬環境中,使用pip安裝uwsgi
pip install uwsgi
測試uWSGI: 新建文件test.py,寫入如下內容
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World"
運行
uwsgi --http 0.0.0.0:8000 --wsgi-file test.py
若是端口占用,使用
lsof -i :8000
列出佔用端口的程序的pid號,並使用如下命令殺掉全部佔用端口的程序
sudo kill -9 pid
而後瀏覽 http://127.0.0.1:8000(或http://內網ip:8000、或http://外網ip:8000)查看效果,有」Hello World」輸出即安裝成功。
首先肯定你的django程序沒什麼問題了,再開始部署流程,每每會有但不只限於如下問題:
setting.py裏debug沒關
setting.py裏數據庫信息沒有更換爲服務器數據庫信息
setting.py裏沒有設置allow_host
setting.py裏沒有設置template或static目錄信息
首先,建議工程目錄採起這樣的結構
|--工程 | |--Django程序 |--setting
在本身的工程目錄下,創建兩個文件夾,一個是django程序,一個是setting,用來裝部署配置文件。
在setting中創建如destiny.ini的配置文件
下面是個例子(以圖書管理系統爲例,把該改的地方改爲你本身的)
# backend_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /home/yangtz/booksManage # Django's wsgi file module = booksManage.wsgi # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe),將socket寫入sock文件,安全又便捷 socket = /home/yangtz/booksManage/booksManage/booksManage.sock # ... with appropriate permissions - may be needed chmod-socket = 666 # clear environment on exit vacuum = true daemonize = /home/yangtz/booksManage/log/uwsgi.log
在setting中創建如destiny.conf的配置文件,
下面是個例子(以圖書管理系統爲例,把該改的地方改爲你本身的)
user www-data; worker_processes auto; pid /run/nginx.pid; # 若是是非root用戶,user設爲nobody events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## # backend_nginx.conf # the upstream component nginx needs to connect to upstream bookmanager { server unix:/home/yangtz/booksManage/booksManage/booksManage.sock; #讀取uwsgi生成的socket文件中的socket信息 # server 127.0.0.1:8000; # sever信息,有上邊sock文件,這個就能夠注掉了 } # configuration of the server,最重要的部分 server { # 你的服務站點掛載的端口號 listen 4020; # the domain name it will serve for server_name 192.168.100.18; # 通常寫你服務器的ip或你的域名 charset utf-8; # access_log /home/yangtz/webback/backend/log/nginx_access.log; # error_log /home/yangtz/webback/backend/log/nginx_error.log; # max upload size client_max_body_size 75M; # adjust to taste # Finally, 設置總目錄,實際就是映射到uwsgi的socket location / { uwsgi_pass bookmanager; include /etc/nginx/uwsgi_params; # the uwsgi_params file you install } # 若是有media或者靜態文件須要掛載就加上,先後端各自分開的,不加或者注掉就行 # Django media # location /media { # alias /path/to/your/mysite/media; # your Django project's media files - amend as required # } # location /static { # alias /home/yangtz/webback/backend/static; # your Django project's static files - amend as required # } } }
最後啓動uwsgi和nginx
uwsgi --ini /×××/你的工程/setting/destiny.ini
nginx -c /×××/你的工程/setting/destiny.conf (若是權限問題,你是root的話,能夠在前面加sudo)
若是是非root用戶,不能listen 1024如下的端口。
那麼只好,在你的conf文件中配置user nobody; listen <1024+>;
舒適提示:
使用 lsof -l 查看端口占用
kill 進程號 (殺掉進程,只能kill本身的進程)
前端代碼部署只需將包含前端代碼文件夾放到 tomcat/webapps下,而後到tomcat/bin裏啓動 ./startup.sh便可