CENTOS7 使用 Nginx + Uwsgi 部署 Django 項目


 

 

寫在前面的話

 

最近總是見到有新學 Django 的朋友在部署自己的項目到 Linux 上面的時候運行不起來,所以就動手寫了這篇博客。

對於不會搭建 Python 3 環境的朋友可以參考前面的博客【CENTOS 7 升級安裝 Python 3.5】,有附帶一鍵安裝腳本。

至於為什么選擇 CENTOS 7,原因很簡單,運維這幾年多年,這么多家公司全是 CENTOS 系列,絕非偶然。

 

 

部署環境

 

軟件 版本
Python 3.5.2
Django 2.0.6
Nginx 1.10.2

 

 

下載地址

 

鏈接:https://pan.baidu.com/s/1wdNOvbtQilBCBqth1CDp9Q 密碼:batg

 

 

基礎環境安裝

 

【1】解壓 NGINX,將解壓后的安裝包上傳到 /usr/local/src/ 已經安裝的可以忽略(這里我編譯安裝了一些自己常用的一些模塊,如果你用不到可以不安裝):

cd /usr/local/src/

# 解壓
tar -zxf nginx-1.10.2.tar.gz 
tar -zxf ngx_cache_purge-2.3.tar.gz 
tar -zxf pcre-8.39.tar.gz 
tar -zxf openssl-1.1.0c.tar.gz 
tar -zxf zlib-1.2.8.tar.gz 
unzip nginx-upload-module-2.2.zip 
unzip nginx-upstream-fair-master.zip 
unzip ngx-fancyindex-master.zip 

 

 如圖:

 

 

【2】編譯安裝 NGINX(大約需要幾分鍾):

yum -y install gcc gcc-c++ make cmake openssl gd gd-devel glibc

cd nginx-1.10.2

./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_stub_status_module  --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-http_mp4_module --with-stream --with-http_realip_module --with-pcre=/usr/local/src/pcre-8.39 --with-openssl=/usr/local/src/openssl-1.1.0c --with-zlib=/usr/local/src/zlib-1.2.8 --with-http_v2_module --with-ipv6 --with-http_image_filter_module --add-module=/usr/local/src/nginx-upload-module-2.2 --add-module=/usr/local/src/nginx-upstream-fair-master --add-module=/usr/local/src/ngx_cache_purge-2.3 --add-module=/usr/local/src/ngx-fancyindex-master

make && make install 

 

【3】安裝完成后查看: 

cd /usr/local/nginx/

 如圖:

 

 

【4】啟動訪問測試:

/usr/local/nginx/sbin/nginx

 

瀏覽器訪問如圖:

 

 

【5】 安裝 virtualenv 虛擬環境並進入(這里我們的項目部署路徑為 /website ):

# 創建部署目錄
mkdir /website
cd /website/

# 創建虛擬環境
pip install virtualenv
virtualenv python3_env
cd python3_env/bin/

# 進入虛擬環境
source activate

 效果如圖:(可以看到命令行提示符已經變了) 

 

【6】安裝配置 uwsgi 和 django: 

pip install uwsgi -i https://pypi.douban.com/simple
pip install django==2.0.6 -i https://pypi.douban.com/simple

 

【7】 添加庫鏈接,這一步為了避免 uwsgi 啟動的時候缺省庫依賴報錯:

ln -s /usr/local/lib/libpcre.so.1 /lib64

 

【8】基礎環境安裝到這里結束,接下來開始配置!

 

 

項目修改配置

 

說明:

我這里用自己的一個項目做演示,項目結構如下(一個 APP,一個 static 目錄,一個 templates 目錄):

 

 

【1】將項目上傳到 /website/ 目錄下 ,並創建相關日志目錄,配置 settings.py

 

 

注意:配置靜態文件這里極其重要,STATIC_ROOT 和 STATICFILES_DIRS 只能留一個,推薦 STATIC_ROOT,否則有靜態文件的問題!

 

 添加日志和 PID 目錄:

mkdir /website/logs

 

 此時目錄結構如圖: 

 

 

【2】安裝項目所需要的依賴(這一步就不具體寫了,就是 pip 安裝的過程):

