Django專案uwsgi+Nginx保姆級部署教程實現
寫在最前:
非常抱歉的是,因為突如其來的疫情,我的hadoop系列斷更了,很難受,因為我的分散式環境在學校,我的筆記本配置帶不起來,程式碼跑不起來我是不敢寫部落格的,然後寒假在家寫程式碼也沒啥意思,看了非常多的書,把計網和作業系統重新學了一遍。因為實習的需要,未來我更多的技術可能在Python這塊,但是java相關的內容我也會努力保持更新,同時也會出更多的入門教程給大家謝謝大家。
背景:
最近在學習django的過程中,用django做了一個小demo,所以試試看能不能部署到伺服器上,自己順便也熟悉一下Django整個部署的流程,因為之前學習flask的時候,就使用的uwsgi來作為python web伺服器來部署的,所以這次也就選擇了nginx+uwsgi這樣的一個組合。
當時買完雲伺服器之後,就順手把寶塔裝上了,之前用寶塔部署php專案是真的很容易,所以就偷懶試試寶塔能不能部署django,苦試一個小時,無果,遂放棄,還是老老實實用原生的uwsgi配合Nginx來部署吧。然後下面的流程我會爭取把有可能是坑的地方重點標註出來,將來如果發部落格或者自己需要再次部署的時候,也可以少寫很多配置檔案。
環境:
系統版本
:centos7.5
python
版本:3.6.5
nginx
版本:1.16.1
uwsgi
版本:2.0.18
如環境不同,還請查閱其他資料另行配置。
環境準備:
在部署之前,請確保你的linux伺服器正確安裝了對應的python版本,如果需要python3版本,請自行查閱資料進行升級安裝。
首先為了更好的獨立部署,避免對其他的專案產生干擾,我們需要安裝python 虛擬環境:
sudo pip install virtualenv sudo pip install virtualenvwrapper
virtualenvwrapper 是virtualenv的擴充套件管理包,可以將所有的虛擬環境整合在一個目錄下。
配置虛擬環境:
mkdir ~/.virtualenvs
開啟.bashrc:
sudo vim ~/.bashrc
在.bashrc的末尾增加下面內容:
export WORKON_HOME=$HOME/.virtualenvs # 所有虛擬環境儲存的目錄 source /usr/local/python3/bin/virtualenvwrapper.sh
注意!:這裡的/usr/local/bin/virtualenvwrapper.sh只是針對於我當前系統環境的一個位置,並不是所有的伺服器都是在這個位置,如果自己不知道virtualenvwrapper.sh在哪裡,可以搜尋檔案來找到它在系統中的位置,並且修改.bashrc。
啟用配置檔案:
source ~/.bashrc
這個時候如果不報錯,就代表我們的虛擬環境配置成功了,一般常見的報錯就是virtualenvwrapper.sh檔案找不對。
建立虛擬環境:
找一個你自己覺得能記住的地方,新建一個env 資料夾:
cd /www mkdir env cd env #進入env目錄
新建一個虛擬環境:
mkvirtualenv -p /usr/bin/python3 orange_env # my_env是虛擬環境的名稱
注意:如果你的軟連線/usr/bin/python3沒有的話,會報錯誤,找不到/usr/bin/python3,這個時候就需要你自己新建一個軟連線:
如果報錯:
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 路徑要改成自己的python安裝路徑
之後便可以進入我們的虛擬環境了:
source /www/env/orange_env/bin/activate
進去虛擬環境之後,前面會出現一個括號,裡面是你虛擬環境的名字:
(orange_env) [root@iz2ze1cvux96riiwfh05qqz ~]#
在虛擬環境中安裝uwsgi:
pip install uwsgi
退出虛擬環境:
deactivate
再次在主環境中安裝uwsgi:
pip install uwsgi
注意:如果你有其他的依賴,比如django,msqlclient這些,記得一定要在虛擬環境裡pip安裝一下。
部署過程:
找一個你認為比較合適的地方,新建一個資料夾,將你的Django專案上傳進去:
以我為例:
cd /www mkdir orange
上傳解壓操作略,記得是上傳專案根目錄,就是直接帶manage.py的那個目錄。
新建一個uswgi配置檔案,uswgi支援多種配置檔案型別,比如yaml,xml,json,ini,這裡我選的是xml。
vim mysite.xml #記得mysite.xml 要和你專案的manage.py 在一個目錄下。
mysite.xml內容如下:
<uwsgi> <socket>127.0.0.1:8080</socket><!-- 內部埠,自定義 --> <chdir>/www/orange/</chdir><!-- 專案路徑 --> <module>orangeproject.wsgi</module> <!-- 一般模組名 專案名+wsgi --> <processes>4</processes> <!-- 程序數 --> <daemonize>uwsgi.log</daemonize><!-- 日誌檔案 --> </uwsgi>
安裝Nginx:
Nginx 我之前有寫過一系列的基礎入門教程,如果對安裝啟動重啟這些不是很熟練的可以看下面這篇文章:
連結: 寫給後端的Nginx初級入門教程:實戰篇
檢視nginx 配置檔案路徑:
nginx -t
記得備份nginx之前的配置檔案,然後把之前的配置全部刪了,直接加入下面內容:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 8000; server_name 你的域名; charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; uwsgi_param UWSGI_SCRIPT orangeproject.wsgi; uwsgi_param UWSGI_CHDIR /www/orange/; } location /static/ { alias /www/orange/transfer/static/; } } }
注意模組名要保持一致,而且你nginx監聽的埠不能和你django啟動的埠一樣,要不uswgi會因為nginx佔用埠啟動失敗。alias /www/orange/transfer/static/; 這個是你的靜態檔案地址,css,img這些。
檢查nginx是否配置成功:
nginx -t
重啟nginx:
nginx -s reload
之後,再次進入我們的虛擬環境orange_env中,啟動我們的uwsgi伺服器:
cd /www/orange uwsgi -x mysite.xml
然後開啟我們的本地瀏覽器,輸入:域名:8000,備案過的可以改nginx配置檔案成80。
大功告成:
到此這篇關於Django專案uwsgi+Nginx保姆級部署教程實現的文章就介紹到這了,更多相關Django uwsgi+Nginx 部署內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!