Django部署(Centos7+nginx+uwsgi+python3+django)
開發之路,羊腸九曲,荊棘密佈,幸得高人指點,前輩填坑,一路謹小慎微,終得工程圓滿;其間填坑之經驗,開路之歷程,皆為精華,不可棄之;記錄於此,以便事後回顧,亦想於有相關開發疑惑之同學做參考之用,文中如若有錯,懇請雅正,不勝感激。
環境
系統版本
centos7
python版本
使用官方python3.6.4正式版
django版本
使用本文釋出時最新的1.11.7
uwsgi版本
使用本文釋出時最新的2.0.15
nginx版本
使用本文釋出時官網最新的1.13.7
伺服器配置
純淨的CentOS7系統預設已經安裝了Python2 ,但是我們的專案很多情況下都是Python3,所以就需要安裝Python3,並保留python2.7
python3安裝
安裝依賴
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc libffi-devel python-devel openssl-devel libcurl-dev libcurl-devel
獲取tgz包
get https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
解壓切換安裝
tar -zxvf Python-3.6.4.tgz
cd Python-3.6.4
./configure --prefix=/usr/local
./configure --enable-optimizations
make && make install
建立Python3的軟連結
ln -s /usr/local/bin/python3 /usr/bin/python3
建立Pip3的軟連結
ln -s /usr/local/bin/pip3 /usr/bin/pip3
安裝完後,輸入命令 python3即可看到安裝版本,若報錯,則安裝過程出現問題,可重新執行。
nginx安裝
本地專案是用的寶塔面板直接裝的nginx,新增站點並開放埠後,直接配置反向代理即可訪問
單nginx安裝步驟如下:
進入home目錄,執行以下命令:
wget http://nginx.org/download/nginx-1.13.7.tar.gz
下載完成後,執行解壓命令:
tar -zxvf nginx-1.13.7.tar.gz
進入解壓後的nginx-1.13.7資料夾,依次執行以下命令:
./configure
make
make install
nginx一般預設安裝好的路徑為/usr/local/nginx
在/user/local/nginx/conf/中開啟nginx.conf,加入以下內容
server {
listen 8996; #暴露給外部訪問的埠
server_name localhost;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8997; #外部訪問8996就轉發到內部8997
}
location /static/ {
alias /home/www/myproject/myapp/static/; #專案靜態路徑設定
}
}
(以上內容請保證在預設內容的大括號內)
wq儲存後進入/usr/local/nginx/sbin/目錄
執行./nginx -t命令先檢查配置檔案是否有錯,沒有錯就執行以下命令:
./nginx
終端沒有任何提示就證明nginx啟動成功,可以通過連結檢視nginx是否啟動成功:
http://192.168.1.111 (請將該ip替換成你的伺服器ip)
django配置
一般伺服器上我們會放很多站點,不同的專案對python包的支援也有所不同,所有virtualenv的使用,很方便,可以隔離專案之間的第三方包依賴
安裝虛擬環境
pip3 install virtualenv
安裝django uwsgi
pip3 install django
pip3 install uwsgi
專案部署,上傳專案檔案至伺服器,加入伺服器上的專案目錄是/home/wwwroot/myproject
進入專案目錄,生成環境
virtualenv venv
這樣會在該專案下生成一個venv的資料夾,然後啟用虛擬環境
source venv/bin/active
退出環境
deactivate
我們先不要退出環境,先安裝改專案所有的依賴,預設我們會再本地開發的時候將所有依賴寫入requirements.txt檔案
pip3 install -r requirements.txt
測試專案是否正常執行
在啟動開發伺服器之前,必須採用檢視安全組是否已經開放其埠,並且檢視防火牆是不是已經開放這個埠
python3 manage.py runserver 0.0.0.0:8081
這樣我們訪問 http://IP:8081即可看到專案
可能會出現的錯誤有 埠被佔用
解決辦法:
netstat -nlp
檢視埠情況,然後選擇一個未被佔用的埠,並在防火牆或者安全組裡放開。不要設定小於1024的埠
uwsgi安裝
前面已經安裝好了uwsgi
快速測試
uwsgi --http :8081 --home /home/wwwroot/myproject/venv --chdir /home/wwwroot/myproject -w myproject.wsgi
如果不報錯 即正常
建立配置檔案
我們不可能每次啟動都敲一遍命令,所以我們需要寫一個配置檔案將專案的相關配置固定下來,uwsgi可以有xml 和ini兩種配置檔案,我們這裡選擇ini檔案,比較方便
vi /home/wwwroot/myproject/config.ini
建立檔案,並寫入一下內容,中文註釋內容需要刪掉
#config.ini file
[uwsgi] //必須要有,不然會報找不到 section uwsgi 的錯
chdir = /home/wwwroot/myproject //專案根目錄
wsgi-file = /home/wwwroot/myproject /wsgi.py //wsgi.py檔案,該檔案一般自動生成
home = /home/wwwroot/myproject /venv //之前建立的專案的虛擬環境地質
virtualenv = /home/wwwroot/myproject /venv //之前建立的專案的虛擬環境地質
static-map=/static=/home/wwwroot/myproject /static //專案的靜態目錄,如果使用 django-admin,此項必填,不然樣式引入不了
module = myproject .wsgi:application
master = true
processes = 3
http = 0.0.0.0:8001 //專案訪問地址,如果直接nginx配置,可以用socket = 127.0.0.1:8001,需要直接訪問可改為http
vacuum = true
enable-threads = true
配置好之後,可以啟動專案
uwsgi --ini config.ini
如果專案可以訪問,及正確,一般出錯是路徑及虛擬環境問題。
開機啟動
這塊很重要,我們不能每次重啟伺服器後手動來開啟專案,很麻煩,我們可以給uwsgi建立一個系統單元,讓其自動管理我們的uwsgi服務
vi /etc/systemd/system/uwsgi.service
填入
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
ExecStart=/usr/local/bin/uwsgi --ini /home/wwwroot/myproject/config.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
開啟服務
systemctl enable uwsgi
systemctl start uwsgi
檢視狀態
systemctl status uwsgi
至此,一個django專案的部署就完成了!
參考文章
https://www.cnblogs.com/sumoning/p/7147755.html
https://www.yuwenlaoshi.com/vps/nginx/201807043635.html
https://www.cnblogs.com/levelksk/p/7921066.html