Python+Django+Nginx+Uwsgi 詳細部署過程(爬坑過程,可以瞭解各個軟件的執行流程,看過)

這個部署,我真的是爬了好久的坑,才爬出來,所以給大家分享一下,避免入坑。

首先我們先了解一下相關知識:
wsgi:
 
一種實現python解析的通用接口標準/協議,是一種通用的接口標準或者接口協議,實現了python web程序與服務器之間交互的通用性。 
利用它,web.py或bottle或者django等等的python web開發框架,就可以輕鬆地部署在不同的web server上了;
 
uwsgi:
 
同WSGI一樣是一種通信協議 
uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型,它與WSGI相比是兩樣東西。
 
uWSGI :一種python web server或稱爲Server/Gateway 
uWSGI類似tornadoweb或者flup,是一種python web server,uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器,負責響應python 的web請求。 
因爲apache、nginx等,它們自己都沒有解析動態語言如php的功能,而是分派給其他模塊來做,比如apache就可以說內置了php模塊,讓人感覺好像apache就支持php一樣。 
uWSGI實現了wsgi協議、uwsgi協議、http等協議。 Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。
其次瞭解一下項目流程:
1.首先客戶端請求服務資源,
 
2.nginx作爲直接對外的服務接口,接收到客戶端發送過來的http請求,會解包、分析,
 
如果是靜態文件請求就根據nginx配置的靜態文件目錄,返回請求的資源,
 
如果是動態的請求,nginx就通過配置文件,將請求傳遞給uWSGI;uWSGI 將接收到的包進行處理,並轉發給wsgi,
 
3.wsgi根據請求調用django工程的某個文件或函數,處理完後django將返回值交給wsgi,
 
4.wsgi將返回值進行打包,轉發給uWSGI,
 
5.uWSGI接收後轉發給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)。
 
*注:不同的組件之間傳遞信息涉及到數據格式和協議的轉換
接下來請看詳細的安裝與配置步驟:
1.檢測yum是否完好:yum list

2.安裝python需要的依賴包:yum  -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make    (手敲,任何地方都別複製)


3.下載python包:

linux系統默認安裝了python

我們需要的版本是python 3.6.2,在centos上進行python2和3並存

wget https://www.python.org/ftp/python /3.6.2/Python-3.6.2.tar.xz

在根目錄的opt下可以查看下載好的python3.6.2的壓縮包

4.在opt下解壓python包: tar -Jxvf Python3.6.2.tar.xz

5.進行安裝路徑配置並編譯安裝:

首先切換路徑:cd Python3.6.2

其次進行路徑配置: ./configure prefix=/usr/local/python3

最後編譯安裝:make && make instal  (需要挺長時間的)

6.進入根目錄下的usr/local下創建愛你python3和pip3的軟鏈接:

7.安裝django

8.安裝uwsgi

9.創建uwsgi的軟鏈接:

先切入到opt下,然後創建uwsgi的軟鏈接:

10.遷移我們自己的django項目:(我的項目是MyBlog)

我用的是xftp工具:

11.測試uwsgi和django的契合:

1.首先下關閉防火牆和selinux

2.切入到我們的項目目錄下,然後用uwsgi命令啓動項目:

 --http  ip端口傳遞

   --file   uwsgi文件位置

   --static-map  靜態文件路由

 

上面我們採用的是命令的方式使用uwsgi啓動django,但是,不夠完美。我們可以構造配置文件進行操作。

12.使用uwsgi腳本啓動django

1.在/opt下創建script目錄

2.在script目錄下創建uwsgi.ini文件

3.配置uwsgi.ini文件

4.給uwsgi授權:

5.在script下啓動項目: uwsgi --ini uwsgi.ini

可以看到這樣也能啓動此項目:

13.安裝nginx:wget  http://nginx.org/download/nginx-1.12.2.tar.gz

下載成功:

14.解壓 nginx壓縮包

15.編譯安裝nginx

16.進入/usr/local下查看nginx

17.創建nginx軟鏈接

18.nginx和uwsgi通訊示意圖:

19.修改nginx的配置文件:

配置內容:(紅色的是與要修改的)

http {

    include       mime.types;

    default_type  application/octet-stream;

 

    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  logs/access.log  main;

 

    sendfile        on;

    #tcp_nopush     on;

 

    #keepalive_timeout  0;

    keepalive_timeout  65;

 

    #gzip  on;

server {

        listen       80;

        server_name  Qshop; 服務的名稱

 

        charset utf-8; 編碼格式

 

        access_log  logs/host.access.log  main; 訪問日誌

 

        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;  訪問內容的類型

 

        error_log /var/log/nginx/error.log error; 錯誤日誌,默認沒有,需要手動創建

 

        location / {

             include uwsgi_params; 加載uwsgi_params

             uwsgi_connect_timeout 30; 連接的超時時間 不要加冒號不要加冒號不要加冒號

             uwsgi_pass unix:/opt/script/uwsgi.sock; uwsgi.sock通訊的文件地址

        }

 

        location = /static/{

            alias /opt/Qshop/static; 靜態文件的目錄

            index index.html index.htm;

        }

19.啓動uwsgi和nginx(先殺死當前狀態下的uwsgi和nginx)

kill -9 uwsgi

kill -9 nginx

先啓動uwsgi

再啓動nginx:

 

20.整個過程整理下來了,我覺得是非常詳細了,希望大家不要入坑。
————————————————
版權聲明:本文爲CSDN博主「趙小七--」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43567965/article/details/89364046

來源:https://blog.csdn.net/weixin_43567965/article/details/89364046

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章