其實之前就部署過一次了,但是當時記錄的斷斷續續的,導致前兩天再次部署的時候簡直被坑哭,所以在這里記錄一下。
說明:
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下就干了,不涉及用戶權限啥的了,可能還有點漏掉的東西,后續想起來再補吧,汗。。。。