两周前完成的一个项目,是用Python写了一个网站。在部署到正式服务器时遇到了点问题,反复多次,浪费了些时间。今天,终于有时间把过程好好整理一下。
服务器操作系统是CentOS。
一、准备工作
1、安装gcc。
如果没有gcc,后面编译安装其它东西时,会提示:no acceptable compiler in $path。
在终端执行yum install gcc即可。
yum 是一个Python下面的命令,一般Linux都自带了python 2.4.3,所以一登录系统,就可以使用yum命令了。
2、安装zlib-devel。
如果没有zlib-devel,后面执行Python时会报错:Compression requires the (missing) zlib module,若到了那时再安装zlib-devel,就需要重新编译python,会麻烦一点。
在终端执行yum install zlib-devel即可。
二、编译安装Python
1、到python官网下载源码包,如Python-2.7.3.tgz
2、解压 tar -xf Python-2.7.3.tgz
3、进入解压后的Python-2.7.3目录,执行 ./configure --prefix=/usr/local/python27 --enable-shared --with-zlib=/usr/include
prefix参数是指定要将python安装到哪个目录
enable-shared是必须要写的,否则后面会遇到错误提示:Command failed with rc=65536
with-zlib就是指定编译python过程中要用到的zlib的路径,我们在准备工作中安装zlib后,zlib就会在/usr/include目录下。
4、执行make
5、执行make install
现在检验一下,在终端输入python,可以看到python的版本号,还是2.4.3。这是因为系统默认指向了原本就在机器上的python,现在需要设置环境变量,让它指向我们新装的python2.7。
先exit()退出python环境,回到终端。再执行
export PYTHONPATH=/usr/local/python27
此时再执行 python,就可以看到版本号已经变成2.7了。
如果此时遇到错误:error: command 'gcc' failed with exit status 1
可以执行 yum install gcc python-devel来解决
如果遇到错误:python: error while loading shared libraries: libpython2.7.so.1.0:
cannot open shared object file: No such file
按如下方式解决:
vim /etc/ld.so.conf.d/python2.7.conf
加入以下内容:/usr/local/python27/lib (实际的python安装路径下的lib目录)
保存退出后运行:
ldconfig
即可
三、安装setuptools
setuptools可以帮助我们方便的安装项目中使用到的python插件,另外,如果项目中有使用到mysqldb插件,那么setuptools就是必须要安装的,因为mysqldb对它有依赖。
到官网下载setup tools的源码包,解压后,进入解压目录中,在终端运行python setup.py install即可。
四、安装Mysql
到官网下载Mysql for redhat 的压缩包,解压后里面有好几个文件,除去test,其它的都需要安装。
tar -xf MysqlXXX.tar
rpm -ivh Mysql-server-XXX.rpm
rpm -ivh Mysql-devel-XXX.rpm
rpm -ivh Mysql-client-XXX.rpm
rpm -ivh Mysql-embedded-XXX.rpm
五、安装项目所需要的python插件
我们之前安装了setuptools,所以现在可以很方便的使用如下命令安装了。
easy_install web.py
easy_install mysql-python
easy_install jinja2
等等插件
六、安装Apache
到官网下载源码,然后依次执行./configure --prefix=/usr/local/apache, make, make install三条命令即可
七、安装wsgi
同样的,到官网下载源码再编译安装。
安装完成后,apache的modules目录下,就会多一个mod_wsgi.so文件。
如果安装不成功,可能需要看一下wsgi目录里面的readme文件,那里会有指引,说明在编译时需要指定什么参数。
八、配置Apache
把项目放到机器上的任意一个位置,比如项目test,放到/usr/local/www/test
打开配置文件,
vi /usr/local/apache/conf/httpd.conf文件
搜索LoadModule的位置,在末端加上
LoadModule wsgi_module modules/mod_wsgi.so
搜索DocumentRoot,把它的值修改为真正的项目路径,如/usr/local/www/test
并添加以下内容
Alias /robots.txt '/usr/local/www/test/static/robots.txt'
Alias /favicon.ico '/usr/local/www/test/static/favicon.ico'
Alias /static/ '/usr/local/www/test/static/'
WSGIProcessGroup test
WSGIDaemonProcess inspect processes=20 threads=1 inactivity-timeout=30 maximum-requests=2000 python-eggs=/tmp display-name=%{GROUP}
WSGIApplicationGroup test
WSGIScriptAlias / '/usr/local/www/test/application.py' #改成实际的项目启动文件
Order deny,allow
Allow from all
九、启动mysql、apache
service mysql start
/usr/local/apache/httpd -k start
之前我用下面这种方法启动Apache,结果启动的是系统自带的Apache
service httpd start 或者 (/usr/local/apache/bin/apachectl start)
即可