
前言
關于Django的部署,本人也踩了很多坑,這篇文章一步一步教你怎么進行部署,只需要你按照我的步驟來就OK了!這里我們使用的服務器是一個全新的服務器,沒有安裝任何東西。
基礎環境搭建步驟
★ 注意:下面的步驟都需要在root權限下進行
”
一、更新系統軟件包
yum update -y
二、安裝軟件管理包和可能使用的依賴
yum -y groupinstall "Development tools"yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
三、下載Pyhton3到/usr/local 目錄
cd /usr/localwget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
★ 這里我們安裝的Python是3.6.6版本,版本可以自己選擇,如果版本不同,后面相應的代碼也會不同!!!
”
解壓python包
tar -zxvf Python-3.6.6.tgz
進入 Python包的路徑
cd Python-3.6.6
編譯安裝到自己指定路徑-/usr/local/python3
./configure --prefix=/usr/local/python3
安裝python3
make
make install
安裝完成之后,建立軟鏈接,添加變量,這樣的好處是方便我們在終端中能夠直接使用python3
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
Python3安裝完成之后pip3也一塊安裝完成,不用再單獨安裝 這里給pip3也建立軟鏈接
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3
四、查看是否成功安裝Python3和pip3
python3 -V
pip3 -V

五、安裝virtualenv
★ 建議大家都安裝一個virtualenv,方便不同版本項目管理。虛擬環境這塊大家可以自行百度進行了解,當然也可以直接按照我下面的步驟進行
”
pip3 install virtualenv
我們也給它建立軟鏈接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
安裝成功在根目錄下建立文件夾,主要用于存放env,當然項目你也可以創建一個文件夾存放。我的項目是存放在/~/blog中的,影響不大,后面自己可以進行相關修改(我會注明)
mkdir -p /data/env
六、切換到/data/env/下,創建虛擬環境。
virtualenv --python=/usr/bin/python3 djangoenv
這里的djangoenv名稱可以自己定義但是后面步驟一定要跟你所定義的名稱相同,然后進入/data/env/djangoenv/bin
啟動虛擬環境:
source activate
進入之后,你就會發現下面紅框中的內容就是自己定義的名稱

七、虛擬環境里用pip3安django和uwsgi
pip3 install django (需要指定安裝和你項目相同的版本)
pip3 install uwsgi
★ uwsgi要安裝兩次,一次在虛擬環境中,另一次退出虛擬環境進行安裝
”
給uwsgi建立軟鏈接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
本地Django項目部署到服務器
上面的步驟已經將整個大致的環境安裝好了,接下來我們就需要把自己本地的項目搬運上來。
一、備份本地數據庫。使用Mysql數據庫,要先在本地Mysql里備份導出數據,然后在服務器上安裝Mysql數據庫
關于在centos中安裝Mysql,我會在下篇文章中寫,敬請關注(里面的坑比較多,我都會總結好的)
二、在項目目錄下把當前的環境依賴包導出到requirements.txt文件
pip freeze > requirements.txt
★ 注意:這里是在自己本地上進行的,導出你整個項目需要的依賴包
”
三、把項目源碼壓縮打包。
四、把項目上傳到服務器對應的目錄里,解壓。
這里我使用的是Fileziila軟件進行上傳的,大家可以自己去下載相關的ftp軟件,把自己項目上傳到服務器。
在服務器中解壓,可以先安裝支持ZIP的工具
yum install -y unzip zip
解壓zip文件
unzip 文件名.zip
五、創建新的虛擬環境(參照上面基礎環境步驟中的第六步)
六、進入虛擬環境,然后進入項目安裝目錄requirements.txt里的依賴包。
pip3 install -r requirements.txt
七、導入數據庫到服務器。(Mysql)
關于數據庫的導入步驟:
# 進入數據庫
mysql -u root -p
# 創建與項目中相應的名稱的數據庫
create database kulsblog;use kulsblogsource /你導入sql文件的目錄地址
八、通過python3 manage.py runserver 運行一下項目,如果能正常啟動則進行下一步,不能正常運行往上檢查。
這里需要注意使用python3來執行manage.py,否則會出現報錯情況!
九.配置uwsgi文件(重點!!!)
我的網站項目路徑是/root/blog/kuls_blog,在項目根目錄下創建 項目名稱.xml (例如我的就是 kuls_blog.xml) 編輯該文件:
<uwsgi> <socket>127.0.0.1:8000</socket> <!-- 內部端口,自定義 --> <chdir>/root/blog/kuls_blog</chdir> <!-- 項目路徑 --> <module>kuls_blog.wsgi</module> <!-- mysite為wsgi.py所在目錄名--> <processes>4</processes> <!-- 進程數 --> <daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
★ 注意里的kuls_blog,這個是wsgi.py所在的目錄名。大家記得仔細看我的注釋進行填寫!!!
”
十、安裝nginx和配置nginx.conf文件
進入home目錄,執行下面命令,我這里安裝的是1.13.7版本。
cd /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
在/usr/local/nginx/conf/中先備份一下nginx.conf文件,防止我們出錯。
cp nginx.conf nginx.conf.bak
然后打開nginx.conf,把原來的內容刪除,直接加入以下內容:
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;server {listen 80;server_name 127.0.0.1:80; #改為自己的域名,沒域名修改為127.0.0.1:80charset utf-8;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8000; #端口要和uwsgi里配置的一樣uwsgi_param UWSGI_SCRIPT kuls_blog.wsgi; #wsgi.py所在的目錄名+.wsgiuwsgi_param UWSGI_CHDIR /root/blog/kuls_blog; #項目路徑}location /static/ {alias /root/blog/kuls_blog/static/; #靜態資源路徑}}
}
★ 大家一定仔細看每個參數后面的注釋,這里容易出錯!!!這里的參數一定要和之前配置的xml文件相對應
”
進入/usr/local/nginx/sbin/目錄 執行 ./nginx -t 命令先檢查配置文件是否有錯,沒有錯就執行以下命令:
./nginx
終端沒有任何提示就證明nginx啟動成功。
★ uwsgi和Nginx兩個配置,在整個部署里面是非常非常重要的,如果出現報錯,一定往上面翻一翻,看看有沒有哪個步驟出現問題。
”
重點
如果修改了Django文件或者一些其他的配置,一定要重啟uwsgi和Nginx,否則不會生效!
#查看Uwsgi進程
ps -ef|grep uwsgi
#用kill方法把uwsgi進程殺死,然后啟動uwsgi
killall -9 uwsgi
#啟動方法
uwsgi -x mysite.xml#Nginx平滑重啟方法
/usr/local/nginx/sbin/nginx -s reload
上面是重啟uswgi和Nginx的步驟,大家每次修改之后,調用上面的方法即可。
一些注意事項
如果你的項目中的應用含有靜態文件,你需要在setting.py中進行STATIC_ROOT的設置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')#指定樣式收集目錄
#或
STATIC_ROOT = '/www/mysite/kuls_blog/static' #指定樣式收集目錄
并且執行下面的指令:
python manage.py collectstatic
運行這個命令之后,就會自動把靜態文件收集到/static/目錄下。
轉自:JAVAandPython君