一文教會(huì)你用nginx+uwsgi部署自己的django項(xiàng)目
第一步:換源
輸入命令換掉Ubuntu的下載源
sudo nano /etc/apt/sources.list
將以下全部替換掉原文件,我這里用的是阿里的源,你也可以換其他的。
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic universe deb http://mirrors.aliyun.com/ubuntu/ bionic-updates universe deb http://mirrors.aliyun.com/ubuntu/ bionic multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic-security universe deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable
分別輸入以下命令,更新源 sudo apt update sudo apt upgrade
第二步:安裝相關(guān)包
1.安裝python3
# 安裝python3 sudo apt install python3 # 查看python安裝路徑: which python # 查看python版本:建議使用3.6之后的版本,因?yàn)槠渌墓P者沒(méi)試過(guò),筆者用的是3.6.9版本 python
2.安裝openssh-server和net-tools
# 安裝 openssh-server sudo apt install openssh-server #開(kāi)啟: sudo service ssh start # 安裝net-tools sudo apt install net-tools # 查看虛擬機(jī)ip: ifconfig
如下圖所示,就是我們的虛擬機(jī)IP

安裝django的運(yùn)行環(huán)境
#安裝django運(yùn)行環(huán)境: sudo apt install virtualenv # 創(chuàng)建環(huán)境 virtualenv --python=/usr/bin/python3 myblog # 進(jìn)入環(huán)境: cd myblog # 激活環(huán)境: source bin/activate
安裝django:pip3 install Django
創(chuàng)建項(xiàng)目:django-admin.py startproject blog
激活并且創(chuàng)建好項(xiàng)目之后就基本和下圖所示差不多了

# 進(jìn)入到blog中安裝 uwsgi: pip3 install uwsgi
第三步:寫入測(cè)試文件并測(cè)試運(yùn)行
1.寫入測(cè)試文件
安裝好之后我們?cè)賹懸粋€(gè)測(cè)試文件,用來(lái)測(cè)試我們項(xiàng)目的運(yùn)行方式,實(shí)際項(xiàng)目也是一樣的。這里我用的是nano編輯寫入方式,你也可以使用vim,方式不限,能創(chuàng)建寫入即可寫入命令為:
sudo nano test.py
需要寫入的文件內(nèi)容為:
def application(env,start_response):
start_response('200 ok',[('Content-Type','text/html')])
return [b"Hello World"]2.測(cè)試運(yùn)行
測(cè)試命令為:uwsgi --http :8000 --wsgi-file test.py
回車之后,我們?cè)跒g覽器輸入ip加port端口號(hào),我的是192.168.217.133:8000。在瀏覽器打開(kāi)發(fā)現(xiàn)報(bào)了以下錯(cuò)誤。

對(duì)于這個(gè)錯(cuò)誤,我們只需要打開(kāi)項(xiàng)目文件的settings.py文件,在ALLOWED_HOSTS里面添加自己虛擬機(jī)的地址,就ok了,然后我們?cè)贉y(cè)試運(yùn)行,發(fā)現(xiàn)正常,網(wǎng)頁(yè)輸出hello world。這里說(shuō)明uwsgi能夠正常運(yùn)行測(cè)試文件。

但是我們并不是為了運(yùn)行test.py文件,我們是為了運(yùn)行自己的django項(xiàng)目,這里我們需要對(duì)上一個(gè)命令進(jìn)行修改,改為:uwsgi --http :8000 --module blog.wsgi
第四步:引入nginx
1、安裝啟動(dòng)nginx
為了避免在輸入ip時(shí),不輸入端口號(hào)也能正常使用,我們引入輕量級(jí)的nginx,這里我們用命令行安裝并且啟動(dòng)nginx
安裝:sudo apt install nginx
啟動(dòng):sudo service nginx start
2、寫入conf配置文件
輸入命令:sudo nano /etc/nginx/sites-available/blog_nginx.conf
新建一個(gè)conf文件,并且寫入以下內(nèi)容,將里面涉及路徑的地方全部改為你自己項(xiàng)目的路徑:
upstream django {
# server unix:///home/python/myblog/blog/blog.sock; # 這里的路徑改為你自己項(xiàng)目路徑
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
server {
listen 8000;
server_name 192.168.217.133; # 將這里的ip地址改為你自己的虛擬機(jī)或者服務(wù)器地址
charset utf-8;
client_max_body_size 75M; # adjust to taste
location /media {
alias /home/python/myblog/blog/media; # your Django project's media files - amend as required
}
location /static {
alias /home/python/myblog/blog/static; # your Django project's static files - amend as required
}
location / {
uwsgi_pass django;
include /home/python/myblog/blog/uwsgi_params; # the uwsgi_params file you installed
}
}創(chuàng)建好文件之后,我們需要對(duì)該文件創(chuàng)建一個(gè)軟鏈接,需要輸入以下命令:
sudo ln -s /etc/nginx/sites-available/blog_nginx.conf /etc/nginx/sites-enabled
完成之后我們可以通過(guò)ll /etc/nginx/sites-enabled/這個(gè)命令來(lái)查看一下,是否設(shè)置正確,參考下圖

3、創(chuàng)建uwsgi_params文件和靜態(tài)文件夾配置
1)、uwsgi_params
這里我們需要?jiǎng)?chuàng)建一個(gè)uwsgi_params文件,創(chuàng)建命令為:sudo nano uwsgi_params
并且將下面內(nèi)容一字不差的寫入到uwsgi_params文件中保存并退出
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
文件保存之后重啟一下nginx即可
2)、創(chuàng)建靜態(tài)文件夾
打開(kāi)django項(xiàng)目的settings.py文件,添加靜態(tài)文件的路徑,如下圖:

