這個部署,我真的是爬了好久的坑,才爬出來,所以給大家分享一下,避免入坑。
首先我們先了解一下相關知識:
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