玩轉Django2.0---Django筆記建站基礎十二(Django項目上線部署)

第十二章  Django項目上線部署html

  目前部署Django項目有兩種主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django。Nginx做爲服務器最前端,負責接收瀏覽器的全部請求並統一管理。靜態請求由Nginx本身處理;非靜態請求經過uWSGI服務器傳遞給Django應用,由Django進行處理並作出相應,從而完成一次Web請求。本章以Nginx+uWSGI+Django爲例講述如何在linux系統上部署Django應用。前端

12.1  按照python3node

  Centos7系統默認安裝python2.7版本,但Django2不支持python2.7版本,所以咱們須要在Centos7系統中按照Python3版本。本節主要講述如何在centos7系統中按照python3.7。python

  在安裝python3.7以前,咱們分別須要安裝Linux的wget工具、GCC編譯器環境以及python3使用的依賴組件。相關的安裝指令以下:mysql

#安裝Linux的wget工具,用於網上下載文件
yum -y install wget #GCC編譯器環境,按照python3時所需的編譯環境
yum -y install gcc #python3所使用的依賴組件
yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite*-devel mysql-devel

  完成上述安裝後,咱們使用wget指令在Python官網下載python3.7的壓縮包,wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgzlinux

#解壓python3
tar -zxvf Python-3.6.tar.gz #進入 python3.7目錄
cd Python-3.7
#依次輸入編譯指令
./configure make make install

 

12.3  部署uWSGI服務器nginx

  uWSGI是一個Web服務器,它實現了WSGI、uWSGI和HTTP等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。WSGI是一種Web服務器網關接口,它是一個Web服務器(如Nginx服務器)與Web應用(如Django框架實現的應用)通訊的一種規範。web

  在部署uWSGI服務器以前,須要在python3中安裝相應的模塊,咱們使用pip3安裝便可,安裝指令以下:sql

#安裝數據庫鏈接
pip3 install mysqlclient #按照django
pip3 install django #安裝uWSGI
pip3 install uwsgi

  按照成功後,打開本地系統的項目music,修改項目的配置文件,主要修改數據庫鏈接信息和靜態資源路徑,修改代碼以下:數據庫

#music # 設置數據庫鏈接信息
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'music_db', 'USER':'root', 'PASSWORD':'root', #改成本地系統的IP地址
        'HOST':'192.168.10.100', 'PORT':'3306', } } #靜態資源路徑
STATIC_ROOT = 'e:/music/static'

  上傳music項目到服務器

  完成上述配置後,在centos7系統中輸入uwsgi指令,測試uWSGI服務器可否正常運行,指令以下:

#/home/music是項目music的絕對路徑,music.wsgi是項目music裏面的wsgi.py文件
uwsgi --http :8080 --chdir /home/music -w music.wsgi

  指令運行後,能夠在本地系統的瀏覽器中輸入虛擬系統的IP地址+8080端口查看測試結構。在本地系統訪問http://192.168.10.100:8080/,瀏覽器就會顯示項目music的首頁信息,以下圖:

 

 

 

 

 

  uWSGI服務器測試成功後,下一步是爲項目music編寫uWSGI配置文件。當項目運行上線時,只需執行uWSGI配置文件便可運行項目music的uWSGI服務器。在項目music的目錄下建立music_uwsgi.ini配置文件,文件代碼以下:

[uwsgi] #Django-related settings
socket= :8080

#the base directory(full path)
chdir=/home/music #Django s wsgi file
module=music.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

  在centos7系統中查看項目music的目錄結構,而且在項目music的根目錄下輸入uwsgi指令,經過配置文件啓動uWSGI服務器,以下圖:

 

 

 

  注意:由於配置文件設置socket= :8080,因此啓動uWSGI服務器時,本地系統不能瀏覽項目music的首頁。配置屬性socket= :8080用於uWSGI服務器和Nginx服務器的通訊鏈接。

 

 

12.4  按照Nginx部署項目

  項目上線部署最後一個環節是部署Nginx服務器。因爲centos7的yum沒有Nginx的安裝源,所以將Nginx的安裝源添加到yum中,而後使用yum按照Nginx服務器,指令以下:

#添加Nginx的安裝源
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm #使用yum按照Nginx
yum -y install nginx

  Nginx按照成功後,在centos7上輸入Nginx啓動指令systemctl start nginx,而後在本地系統的瀏覽器中輸入centos7系統的IP地址,能夠看到Nginx啓動成功,以下圖:

 

 

 

  下一步是修改Nginx的配置文件,實現Nginx服務器與uWSGI服務器的通訊鏈接。將Centos7系統路徑切換到/etc/nginx/,打開並編輯nginx.conf文件,在nginx.conf文件中編寫項目music的配置信息。其代碼以下:

# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/
 user root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. #include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 8090; server_name 127.0.0.1; charset UTF-8; access_log /var/log/nginx/myweb_access.log; error_log /var/log/nginx/myweb_error.log; client_max_body_size 75M; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #鏈接uWSGI服務器,uwsgi_pass的端口與uWSGI設置的socket= :8080端口一致 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; uwsgi_read_timeout 2; } #設置靜態資源路徑 location /static/ { expires 30d; autoindex on; add_header Cache-Control private; alias /home/music/static/; } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }
nginx

  完成Nginx的相關配置後,在Centos7系統中結束Nginx的進程或重啓系統,確保當前系統沒有運行Nginx服務器。而後輸入Nginx指令,從新啓動Nginx服務器,Nginx啓動後,進入項目music,使用uwsgi指令運行music_uwsgi.ini,啓動uWSGI服務器。

 

  12.5  本章小結

  目前部署Django項目有兩種主流方案:Nginx+uWSGI+Django或者Apache+uWSGI+Django。Nginx做爲服務器最前端,負責接收瀏覽器的全部請求並統一管理。靜態請求由Nginx本身處理;非靜態請求經過uWSGI服務器傳遞給Django應用,由Django進行處理並做出響應,從而完成一次Web請求。

  在虛擬機上安裝Linux系統須要設置虛擬機和本地系統之間的網絡通訊、Linux輔助工具的安裝和本地系統與虛擬系統的文件傳輸設置。這部分知識屬於Linux的基本知識,若是讀者在實施過程遇到其餘問題,能夠自行在網上搜索相關解決方案。

  在不刪除舊版本Python2的基礎上按照Python3版本,實現一個系統共存兩個Python版本。安裝Python3以前必須安裝Linux的wget工具、GCC編譯器環境以及Python3使用的依賴組件,不然會致使安裝失敗。

  uWSGI服務器是由Python編寫的服務器,由uwsgi模塊實現。uWSGI服務器的啓動是由配置文件music_uwsgi.ini執行的,其做用是將uWSGI服務器與Django應用進行綁定。

  Nginx服務器負責接收瀏覽器的請求並將請求傳遞給uWSGI服務器。配置文件nginx.conf主要是想Nginx服務器和uWSGI服務器的通訊鏈接。

相關文章
相關標籤/搜索