Apache+wsgl配置trac详解

来源:互联网 发布:centos 清理磁盘空间 编辑:程序博客网 时间:2024/06/17 22:25
操作系统:CentOS 6
软件:apache2.2,trac0.12,python2.6,mysql

概述


trac以python写成,python应用可以用多种方式布署到apache上,比如mod_python,FastCGI,WSGI等。
我们将以WSGI的方式将trac布署到apache上,因为WSGI是python的原生态协议。

一个WEB应用要使用WSGI,必须提供一个叫做*.wsgi的脚本,实际这个脚本是个python文件。在Apache的<Directory>配置中指定一个地址映射到.wsgi的路径,这样在访问这个地址时,就会执行这个wsgi脚本文件,于是兼容wsgi的web应用就被执行。

要使trac正常运行,除了要提供这个脚本外还应为它提供数据库。我们将使用mysql为例,为trac的一个项目创建一个数据库。并告诉trac如何连接到这个数据库。

创建数据库要在mysql中,使用mysql工具创建数据库和trac的数据库用户。
在trac中创建项目要使用trac-admin工具,可在其中指定要连接的数据库和使用的数据库用户。

过程


1 安装各种软件

# yum install xxxxx...略

2 安装trac

# easy_install trac

3 为trac中第一个项目创建数据库

比如我们有一个python项目名字叫 proj1,我们把它对应的数据库命名为proj1
先保证mysql server运行起来:
# service mysqld start
设置mysql root帐户的密码为 123:
# mysqladmin -u root password 123
进入mysql管理器:
# mysql -u root -p 123
创建一个数据库 proj1 :
mysql> CREATE DATABASE proj1 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
为数据库 proj1 创建一个用户proj1user,密码为 111
mysql> grant usage on proj1.* to proj1user@localhost identified by '111';
mysql> grant all on proj1.* to proj1user@localhost identified by '111';
mysql> quit

4 在trac中创建第一个项目proj1

我们把proj1项目放在/var/trac目录下:
# cd /var
# mkdir trac
# cd trac
在proj1目录下创建一个项目的环境
# trac-admin ./proj1 initenv
在这个命令执行过程中会要求输入项目名字和数据库访问字符串,项目名字就是proj1,数据库字符串是:
mysql://proj1user:111@localhost:3306/proj1
其中包含了数据库用户名和密码,以及数据库的名字。

5 将一些静态数据布署到trac的新建项面中

# trac-admin /var/trac/proj1 deploy /tmp/deploy
# mv /tmp/deploy/* /var/trac/proj1

此时已经可以用trac自带的http server运行trac服务了:
tracd -s --port 8000 /var/trac/proj1
客户端可以在浏览器中输入: http://trac-server-ip:8000/ 来测试。

当然我们的目标是让trac运行在apache下,所以还要继续搞下去...

6 apache配置WSGI

apache 要使支持WSGI,需要安装 mod_wsgi :
# yum install mod_wsgi

然后在/etc/httpd/conf/httpd.conf文件中,增加
LoadModule wsgi_module modules/mod_wsgi.so

7 trac配置WSGI

要使一个web应用程序通过WSGI与apache配合工作,它必须提供一个.wsgi脚本,这其实是一个python文件。
我们把这个脚本放在trac项目环境所在的文件夹中:/var/trac 。
在/var/trac中创建一个trac.wsgi文件:
# cd /var/trac
# mkdir trac.wsgi

编辑这个文件如下:
import syssys.stdout = sys.stderrimport osos.environ['TRAC_ENV_PARENT_DIR'] = '/var/trac'os.environ['PYTHON_EGG_CACHE'] = '/var/trac/eggs'import trac.web.mainapplication = trac.web.main.dispatch_request

os.environ['TRAC_ENV_PARENT_DIR'] = '/var/trac' 指明了trac项目们的父目录,这样可以在/var/trac下建多个trac项目(创建项目环境),并被trac自动在网页中列出。

os.environ['PYTHON_EGG_CACHE'] = '/var/trac/eggs' 指明了python EGG包解压到的目录。现在还没有,所以手动创建一个:
# mkdir /var/trac/eggs

8 告诉apache如何访问trac的wsgi

打开apache配置文件 /etc/httpd/conf/httpd.conf
增加<Directory>

WSGIScriptAlias /trac /var/trac/trac.wsgi

<Directory /var/trac>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>

9 为apache分配文件权限

apache要读写trac项目的文件,所以要为apache分配权限:
# chown -R apache.apache /var/trac

重启apache就可以在浏冷览器中访问了:
# service httpd restart

浏览器中输入:http://trac-server-ip/trac


10 login的问题

但是还有一个问题,当要登录proj1项目中时,报出错误,为什么尼?因为我们没有配置用户权限。
我们将让trac使用apache的验证机制,使用basic权限管理方式。
用apache创建帐户admin:
# htpasswd -c /var/trac/trac.htpasswd admin
创建帐户admin和文件trac.htpasswd。下一步把这个文件告诉apache,在httpd.conf中输入以下:

<Location "/trac/[^/]+/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/trac/trac.htpasswd
Require valid-user
</Location>

重启apache。好了,现在可以登录了,但为什么权限不多?我可是admin啊!没关下,再来一句:
# trac-admin /var/trac/proj1 permission add admin TRAC_ADMIN

完成收功!