轉(zhuǎn)自Xiongpq
http://www.cnblogs.com/xiongpq/p/3381069.html
略有補(bǔ)充(可能出現(xiàn)錯(cuò)誤及解決辦法)
環(huán)境:
CentOS X64 6.4
nginx 1.5.6
Python 2.7.5
正文:
一:安裝需要的類(lèi)庫(kù)及Python2.7.5
安裝必要的開(kāi)發(fā)包
yum?groupinstall?"Development?tools"
yum?install?zlib-devel?bzip2-devel?pcre-devel?openssl-devel?ncurses-devel?sqlite-devel?readline-devel?tk-devel
CentOS 自帶Python2.6.6,但我們可以再安裝Python2.7.5:
cd?~
wget?http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
tar?xvf?Python-2.7.5.tar.bz2
cd?Python-2.7.5
./configure?--prefix=/usr/local
make?&&?make?altinstall
安裝完畢后,可是使用”python2.7”命令進(jìn)入python2.7的環(huán)境。
二:安裝Python包管理
easy_install包https://pypi.python.org/pypi/distribute
方便安裝Python的開(kāi)發(fā)包
cd?~
wget?https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz
tar?xf?distribute-0.6.49.tar.gz
cd?distribute-0.6.49python2.7?setup.py?install
easy_install?--version
紅色部分必須是“python2.7”,否則將安裝到默認(rèn)的2.6環(huán)境內(nèi)。
pip包https://pypi.python.org/pypi/pip
安裝pip的好處是可以pip list、pip uninstall 管理Python包, easy_install沒(méi)有這個(gè)功能,只有uninstall
easy_install?pip
pip?--version
三:安裝uwsgi
uwsgi:https://pypi.python.org/pypi/uWSGI
uwsgi參數(shù)詳解:http://uwsgi-docs.readthedocs.org/en/latest/Options.html
pip?install?uwsgi
uwsgi?--version
測(cè)試uwsgi是否正常:
新建test.py文件,內(nèi)容如下:
def?application(env,?start_response):
start_response('200?OK',?[('Content-Type','text/html')])
return?"Hello?World"
然后在終端運(yùn)行:
uwsgi?--http?:8001?--wsgi-file?test.py
在瀏覽器內(nèi)輸入:http://你購(gòu)買(mǎi)的云主機(jī)公網(wǎng)ip:8001,看是否有“Hello World”輸出,若沒(méi)有輸出,請(qǐng)檢查你的安裝過(guò)程。
四:安裝django
pip?install?django
測(cè)試django是否正常,運(yùn)行:
django-admin.py?startproject?demosite
cd?demositepython2.7?manage.py?runserver?0.0.0.0:8002
在瀏覽器內(nèi)輸入:http://1你購(gòu)買(mǎi)的云主機(jī)公網(wǎng):8002,檢查django是否運(yùn)行正常。
五:安裝nginx
cd?~
wget?http://nginx.org/download/nginx-1.5.6.tar.gz
tar?xf?nginx-1.5.6.tar.gz
cd?nginx-1.5.6
./configure?--prefix=/usr/local/nginx-1.5.6?\
--with-http_stub_status_module?\
--with-http_gzip_static_module
make?&&?make?install
安裝Nginx時(shí)報(bào)錯(cuò)
錯(cuò)誤提示:
./configure:?error:?the?HTTP?rewrite?module?requires?the?PCRE?library.
安裝pcre-devel與openssl-devel解決問(wèn)題
yum?-y?install?pcre-devel?openssl?openssl-devel
./configure?--prefix=/usr/local/nginx
make
make?install
六:配置uwsgi
uwsgi支持ini、xml等多種配置方式,但個(gè)人感覺(jué)ini更方便:
在/ect/目錄下新建uwsgi9090.ini,添加如下配置:
[uwsgi]
socket?=
master?=?true?????????//主進(jìn)程
vhost?=?true??????????//多站模式
no-stie?=?true????????//多站模式時(shí)不設(shè)置入口模塊和文件
workers?=?2???????????//子進(jìn)程數(shù)
reload-mercy?=?10
vacuum?=?true?????????//退出、重啟時(shí)清理文件
max-requests?=?1000
limit-as?=?512
buffer-sizi?=?30000
pidfile?=?/var/run/uwsgi9090.pid????//pid文件,用于下面的腳本啟動(dòng)、停止該進(jìn)程
daemonize?=?/website/uwsgi9090.log
設(shè)置uwsgi開(kāi)機(jī)啟動(dòng),在/etc/init.d/目錄下新建uwsgi9090文件,內(nèi)容如下:
uwsgi9090
#!?/bin/sh
#?chkconfig:?2345?55?25
#?Description:?Startup?script?for?uwsgi?webserver?on?Debian.?Place?in?/etc/init.d?and
#?run?'update-rc.d?-f?uwsgi?defaults',?or?use?the?appropriate?command?on?your
#?distro.?For?CentOS/Redhat?run:?'chkconfig?--add?uwsgi'
###?BEGIN?INIT?INFO
#?Provides:??????????uwsgi
#?Required-Start:????$all
#?Required-Stop:?????$all
#?Default-Start:?????2?3?4?5
#?Default-Stop:??????0?1?6
#?Short-Description:?starts?the?uwsgi?web?server
#?Description:???????starts?uwsgi?using?start-stop-daemon
###?END?INIT?INFO
#?Author:???licess
#?website:??http://lnmp.org
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="uwsgi?daemon"
NAME=uwsgi9090
DAEMON=/usr/local/bin/uwsgi
CONFIGFILE=/etc/$NAME.ini
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set?-e
[?-x?"$DAEMON"?]?||?exit?0
do_start()?{
$DAEMON?$CONFIGFILE?||?echo?-n?"uwsgi?already?running"
}
do_stop()?{
$DAEMON?--stop?$PIDFILE?||?echo?-n?"uwsgi?not?running"
rm?-f?$PIDFILE
echo?"$DAEMON?STOPED."
}
do_reload()?{
$DAEMON?--reload?$PIDFILE?||?echo?-n?"uwsgi?can't?reload"
}
do_status()?{
ps?aux|grep?$DAEMON
}
case?"$1"?in
status)
echo?-en?"Status?$NAME:?\n"
do_status
;;
start)
echo?-en?"Starting?$NAME:?\n"
do_start
;;
stop)
echo?-en?"Stopping?$NAME:?\n"
do_stop
;;
reload|graceful)
echo?-en?"Reloading?$NAME:?\n"
do_reload
;;
*)
echo?"Usage:?$SCRIPTNAME?{start|stop|reload}"?>&2
exit?3
;;
esac
exit?0
uwsgi9090
然后在終端執(zhí)行:
--?添加服務(wù)
chkconfig?--add?uwsgi9090
--?設(shè)置開(kāi)機(jī)啟動(dòng)
chkconfig?uwsgi9090?on
七:設(shè)置nginx
找到nginx的安裝目錄/usr/local/nginx,打開(kāi)conf/nginx.conf文件,修改server配置
server?{
listen???????80;
server_name??localhost;
location?/?{
include??uwsgi_params;
uwsgi_pass??;??????????????//必須和uwsgi中的設(shè)置一致
index??index.html?index.htm;
client_max_body_size?35m;
}
}
注意 :安裝django這步中startproject的demosite路徑,需要和nginx.conf中 uwsgi_param UWSGI_CHDIR /demosite;對(duì)應(yīng)上。
設(shè)置nginx開(kāi)機(jī)啟動(dòng),在/etc/init.d/目錄下新建nginx文件,內(nèi)容如下:
nginx
#!/bin/sh
#
#?nginx?-?this?script?starts?and?stops?the?nginx?daemon
#
#?chkconfig:???-?85?15
#?description:??Nginx?is?an?HTTP(S)?server,?HTTP(S)?reverse?\
#???????????????proxy?and?IMAP/POP3?proxy?server
#?processname:?nginx
#?config:??????/usr/local/nginx/conf/nginx.conf
#?pidfile:?????/var/run/nginx.pid
#?Source?function?library.
.?/etc/rc.d/init.d/functions
#?Source?networking?configuration.
.?/etc/sysconfig/network
#?Check?that?networking?is?up.
[?"$NETWORKING"?=?"no"?]?&&?exit?0
nginx="/opt/nginx-1.5.6/sbin/nginx"
prog=$(basename?$nginx)
NGINX_CONF_FILE="/opt/nginx-1.5.6/conf/nginx.conf"
[?-f?/etc/sysconfig/nginx?]?&&?.?/etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
start()?{
[?-x?$nginx?]?||?exit?5
[?-f?$NGINX_CONF_FILE?]?||?exit?6
echo?-n?$"Starting?$prog:?"
daemon?$nginx?-c?$NGINX_CONF_FILE
retval=$?
echo
[?$retval?-eq?0?]?&&?touch?$lockfile
return?$retval
}
stop()?{
echo?-n?$"Stopping?$prog:?"
killproc?$prog?-QUIT
retval=$?
echo
[?$retval?-eq?0?]?&&?rm?-f?$lockfile
return?$retval
}
restart()?{
configtest?||?return?$?
stop
sleep?1
start
}
reload()?{
configtest?||?return?$?
echo?-n?$"Reloading?$prog:?"
killproc?$nginx?-HUP
RETVAL=$?
echo
}
force_reload()?{
restart
}
configtest()?{
$nginx?-t?-c?$NGINX_CONF_FILE
}
rh_status()?{
status?$prog
}
rh_status_q()?{
rh_status?>/dev/null?2>&1
}
case?"$1"?in
start)
rh_status_q?&&?exit?0
$1
;;
stop)
rh_status_q?||?exit?0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q?||?exit?7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q?||?exit?0
;;
*)
echo?$"Usage:?$0?{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit?2
esac
nginx
然后在終端執(zhí)行:
--?添加服務(wù)
chkconfig?--add?nginx
--?設(shè)置開(kāi)機(jī)啟動(dòng)
chkconfig?nginx?on
八:測(cè)試
OK,一切配置完畢,在終端運(yùn)行
service?uwsgi9090?start
service?nginx?start
錯(cuò)誤1:
[root@VM_23_251_centos nginx-1.5.6]# service uwsgi9090 start
env: /etc/init.d/uwsgi9090: Permission denied
[root@VM_23_251_centos nginx-1.5.6]# service nginx start
env: /etc/init.d/nginx: Permission denied
解決辦法1:把可執(zhí)行勾選上
錯(cuò)誤2:
[root@VM_23_251_centos ~]# sudo service nginx start
env: /etc/init.d/nginx: No such file or directory
解決辦法1:
Be careful what text editors you use on your local Windows computer. Some create Windows-style line endings (\r\n, CR-LF), which cause problems like this on Unix-like systems such as Linux or Mac OS X.
If you use such an editor, adjust its settings so that it creates files with Unix-style line endings. If the editor has no such setting, you should not be using it at all.
文本格式由windows 改為unix版
錯(cuò)誤3:
*** WARNING: Can't find section "uwsgi" in INI configuration file /etc/uwsgi9090.ini ***
解決辦法3:
在瀏覽器輸入:http://云主機(jī)公網(wǎng)ip,恭喜你可以看到django的“It work”了~
九:多站配置
我采用運(yùn)行多個(gè)uwsgi服務(wù)的方法來(lái)實(shí)現(xiàn)多個(gè)站點(diǎn)。
重復(fù)第六步,創(chuàng)建uwsgi9091.ini,并相應(yīng)修改文件中的
socket?=?127.0.0.1:9091
pidfile?=?/var/run/uwsgi9091.pid
daemonize?=?/website/uwsgi9091.log
并創(chuàng)建服務(wù)uwsgi9091,設(shè)置開(kāi)機(jī)啟動(dòng)。
然后修改nginx的配置文件為:
nginx
然后我們就可以通過(guò)http://127.0.0.1:1300來(lái)訪問(wèn)新的網(wǎng)站了。
十:其他配置
防火墻設(shè)置
CentOS默認(rèn)關(guān)閉外部對(duì)80、3306等端口的訪問(wèn),所以要在其他計(jì)算機(jī)訪問(wèn)這臺(tái)服務(wù)器,就必須修改防火墻配置,打開(kāi)/etc/sysconfig/iptables
在“-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT”,下添加:
-A?INPUT?-m?state?--state?NEW?-m?tcp?-p?-dport?80?-j?ACCEPT
-A?INPUT?-m?state?--state?NEW?-m?tcp?-p?-dport?3306?-j?ACCEPT
然后保存,并關(guān)閉該文件,在終端內(nèi)運(yùn)行下面的命令,刷新防火墻配置:
service?iptables?restart
安裝Mysqldb
yum?-y?install?mysql-develeasy_install-2.7?MySQL-python
注意紅色部分,easy_install-2.7,否則它將默認(rèn)安裝到Python2.6環(huán)境內(nèi)。
------------------------------------------------------------------------------------------------------------------
2014年12月02日添加:
CentOS 7中默認(rèn)使用Firewalld做防火墻,所以修改iptables后,在重啟系統(tǒng)后,根本不管用。
Firewalld中添加端口方法如下:
firewall-cmd --zone=public --add-port=3306/tcp--permanent
firewall-cmd --reload