1. 程式人生 > 程式設計 >詳解Ubuntu環境下部署Django+uwsgi+nginx總結

詳解Ubuntu環境下部署Django+uwsgi+nginx總結

前言

這是我在搭建Django專案時候的過程,拿來總結記錄,以備不時之需。

專案採用nginx+uwsgi的搭配方式。

專案依賴包採用 requirements.txt 檔案管理的方式。

本地準備工作

確認專案能夠執行起來,沒有 bug

將當前環境的包匯出 pip freeze > requirements.txt

將專案上傳到伺服器上的 /srv 目錄下。這裡以 git 的形式為例,開啟終端,依次輸入如下命令:

$ git init
$ git remote add origin xxx.git  # 替換成你的專案git地址
$ git add .
$ git commit -m 'first commit'
$ git pull origin master --allow-unrelated-histories
$ git push origin master

部署專案到伺服器

安裝python

安裝好專案用到的 python 。

$ sudo apt install python
$ sudo apt install python-pip
$ pip install --upgrade pip

安裝 virtualenv 以及 virutalenvwrapper ,並建立虛擬環境。

$ pip install virtualenv
$ pip install virtualenvwrapper
$ sudo apt install vim

編輯檔案 ~/.bashrc

$ vim ~/.bashrc

# 新增如下2行程式碼
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 儲存檔案,讓檔案成效
$ source ~/.bashrc

安裝git:

$ sudo apt install git

# 為了方便XShell或者CRT連線伺服器,建議安裝OpenSSH
$ sudo apt install openssh-server openssh-client
$ service ssh restart

安裝MySQL

$ sudo apt install mysql-server mysql-client
$ sudo apt-get install libmysqld-dev

測試配置

  1. 安裝依賴包,進入虛擬環境 workon *** ,進入專案根目錄,執行命令 pip install -r requirements.txt
  2. 建立資料庫,新開啟一個終端,登入資料庫, mysql -uroot -p,建立相應的資料庫 CREATE DATABASE IF NOT EXISTS my_db default charset utf8mb4;
  3. 遷移資料, python manage.py migrate
  4. 收集靜態檔案,python manage.py collectstatic
  5. 啟動伺服器,執行 python manage.py runserver 0.0.0.0:8000 ,然後在你自己電腦上,在瀏覽器中輸入 http://<your server ip>:8000 ,訪問下網站所有頁面,確保所有頁面都沒有錯誤。

注意:

  • 設定 ALLOW_HOST 為你的域名或 ip 地址。
  • 設定 DEBUG=False

安裝uwsgi

uwsgi 是一個應用伺服器,非靜態檔案的網路請求就必須通過他完成,他也可以充當靜態檔案伺服器,但不是他的強項。

uwsgi 是使用 python 編寫的,因此通過 pip install uwsgi 就可以了。( uwsgi 必須安裝在系統級別的 Python 環境中,不要安裝到虛擬環境中)。

命令列啟動 uwsgi :

$ uwsgi --http :8000 --module test.wsgi --vritualenv=/root/.virtualenvs/django-env-py36

如果能夠在瀏覽器中訪問到測試的頁面,說明uwsgi可以載入專案了。

配置檔案方式啟動 uwsgi :

在專案的根路徑下面,建立一個檔案 djangotest.ini ,填寫以下程式碼:

[uwsgi]
# Django相關的配置
# 必須全部為絕對路徑
# 專案的路徑
chdir=/srv/djangotest

# Django的wsgi檔案
module=djangotest.wsgi

# Python虛擬環境的路徑
home=/root/.virtualenvs/django-env-py36

# 程序相關的設定
# 主程序
master=true

# 最大數量的工作程序
processes=10

# socket檔案路徑,絕對路徑
socket=/srv/djangotest/djangotest.sock

# 設定socket的許可權
chmod-socket=666

# 退出的時候是否清理環境
vacuum=true

然後使用命令uwsgi --ini djangotest.ini,看下是否還能啟動這個專案。

安裝nginx

nginx 是一個 web 伺服器。用來載入靜態檔案和接收 http 請求的。

通過命令 sudo apt install nginx 即可安裝。

nginx 常用命令:

  • 啟動nginx:service nginx start
  • 關閉nginx:service nginx stop
  • 重啟nginx:service nginx restart

收集靜態檔案:

靜態檔案應該讓 nginx 來處理,而不是讓 django 來做。

首先確保你的 settings.py 檔案中有一個 STATIC_ROOT 配置,這個配置應該指定你的靜態檔案要放在哪個目錄下。

那麼我們可以執行以下命令: python manage.py collectstatic 來收集所有靜態檔案(已經執行過請忽略)。

編寫nginx配置檔案,在 /etc/nginx/conf.d 目錄下,新建一個檔案 djangotest.conf ,然後將以下程式碼貼進去:

upstream djangotest {
  server unix:///srv/djangotest/djangotest.sock; 
}

# 配置伺服器
server {
  # 監聽的埠號
  listen   80;
  # 域名
  server_name 192.168.0.101; 
  charset   utf-8;

  # 最大的檔案上傳尺寸
  client_max_body_size 75M; 

  # 靜態檔案訪問的url
  location /static {
    # 靜態檔案地址
    alias /srv/djangotest/static_dist; 
  }

  # 最後,傳送所有非靜態檔案請求到django伺服器
  location / {
    uwsgi_pass djangotest;
    # uwsgi_params檔案地址
    include   /etc/nginx/uwsgi_params; 
  }
}

測試配置檔案: service nginx configtest 。注意:每次修改完配置需要重啟 nginx : service nginx restart

使用supervisor

讓supervisor管理uwsgi,可以在uwsgi發生意外的情況下,自動重啟。

安裝 supervisor :在系統級別的python環境下 pip install supervisor

在專案根目錄下建立一個檔案 my_supervisor.conf 。編寫內容:

# supervisor的程式名字
[program:mysite]
# supervisor執行的命令
command=uwsgi --ini zlkt_uwsgi.ini
# 專案的目錄
directory = /srv/djangotest 
# 開始的時候等待多少秒
startsecs=0
# 停止的時候等待多少秒
stopwaitsecs=0 
# 自動開始
autostart=true
# 程式掛了後自動重啟
autorestart=true
# 輸出的log檔案
stdout_logfile=/srv/djangotest/log/supervisord.log
# 輸出的錯誤檔案
stderr_logfile=/srv/djangotest/log/supervisord.err

[supervisord]
# log的級別
loglevel=info

# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登入的地址和埠號
serverurl = http://127.0.0.1:9001

# 登入supervisorctl的使用者名稱和密碼
username = admin
password = 123

[inet_http_server]
# supervisor的伺服器
port = :9001
# 使用者名稱和密碼
username = admin
password = 123

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

執行 supervisor ,執行 supervisord -c my_supervisor.conf 。

進入 supervisor 管理控制檯, supervisorctl -c my_supervisor.conf

supervisor 管理控制檯常用命令

# 檢視狀態
status

# 啟動程式
start program_name

# 重新啟動程式
restart program_name

# 關閉程式
stop program_name

# 重新載入配置檔案
reload

# 退出控制檯
quit

到此這篇關於Ubuntu環境下部署Django+uwsgi+nginx總結的文章就介紹到這了,更多相關Ubuntu環境下部署Django+uwsgi+nginx總結內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!