1. 程式人生 > >Django部署(Centos7+nginx+uwsgi+python3+django)

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