其實之前就部署過一次了猜丹,但是當(dāng)時記錄的斷斷續(xù)續(xù)的停巷,導(dǎo)致前兩天再次部署的時候簡直被坑哭胖眷,所以在這里記錄一下厌杜。
說明:
django版本:1.8奉呛,系統(tǒng)版本:centos6.5, Python版本:3.5
首先需要安裝libxml相關(guān)包,一行命令簡單搞定
yum install libxml*
1夯尽、nginx安裝
nginx下載可以去官網(wǎng)自己找瞧壮,我下載的是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
安裝之后需要說下胎许,很多網(wǎng)文說pip install之后直接就可以使用uwsgi命令了,實際我用的時候并不是罗售,需要自己去uwsgi所在目錄
找然后做一個軟鏈接即可辜窑。我的python編譯安裝在/usr/local/python3目錄下,所以是這樣的
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
然后就可以直接使用uwsgi命令了莽囤。
創(chuàng)建一個測試文件 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后面需要有空格谬擦,命令執(zhí)行沒問題之后可以通過瀏覽器訪問http://ip:8000,頁面輸出helloWord,就沒有問題了朽缎。這里關(guān)于test.py惨远,說明一下,如果是python2.x话肖,那么直接
return 'helloWord'
就可以了北秽,如果是python3.x,必須
return b'helloWord'
才可以最筒,不然會報錯贺氓,報的啥我忘記了,大意就是需要返回buffer啥的床蜘。<br>
3、Django創(chuàng)建項目
Django安裝好之后就可以使用django-admin命令了,創(chuàng)建一個測試項目
cd /home/myself/projects/
django-admin.py startproject testnginx
為了把靜態(tài)文件交給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下執(zhí)行
python manage.py collectstatic
就會看到所有的靜態(tài)文件搀别,css,js,img文件都被自動匯總到/home/myself/projects/testnginx/collectedstatic目錄下了<br>
4、nginx配置準(zhǔn)備工作完成尾抑,可以配置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
文件應(yīng)該是在nginx.conf文件的同級目錄的,如果沒有檐春,需要自行安裝一個。這里有一個坑了我的點么伯,有好多文章配置location /static/的時候疟暖,說這個是location /static ,個人表示不帶后面的斜杠的話田柔,nginx是找不到靜態(tài)文件的俐巴。。硬爆。欣舵。,記得寫成
location /static/
配置完之后可以測試一下缀磕,使用-t命令
/usr/local/nginx/sbin/nginx -t
5缘圈、nginx+uwsgi都沒問題了就可以把uwsgi和nginx串起來了,上面測試uwsgi是通過命令行的袜蚕,最好寫成配置文件糟把,uwsgi可以有xml、ini等格式的配置文件牲剃,這里用ini格式的遣疯,在/home/myself/projects/ 目錄下創(chuàng)建一個uwsgi.ini文件,內(nèi)容是
[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這里字節(jié)projectname.wsgi就可以了缠犀,不要寫django項目里的那個wsgi.py的路徑数苫,daemonize是log日志的路徑,還有socket這里辨液,一些文章的配置是http文判,這里建議socket,第一避免繞過nginx直接訪問uwsgi室梅,第二不會出現(xiàn)那個什么數(shù)據(jù)塊太大的報錯戏仓。配置文件完成后通過-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(畢竟自己測試經(jīng)常需要啟停)勾哩,寫了一個智障的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
都是自己測試時候創(chuàng)建的,直接在root下就干了思劳,不涉及用戶權(quán)限啥的了迅矛,可能還有點漏掉的東西,后續(xù)想起來再補吧潜叛,汗秽褒。。威兜。销斟。