從零開始部署一個視頻聊天web應用(django+uwsgi+nginx)

本項目的github

https://github.com/RaccoonDML/ChatChat

本項目的pages地址

http://123.56.117.130

test1   test12345

test2   test12345

常用命令:

本項目名稱ChatChat(以下涉及到的自動替換)

啓動uwsgi uwsgi --ini uwsgi.ini

停止uwsgi

重啓uwsgi

uwsgi --stop uwsgi/uwsgi.pid

uwsgi --reload uwsgi/uwsgi.pid

確認進程狀態(進程號) ps aux | grep nginx
以上需要使用配置文件uwsgi.ini,粗暴停止可以直接殺死進程 kill -9 pid(主進程號)
啓動nginx nginx
重啓/停止/nginx

nginx -s start/reload/stop

 

 

 

 

 

 

 

 

配置步驟:

  • 基本概念:

我們的web應用基於python的Django框架,在服務器端部署時採用nginx和uwsgi架構。nginx作爲服務器最前端,負責接收client的所有請求,統一管理。靜態請求由Nginx自己處理。非靜態請求通過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。

WSGI協議(Web Server Gateway Iterface):只要web服務器和web框架滿足WSGI協議,他們就可以互相搭配。

uwsgi:實現了WSGI協議的一個web服務器。

nginx:一個反向代理服務器,用於實現負載均衡(多服務器場景)、靜態請求和動態請求的分離。nginx通過代理的方式,對於靜態的請求,直接返回給用戶相應的靜態文件。對於動態的請求,用nginx的協議將用戶的請求封裝好,發送給uwsgi,uwsgi服務器再把請求交給後端的django處理。

 

https://qqadapt.qpic.cn/txdocpic/0/207d26c298e28ff090c0ae021e277a39/0?_type=jpeg https://qqadapt.qpic.cn/txdocpic/0/353619b340f4e6c4e4ae0842e15dfa6d/0?_type=jpeg

 

  • 部署過程

要將web應用部署到服務器,首先需要有一臺公網服務器,本項目使用的是阿里雲的學生服務器,操作系統爲Ubuntu 16.04,公網ip爲123.56.117.130,服務器詳細信息如下圖:

以下是項目的詳細部署過程:

  • 從github上克隆項目到服務器

git clone https://github.com/RaccoonDML/ChatChat.git

  • 安裝nginx(版本1.10.3)

apt-get install nginx

安裝成功後,在瀏覽器中輸入服務器ip就可以看到nginx的歡迎界面。

  • 安裝uwsgi(版本2.0.18)

apt-get install python-dev

pip install uwsgi

  • 測試uwsgi

在項目目錄下新建測試文件test.py

然後執行命令:

uwsgi --http :8000 --wsgi-file test.py

含義是使用uwsgi運行test.py文件,採用http協議,端口號爲8000。這時在瀏覽器中輸入123.56.117.130:8000,如果瀏覽器頁面顯示hello world說明uwsgi安裝成功,能夠正常運行。

  • 測試django項目

這一步是爲了保證djanjo項目能夠在服務器端正常運行。進行本測試首先需要安裝項目requirements.txt中的依賴庫,確實環境搭建好後在項目目錄下執行命令:

python manage.py runserver 123.56.117.130:8000

如果這時通過瀏覽器訪問123.56.117.130:8000可以看到項目相應的功能界面說明django項目可以在服務器端正常運行。

  • 鏈接django項目和uwsgi

這一步的目的是通過uwsgi來將用戶的請求傳遞給django,再由django來作出相應的響應。要實現這樣的功能,只需要將項目信息放到uwsgi的配置文件的啓動參數中。

在Django項目目錄下新建uwsgi.ini,輸入以下啓動信息:

這裏的socket是分配給與nginx進行通訊的端口號;工作目錄爲/home/dml/ChatChat;選擇主進程和從屬進程(工作進程)工作方式,最大工作進程數爲4。

然後就可以通過以下命令啓動uwsgi:

uwsgi --ini uwsgi.ini

但是此時項目的靜態文件是不會被加載的,需要使用nginx做靜態文件代理纔可以看到寫好的網頁。

  • 配置nginx

本服務器中的nginx安裝在/etc/nginx目錄下,在配置文件nginx.conf中增加以下兩行語句,就可以讓nginx訪問conf.d和sites-enables文件夾下的配置信息。

本項目的nginx配置文件爲conf.d/chat.conf,詳細信息見下圖:

upstream django內的套接字表示nginx通過本機的8001端口和uwsgi進行通訊。這與uwsgi啓動配置文件中的端口號是一致的。

Server的內容分別表示,採用http默認的80號端口,如果是媒體文件或靜態文件請求,則直接去項目目錄的相應目錄下尋找,並直接返回給用戶。如果是其他請求,就通過前面設置的套接字遞交給uwsgi服務器處理。

  • 收集Django的靜態文件

上一步已經實現了nginx去項目目錄下的static文件夾尋找靜態文件,這裏需要將項目所有的靜態文件都收集到此目錄下。

首先在django的setting.py文件中添加代碼:STATIC_ROOT = os.path.join(BASE_DIR, "static/"),此時setting.py文件中靜態文件配置部分應該是這樣:

然後到項目目錄下執行命令:

python manage.py collectstatic

這條命令在執行時,django默認會去查看定義在STATICFILES_DIRS裏的目錄,以及在INSTALLED_APPS裏定義了的app的static目錄。如果這些目錄下有文件,則把文件全部收集起來,拷貝到STATIC_ROOT目錄下。

至此我們已經可以通過瀏覽器直接訪問本項目的所有靜態文件了。

  • 啓動nginx和uwsgi

完成以上配置工作後,就可以重啓nginx和uwsgi,分別輸入以下兩條命令:

nginx -s reload

uwsgi --ini uwsgi.ini

至此本項目就在服務器端部署完成了。

 

參考鏈接:

https://www.cnblogs.com/jhao/p/6071790.html#_label8
https://segmentfault.com/a/1190000014361352
https://www.jianshu.com/p/f1ed50f22d07
https://blog.csdn.net/lileihappy/article/details/79580291
https://blog.csdn.net/weixin_36296538/article/details/83153070

發佈了13 篇原創文章 · 獲贊 3 · 訪問量 1856
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章