CentOS+nginx+uwsgi+Python 多站點(diǎn)環(huán)境搭建

轉(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容