首頁 > 軟體

聊聊Django+uwsgi+nginx伺服器部署問題

2022-03-02 10:01:00

準備工作

推薦使用anaconda進行python環境的管理,因python環境容易出現各種版本衝突問題

安裝anaconda:

wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh
bash Anaconda3-2020.11-Linux-x86_64.sh

一路回車,有提示後“yes”再回車,這裡安裝到的目錄在/root下

把conda新增到環境變數

vim /etc/profile

在檔案末尾新增

PATH=$PATH:/root/anaconda3/bin		# 根據目錄情況
export PATH

啟用環境變數

source /etc/profile

新增合適的虛擬環境

conda env list			# 檢視環境
conda create -n myDjango python=3.7.5
conda activate myDjango
# 啟動虛擬環境時可能需要先
source activate

安裝需要的元件

需要的有django,uwsgi,nginx

pip install django		# 版本為4以上
pip install uwsgi		
yum install nginx

使用檢視版本語句檢視是否安裝成功

python -m django --version
uwsgi --version
nginx -V

建立django程式(本地)

可在pycharm中一鍵建立,也可以使用命令列建立

django-admin startproject mysite

獲得目錄如下

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • manage.py 用於啟動專案 python manage.py runserver
  • 二級mysite可對專案進行整體設定
  • mysite/settings.py 專案組態檔,包含資料庫,debug,語言時區等
  • mysite/urls.py 設定專案路由
  • mysite/wsgi.py 使用uwsgi管理django程式時需要用到

建立應用

python manage.py startapp myApp

得到app目錄如下,可在此編寫檢視模組等,然後在urls內編寫路由以提供存取,不再贅述

myApp/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

使用檔案傳輸工具將django程式傳輸到伺服器

可使用xftp,filezilla或寶塔之類

部署工作

設定uwsgi

在以放到伺服器上的django專案目錄下建立uwsgi.ini檔案,即uwsgi設定

我的專案目錄為/home/mysite

[uwsgi]
chdir=/home/djangoProject	# 專案位置
#socket=:8000				# 通過nginx使用的設定
http=:8000					# 單獨啟動時使用的設定
wsgi-file=/home/djangoProject/djangoProject/wsgi.py		# 專案中wsgi檔案位置
process=4
threads=2
pidfile=uwsgi.pid			# 生產pid,log檔案,以檢視紀錄檔和pid資訊
daemonize=uwsgi.log
master=True

此時可以啟動uwsgi來啟動專案

uwsgi --ini uwsgi.ini	# 通過剛創立的ini設定來啟動,會生成pid和log檔案
uwsgi --stop uwsgi.pid	# 必須使用pid檔案來停止程式

此時可以使用埠檢視語句檢視程式是否已經執行

netstat -tlnp|grep 8000	# django程式預設開啟埠為8000,也可在ini檔案中自行修改

若已成功啟動,一句可以通過存取域名/ip:8000存取django程式

設定nginx

首先需要將uwsgi.ini設定進行更改,取消http,開啟socket

[uwsgi]
chdir=/home/djangoProject	# 專案位置
socket=:8000				# 通過nginx使用的設定
#http=:8000					# 單獨啟動時使用的設定
wsgi-file=/home/djangoProject/djangoProject/wsgi.py		# 專案中wsgi檔案位置
process=4
threads=2
pidfile=uwsgi.pid			# 生產pid,log檔案,以檢視紀錄檔和pid資訊
daemonize=uwsgi.log
master=True

nginx組態檔預設在/etc/nginx/nginx.conf,需要編輯的是http下的server內容
location中增加兩個內容

uwsgi_pass 0.0.0.0:8000;			# 與uwsgi.ini檔案設定的socket保持一致
include /etc/nginx/uwsgi_params;	# 參照nginx的uwsgi_params載入引數

server部分如下

server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / {
    		uwsgi_pass 0.0.0.0:8000;
    		include /etc/nginx/uwsgi_params;
    }
}

可以用nginx -t語句檢查是否合法
通過server語句啟動/停止/重啟 nginx

server nginx start/stop/restart

nginx預設開啟埠為80,也可通過檢視埠情況觀察是否成功開啟

netstat -tlnp|grep 80

若啟動成功則nginx反向代理成功,已經可以通過存取80埠存取django程式

設定ssl證書以提供https存取

需要在伺服器代理廠商處申請ssl證書並下載nginx版本,將得到包含域名在內的證書檔案.pem和證書金鑰.key,將兩個檔案傳輸到伺服器nginx目錄下,最好建立一個證書專用目錄

更改nginx.conf組態檔server內容

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  _;
    root         /usr/share/nginx/html;

    ssl_certificate "/etc/nginx/cert/證書名.pem";
    ssl_certificate_key "/etc/nginx/證書金鑰.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / {
            uwsgi_pass 0.0.0.0:8000;
            include /etc/nginx/uwsgi_params;
    }
    error_page 404 /404.html;
        location = /40x.html {
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
}

注:每次更改nginx設定都需要重啟nginx服務才能生效

到此這篇關於Django+uwsgi+nginx伺服器部署的文章就介紹到這了,更多相關Django+uwsgi+nginx伺服器部署內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com