然后保存退出并復(fù)制映射靜態(tài)文件,命令為:python manage.py collectstatic
創(chuàng)建media文件夾:mkdir media
最后輸入命令查看靜態(tài)文件夾是否配置正確:

第五步:建立uwsgi和nginx的管道通信
在uwsgi 中將http通信改為socket通信,修改命令為:uwsgi --socket :8001 --wsgi-file test.py
此時(shí)進(jìn)入阻塞,在瀏覽器中輸入IP地址:192.168.217.133:8000,發(fā)現(xiàn)可以打開(kāi),顯示hello world成功。說(shuō)明uesgi和nginx通信正常
進(jìn)入nginx配置文件中:sudo nano /etc/nginx/sites-available/blog_nginx.conf
將文件中下面兩行中的第二行注釋掉,開(kāi)啟第一行,但是路徑一定要正確,改使用管道通信
server unix:///home/python/myblog/blog.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket (we'll use this first)
保存退出,重啟nginx:sudo service nginx restart
將uwsgi參數(shù)套節(jié)字改為blog.sock
uwsgi --socket blog.sock --wsgi-file test.py
回到瀏覽器輸入:192.168.217.133:8000得到502:如圖

我們查看一下錯(cuò)誤日志,發(fā)現(xiàn)是因?yàn)闄?quán)限問(wèn)題,解決辦法,在命令行后面加入--chmod=666
uwsgi --socket blog.sock --wsgi-file test.py --chmod=666
運(yùn)行之后發(fā)現(xiàn)沒(méi)有問(wèn)題,并且正常顯示Hello World界面。
現(xiàn)在我們運(yùn)行django項(xiàng)目,命令為:uwsgi --socket blog.sock --module blog.wsgi --chmod=666
刷新192.168.217.133:8000得到django的基礎(chǔ)頁(yè)面。
目前可以說(shuō)明nginx和uwsgi管道通信正常。
第六步:將項(xiàng)目改為后臺(tái)運(yùn)行
創(chuàng)建一個(gè)uwsgi的配置文件:sudo nano blog_uwsgi.ini
寫入一下內(nèi)容,將其中的路徑改為自己的項(xiàng)目路徑
# mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /home/python/myblog/blog # Django's wsgi file module = blog.wsgi # the virtualenv (full path) home = /home/python/myblog # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe socket = /home/python/myblog/blog/mysite.sock # ... with appropriate permissions - may be needed chmod-socket = 664 # clear environment on exit vacuum = true # daemonize uwsgi and write messages into given log daemonize = /home/python/myblog/blog/uwsgi.log
保存退出并且啟動(dòng)配置文件,命令為:uwsgi --ini blog_uwsgi.ini
我們可以查看一下后臺(tái)進(jìn)程,是否正常啟動(dòng),輸入:ps aux

最后回到nginx配置文件中,將監(jiān)聽(tīng)端口改為80,重啟nginx即可。在瀏覽器中輸192.168.217.133得到django頁(yè)面結(jié)果,表示項(xiàng)目運(yùn)行正常。
總結(jié)
到此這篇關(guān)于用nginx+uwsgi部署自己的django項(xiàng)目的文章就介紹到這了,更多相關(guān)nginx+uwsgi部署django項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)Dijkstra靜態(tài)尋路算法
這篇文章主要介紹了python實(shí)現(xiàn)Dijkstra靜態(tài)尋路算法,常用于路由算法或者作為其他圖算法的一個(gè)子模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
簡(jiǎn)單介紹Python中的readline()方法的使用
這篇文章主要介紹了簡(jiǎn)單介紹Python中的readline()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
Python中input()函數(shù)的用法實(shí)例小結(jié)
我們編寫的大部分程序,都需要讀取輸入并對(duì)其進(jìn)行處理,而基本的輸入操作是從鍵盤鍵入數(shù)據(jù),Python從鍵盤鍵入數(shù)據(jù),大多使用其內(nèi)置的input()函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中input()函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2022-03-03
Python3將jpg轉(zhuǎn)為pdf文件的方法示例
這篇文章主要介紹了Python3將jpg轉(zhuǎn)為pdf文件的方法,結(jié)合完整實(shí)例形式分析了Python3針對(duì)jpg轉(zhuǎn)pdf格式的文件讀寫、編碼裝換等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
keras 自定義loss損失函數(shù),sample在loss上的加權(quán)和metric詳解
這篇文章主要介紹了keras 自定義loss損失函數(shù),sample在loss上的加權(quán)和metric詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
如何實(shí)現(xiàn)Python調(diào)用Golang代碼詳解
這篇文章主要介紹了如何實(shí)現(xiàn)Python調(diào)用Golang代碼,Python和Golang都是當(dāng)下非常流行的編程語(yǔ)言,在實(shí)際開(kāi)發(fā)中,我們可能會(huì)遇到需要將Python和Golang進(jìn)行組合使用的場(chǎng)景,感興趣想要詳細(xì)了解可以參考下文2023-05-05
python程序調(diào)用遠(yuǎn)程服務(wù)的步驟詳解
這篇文章主要介紹了python程序調(diào)用遠(yuǎn)程服務(wù)的步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-03-03