值得注意的是,如果你使用的是 pymysql 連接的 Mysql ,需要在 settings.py 的開頭加入如下代碼,避免連接報錯:

import pymysql
pymysql.install_as_MySQLdb()

 

【3】進入項目中收集 django 后台的靜態文件(之后會在 static 目錄下面生成 admin 目錄極其后台的靜態文件): 

cd /website/nav_project
python manage.py collectstatic

 如圖(注意 yes 確認): 

 

 

【4】項目配置完成,數據庫部門就自己同步就行,接下來運行環境配置 !

 

 

配置運行環境

 

【1】添加 uwsgi 配置文件:

cd /website
vim website_uwsgi.ini

# 內容如下
[uwsgi]
//運行端口號
socket = 127.0.0.1:8000
//主進程
master = true
//多站模式
vhost = true
//多站模式時不設置入口模塊和文件
no-stie = true
//子進程數
workers = 2
reload-mercy = 10
//退出、重啟時清理文件
vacuum = true
max-requests = 1000
limit-as = 512
buffer-sizi = 30000
//pid文件,用於下面的腳本啟動、停止該進程
pidfile = /website/logs/website_uwsgi.pid
daemonize = /website/logs/website_uwsgi.log

 

備注:指定運行的端口和日志 PID 文件保存的位置!此時便可以直接使用如下命令啟動,但是為了便於管理,我們不這么做: 

uwsgi /website/website_uwsgi.ini

 

【2】添加快捷啟動腳本(紅色部分為需要注意的,需要安裝自己怎么安裝的來修改): 

vi /etc/init.d/website_uwsgi

# 內容如下
#!/bin/bash

NAME='website_uwsgi'
DAEMON='uwsgi'
CONFIGFILE="/website/$NAME.ini"
PIDFILE="/website/logs/$NAME.pid"
SCRIPTNAME="/etc/init.d/$NAME"
   
do_start() {
$DAEMON $CONFIGFILE || echo -n "uwsgi  running" 
}

do_stop() {
    $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
    rm -f $PIDFILE
    echo "$DAEMON STOPED."
}

do_reload() {
    $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
}

do_status() {
    ps aux|grep $DAEMON
}

case "$1" in
status)
    echo -en "Status $NAME: \n"
    do_status
;;
start)
    echo -en "Starting $NAME: \n"
    do_start
;;
stop)
    echo -en "Stopping $NAME: \n"
    do_stop
;; 
reload|graceful)
    echo -en "Reloading $NAME: \n"
    do_reload
;;
*)
    echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
    exit 3
;;
esac
exit 0

 

給腳本授權:

chmod 755 /etc/init.d/website_uwsgi

 

 此時,我們便可以使用腳本啟動關閉服務了: 

/etc/init.d/website_uwsgi start

 如圖:

 

【3】添加 NGINX 配置文件(在 NGINX nginx.conf 配置文件的最后一個 } 前面添加如下內容 ): 

server {
    # 設置網站運行端口
    listen       8080;
    server_name  localhost;
   
    location / {
        include  uwsgi_params;
        # 必須和uwsgi中的設置一致
        uwsgi_pass  127.0.0.1:8000;
        # 入口文件,即wsgi.py相對於項目根目錄的位置,“.”相當於一   層目錄
        uwsgi_param UWSGI_SCRIPT nav_project.wsgi;
        # 項目根目錄
        uwsgi_param UWSGI_CHDIR /website/nav_project;
        index  index.html index.htm;
        client_max_body_size 35m;
    }

    # 靜態文件目錄
    location /static/ {
        alias /website/nav_project/static/;
        index index.html index.htm;
    }
}

 

說明:紅色部分根據自己配置和需求來設置,藍色部分則是你的項目名字和所在目錄 

 

【4】重啟訪問: 

/usr/local/nginx/sbin/nginx -s reload

 

 訪問如圖:

 

 

 

【5】到此,整個項目就配置完成!

 

 

小結

 

1. 選用 virtualenv 的目錄在於如果需要部署多個項目的時候環境不至於沖突。

2. 整個配置需要注意一些小細節,否則會報錯。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM