Django + uWSGI + Nginx 項目部署

背景:今天又進行了一次項目部署(第N+1次項目部署了),所以決定整理出一份完整的材料,下次直接CTRL+CCTRL+V就OK了。

一、Django項目配置

項目創建就不多說了,並且個人建議創建虛擬環境。

更改setting.py文件

DEBUG = False
ALLOW_HOSTS = ['*'] #表示可以訪問服務器的ip,*表示所有

二、uWSGI配置

  1. 安裝uWSGI

    pip install uwsgi
    
  2. 在項目目錄下新建uwsgi.ini用於填寫配置文件

    [uwsgi]
    socket = 127.0.0.1:8080                           # 和nginx通信的端口,直接做web服務器時把socket換成http
    chdir = /home/nginx_test                          # 項目路徑(我的測試項目叫test)
    wsgi-file = /home/nginx_test/nginx_test/wsgi.py   # wsgi.py文件的路徑
    processes = 4
    threads = 2
    master = true
    pidfile = uwsgi.pid                               # pid文件,用於腳本啓動、停止進程
    daemonize = uswgi.log                             # 日誌文件
    
  3. 啓動uWSGI

    啓動前注意:

    1. 啓動前最好使用python manage.py runserver先測試啓動一下,確保沒有任何問題
    2. uwsgi的日誌會在uwsgi.ini的相對路徑下生成,如果有錯誤可以在此日誌(uwsgi.log)裏進行查看
    啓動:uwsgi --ini uwsgi.ini
    停止:uwsgi --stop uwsgi.pid
    重啓:uwsgi --reload uwsgi.pid
    

    如下表示啓動成功:

    (venv) [root@localhost nginx_test]# uwsgi --ini uwsgi.ini 
    [uWSGI] getting INI configuration from uwsgi.ini
    (venv) [root@localhost nginx_test]# 
    

三、Nginx配置

  1. 安裝Nginx

    我下載的是nginx-1.9.9,其他的請訪問:http://nginx.org/download/

    cd /home/                                          # 找一個目錄下載 Nginx
    yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel    # 安裝依賴包
    wget http://nginx.org/download/nginx-1.9.9.tar.gz  # 下載源碼包
    tar -zxf nginx-1.9.9.tar.gz                        # 解壓源碼包
    cd nginx-1.9.9/                                    # 進入目錄
    ./configure --prefix=/usr/local/nginx              # 安裝路徑爲/usr/local/nginx
    make && make install                               # 編譯安裝
    
  2. 啓動Nginx

    /usr/local/nginx/sbin/nginx            # 啓動
    /usr/local/nginx/sbin/nginx -s stop    # 停止
    /usr/local/nginx/sbin/nginx -s reload  # 重啓
    

    沒有任何提示說明啓動成功
    啓動後在瀏覽器上輸入虛擬機或服務器的IP測試一下,下圖說明Nginx啓動成功:

    如果無法訪問可能是防火牆的問題:
    關閉防火牆:systemctl stop firewalld.service
    禁止防火牆開機自啓動:systemctl disable firewalld.service

    在這裏插入圖片描述

  3. 配置nginx.conf
    打開/usr/local/nginx/conf/nginx.conf文件,按照下列各式修改或者添加

    user root; #在文件的開頭加上
    
    http {
    	......
    	
    	server {
    	    listen 80;  #需要監控的端口
    	    server_name  localhost;
    	    
    	    location / {
    	        include uwsgi_params;
    	        uwsgi_pass 127.0.0.1:8080; #與uwsgi中ip:端口相同
    	        uwsgi_send_timeout 600;
    	    }
    		#靜態文件
    		location /static { 
    	        alias /home/nginx_test/static/; #靜態文件路徑
    	    }
    	}
    	......
    }
    

    修改後的樣子(文字太多,沒截全,紅框爲修改的內容):
    在這裏插入圖片描述

  4. 重啓Nginx

    /usr/local/nginx/sbin/nginx            # 啓動
    /usr/local/nginx/sbin/nginx -s stop    # 停止
    /usr/local/nginx/sbin/nginx -s reload  # 重啓
    
  5. 測試

    80端口可以忽略不寫在這裏插入圖片描述

    urls.py:

    在這裏插入圖片描述
    views.py在這裏插入圖片描述

四、配置完成報錯後如何排查

  1. ip是否正確
  2. 端口是否正確(Nginx配置文件中設置的:listen 80
  3. Nginx和uwsgi連接是否正確(nginx.conf和uwsgi.ini中連接的ip端口是否一致)
  4. 項目是否可啓動(使用python manage.py runserver測試)
歡迎關注同名微信公衆號:程序猿雜記

程序猿雜記

技術|交流|福利
發佈了63 篇原創文章 · 獲贊 124 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章