年前阿里云打折,1核1G的云服務(wù)器一年只要300多塊,果斷就租了1年的。既然服務(wù)器已經(jīng)到手,怎么能不把自己寫的項(xiàng)目部署上去呢,其實(shí)網(wǎng)上關(guān)于nginx+uwsgi部署Django項(xiàng)目的文章有很多,但是這些文章要不就是很久之前的,要不就是互相抄襲,一路過(guò)來(lái)都是坑,這里重點(diǎn)吧在部署時(shí)候遇到的坑著重介紹一下:1.首先部署django項(xiàng)目
首先是django項(xiàng)目,由于我是使用Anaconda來(lái)進(jìn)行版本控制的,而django項(xiàng)目是在Python2.7環(huán)境下開發(fā)的,首先是新建一個(gè)Python2.7的環(huán)境:
#創(chuàng)建python27環(huán)境 conda create --name python27 python=2.7 #激活該環(huán)境 source activate python27 #通過(guò)conda安裝django conda install django
環(huán)境準(zhǔn)備好后,從GitHub上將項(xiàng)目拉取下來(lái)
git clone https://github.com/sunny0826/xxx
修改setting.py文件
#debug模式默認(rèn)開啟,這里要關(guān)閉 DEBUG = False #這里將外網(wǎng)IP配置進(jìn)來(lái) ALLOWED_HOSTS = ["127.0.0.1","xx.xx.xx.xx"]
啟動(dòng)項(xiàng)目:
#來(lái)項(xiàng)目目錄下執(zhí)行 python manage.py runserver 8000
然后在外網(wǎng)ip:8000路徑下查看項(xiàng)目啟動(dòng)情況
2.阿里云配置安全組由于是服務(wù)器在阿里云上,所以直接訪問(wèn)時(shí)訪問(wèn)不到的,所以要在阿里云平臺(tái)配置安全組(類似于防火墻)
首先打開阿里云平臺(tái),登錄,點(diǎn)擊安全組配置:
點(diǎn)擊配置規(guī)則
點(diǎn)擊添加安全組規(guī)則
按要求填寫安全組規(guī)則
優(yōu)先級(jí)1位最高優(yōu)先級(jí),端口可以設(shè)置范圍,并且可以設(shè)置授權(quán)訪問(wèn)的對(duì)象
設(shè)置完之后,就可以在公網(wǎng)IP訪問(wèn)到我們的django項(xiàng)目了
確定django項(xiàng)目可以正常運(yùn)行了,ctrl+c停止項(xiàng)目,下面我們來(lái)安裝uwsgi:
在安裝uwsgi非常簡(jiǎn)單,只需要pip安裝即可,但是由于之前使用的是Python27環(huán)境,這里記得要激活Python27環(huán)境,否則就安裝到默認(rèn)的Python路徑了
#uWSGI 是一個(gè)(巨大的) C 應(yīng)用,所以你需要一個(gè) C 編譯器(比如 gcc 或者 clang)和 Python 開發(fā)版頭文件 apt-get install build-essential python-dev #安裝uwsgi pip install uwsgi
按照官網(wǎng)介紹,寫已經(jīng)Python腳本進(jìn)行測(cè)試,test.py(在任意路徑都可以,不過(guò)測(cè)完要記得刪掉)
def application(env, start_response): start_response("200 OK", [("Content-Type","text/html")]) return ["Hello World"]
然后輸入命令進(jìn)行測(cè)試
uwsgi --http :8000 --wsgi-file test.py
這里是8000端口,因?yàn)橹皽y(cè)試django的時(shí)候打開的8000端口,這里偷懶就不去配置新的安全組了
那么問(wèn)題就來(lái)了,在啟動(dòng)的時(shí)候報(bào)錯(cuò)了....=。=
出現(xiàn)的這個(gè)錯(cuò)誤,經(jīng)過(guò)測(cè)試只會(huì)在Python2.7的環(huán)境發(fā)生,在Python3+就沒有發(fā)生了,輾轉(zhuǎn)百度和Google,都沒有找到這個(gè)問(wèn)題的解決辦法且這個(gè)問(wèn)題一般發(fā)生在nginx上...
但這個(gè)報(bào)錯(cuò)問(wèn)題還是很明顯,就是libpcre.so.1這個(gè)文件找不到,初步推測(cè)為版本問(wèn)題
首先要咱們搜索一下這個(gè)文件,看看本機(jī)有沒有
發(fā)現(xiàn)本機(jī)是有這個(gè)文件的,那就好辦了,將他鏈接到相應(yīng)位置就好
執(zhí)行這條語(yǔ)句之后就可以u(píng)wsgi就可以正常啟動(dòng)了
在跳過(guò)這個(gè)坑之后,就可以正式來(lái)配置我們的項(xiàng)目了
首先修改自己項(xiàng)目中的wsgi.py文件,添加兩行代碼
然后在django項(xiàng)目根目錄創(chuàng)建uwsgi.ini文件
uwsgi.ini文件配置
# uwsgi.ini file [uwsgi] # Django-related settings socket = 127.0.0.1:8000 #與nginx通信的地址和端口 # the base directory (full path) chdir = /apps/xxxx #django項(xiàng)目絕對(duì)路徑 # Django s wsgi file module = xxxx.wsgi #wsgi文件所在的相對(duì)于項(xiàng)目的路徑 # the virtualenv (full path) home = /root/anaconda3/envs/python27/lib/python2.7/site-packages #python環(huán)境的路徑 # process-related settings # master master = true # maximum number of worker processes processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true plugins=python #log文件 daemonize=/apps/uwsgi/uwsgi.log #pid文件 pidfile=/apps/uwsgi/uwsgi.pid
這里配置日志文件和pid文件,方便之后的重啟
關(guān)于uwsgi的重啟問(wèn)題:
每次項(xiàng)目有代碼更新的話,都需要重啟uwsgi,如果沒有配置pid文件的話,重啟需要使用:
#查看uwsgi進(jìn)程號(hào) ps aux | grep uwsgi #關(guān)閉進(jìn)程號(hào)為0的進(jìn)程 kill -9 主進(jìn)程號(hào)
來(lái)停止uwsgi,然后才能重啟,注意這里的主進(jìn)程是pid為1的進(jìn)程,而配置了pid文件的,只需要進(jìn)行如下方法來(lái)重啟即可
#重載(一般修改參數(shù),或者修改py文件經(jīng)常用到) uwsgi --reload uwsgi.pid #重啟(一般系統(tǒng)環(huán)境變化會(huì)用到) uwsgi --stop uwsgi.pid
最后在項(xiàng)目根目錄下運(yùn)行uwsgi命令,載入配置文件
uwsgi --ini uwsgi.ini
然后在后面的日志中要注意環(huán)境是否為之前配置,如果不是請(qǐng)激活激活之前創(chuàng)建的Python環(huán)境再進(jìn)行操作
4.安裝配置nginx最后來(lái)安裝nginx
sudo apt-get install nginx
修改nginx配置
cd /etc/nginx/sites-enabled #Ubuntu中nginx配置文件所在路徑 vim default
配置文件
server { listen 80 default_server; #監(jiān)聽端口,將來(lái)訪問(wèn)的端口 listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; #uwsgi中配置的路徑 } location /static { alias /apps/xxx/static; #靜態(tài)資源路徑 } location /resume.ico { alias /apps/xxx/static/resume.ico; #網(wǎng)頁(yè)圖標(biāo)路徑 } }
uwsgi啟動(dòng)后,再啟動(dòng)nginx
基礎(chǔ)命令
/etc/init.d/nginx start #啟動(dòng) /etc/init.d/nginx stop #關(guān)閉 /etc/init.d/nginx restart #重啟
啟動(dòng)之后,訪問(wèn)外網(wǎng)IP:80,查看是否可以通過(guò)nginx訪問(wèn)django
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44552.html
摘要:百度不行就用吧,中文不行就找英文的,最后,給我誤打誤撞的部署成功了。準(zhǔn)備工作我使用的系統(tǒng)是版,官網(wǎng)下載地址安裝的時(shí)候全部選擇英文,記得以前選擇中文的時(shí)候安裝時(shí)出了問(wèn)題,服務(wù)器組件一個(gè)不選,安裝做的很貼心,基本上是一路回車,就不詳細(xì)說(shuō)明了。 Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服務(wù)器 前不久為了部署Django項(xiàng)目,在百度上到處找教程,找...
閱讀 2399·2021-11-22 14:56
閱讀 1205·2019-08-30 15:55
閱讀 3237·2019-08-29 13:29
閱讀 1384·2019-08-26 13:56
閱讀 3548·2019-08-26 13:37
閱讀 589·2019-08-26 13:33
閱讀 3377·2019-08-26 13:33
閱讀 2255·2019-08-26 13:33