nginx+uwsgi+django簡單部署過程記錄

其實之前就部署過一次了,但是當時記錄的斷斷續續的,導致前兩天再次部署的時候簡直被坑哭,所以在這里記錄一下。

說明:

django版本:1.8,系統版本:centos6.5, Python版本:3.5

首先需要安裝libxml相關包,一行命令簡單搞定

yum install libxml*

1、nginx安裝

nginx下載可以去官網自己找,我下載的是nginx-1.10.2.tar.gz,安裝路徑是/usr/local/nginx

tar -zxvf nginx-1.10.2.tar.gz

cd nginx-1.10.2

./configure --prexfix=/usr/local/nginx

make&&make install

啟動nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

-c后面跟的是配置文件的路徑,不跟的話有時候會有些莫名其妙的提示,5555。。。啟動之后在瀏覽器訪問http://ip:80,可以看到nginx的歡迎頁面,就沒啥問題了<br>

2、安裝uwsgi

下載安裝django,uwsgi就沒啥好說的了,直接pip

pip3 install django

pip3 install uwsgi

安裝之后需要說下,很多網文說pip install之后直接就可以使用uwsgi命令了,實際我用的時候并不是,需要自己去uwsgi所在目錄

找然后做一個軟鏈接即可。我的python編譯安裝在/usr/local/python3目錄下,所以是這樣的

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

然后就可以直接使用uwsgi命令了。

創建一個測試文件 test.py

def application(env,start_response):

start_response('200 OK',[('Content-Type','text/html')])

return [b"helloWord"]

然后測試uwsgi

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

注意http后面需要有空格,命令執行沒問題之后可以通過瀏覽器訪問http://ip:8000,頁面輸出helloWord,就沒有問題了。這里關于test.py,說明一下,如果是python2.x,那么直接

return 'helloWord'

就可以了,如果是python3.x,必須

return b'helloWord'

才可以,不然會報錯,報的啥我忘記了,大意就是需要返回buffer啥的。<br>

3、Django創建項目

Django安裝好之后就可以使用django-admin命令了,創建一個測試項目

cd /home/myself/projects/

django-admin.py startproject testnginx

為了把靜態文件交給nginx處理,需要修改一下testnginx項目的settings.py配置,添加STATIC_ROOT

vim /home/myself/projects/testnginx/testnginx/settings.py

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'collectedstatic')

修改完后在項目目錄/home/myself/projects/testnginx下執行

python manage.py collectstatic

就會看到所有的靜態文件,css,js,img文件都被自動匯總到/home/myself/projects/testnginx/collectedstatic目錄下了<br>

4、nginx配置準備工作完成,可以配置nginx了,nginx的配置文件在nginx安裝目錄下,上面說過,我的nginx編譯安裝在/usr/local/nginx目錄,所以配置文件就是/usr/local/nginx/conf/nginx.conf,打開這個文件,找到server{****},修改成如下

server {

listen? ? ? 80;

server_name? localhost;

charset utf-8;

client_max_body_size 75M;

#charset koi8-r;

#access_log? logs/host.access.log? main;

access_log /root/logs/nginx/access.log;

error_log /root/logs/nginx/error.log;

location / {

root? /home/myself/projects/testnginx;

uwsgi_pass 127.0.0.1:8000;

include uwsgi_params;

}

location /static/ {

alias /home/myself/projects/testnginx/collectedstatic/;

}

#error_page? 404? ? ? ? ? ? ? /404.html;

# redirect server error pages to the static page /50x.html

#

error_page? 500 502 503 504? /50x.html;

location = /50x.html {

root? html;

}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ \.php$ {

#? ? proxy_pass? http://127.0.0.1;

#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

#? ? root? ? ? ? ? html;

#? ? fastcgi_pass? 127.0.0.1:9000;

#? ? fastcgi_index? index.php;

#? ? fastcgi_param? SCRIPT_FILENAME? /scripts$fastcgi_script_name;

#? ? include? ? ? ? fastcgi_params;

#}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

#? ? deny? all;

#}

}

location /下root是項目根路徑,uwsgi_pass配置的是uwsgi啟動的端口,需要添加include uwsgi_params,這個uwsgi_params

文件應該是在nginx.conf文件的同級目錄的,如果沒有,需要自行安裝一個。這里有一個坑了我的點,有好多文章配置location /static/的時候,說這個是location /static ,個人表示不帶后面的斜杠的話,nginx是找不到靜態文件的。。。。,記得寫成

location /static/

配置完之后可以測試一下,使用-t命令

/usr/local/nginx/sbin/nginx -t

5、nginx+uwsgi都沒問題了就可以把uwsgi和nginx串起來了,上面測試uwsgi是通過命令行的,最好寫成配置文件,uwsgi可以有xml、ini等格式的配置文件,這里用ini格式的,在/home/myself/projects/ 目錄下創建一個uwsgi.ini文件,內容是

[uwsgi]

chdir = /home/myself/projects/testnginx

module = testnginx.wsgi

master = true

processes = 10

socket = :8000

vacuum = true

daemonize = /home/myself/logs/uwsgi.log

chdri是項目目錄,module這里字節projectname.wsgi就可以了,不要寫django項目里的那個wsgi.py的路徑,daemonize是log日志的路徑,還有socket這里,一些文章的配置是http,這里建議socket,第一避免繞過nginx直接訪問uwsgi,第二不會出現那個什么數據塊太大的報錯。配置文件完成后通過-i命令啟動即可

uwsgi -i /home/myself/projects/uwsgi.ini

啟動uwsgi之后啟動nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

如果都是按照上面的步驟來的,在我的機器上就完事兒了,在瀏覽器輸入http://ip:80,可以看到頁面不是nginx歡迎頁面了,是django的歡迎頁面,就表示沒毛病了。最后為了方便啟停uwsgi,nginx(畢竟自己測試經常需要啟停),寫了一個智障的shell小腳本hanlernginx.sh,也記錄一下

if [ -z "$1" ]

then

echo "please raw start/stop";

exit 0;

elif [ $1 = "start" ]

then

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf;

echo "nginx start done!";

uwsgi -i /home/myself/projects/uwsgi.ini;

echo "uwsgi start done!";

elif [ $1 = "stop" ]

then

ps -ef|grep uwsgi|grep -v grep|awk '{print $2}'|while read pid

do

kill -9 $pid;

done

echo "uwsgi stop done!";

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s stop;

echo "nginx stop done!";

fi

啟停命令

./hanlernginx.sh stop

./hanlernginx.sh start

都是自己測試時候創建的,直接在root下就干了,不涉及用戶權限啥的了,可能還有點漏掉的東西,后續想起來再補吧,汗。。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容