Nginx+FastCGI+MySQL+Linux搭建Trac 0.12.2环境

完整详细的安装方法请参考官网http://trac.edgewall.org/wiki/TracInstall或者INSTALL
本文主要记录我在安装的时候遇到的一些问题和解决办法,有误导的地方欢迎指正

一般都是装数据库,装服务器,装Trac程序

0、安装Python环境,默认都有,只需要检查版本是否符合,安装需要的Python插件

1、安装数据库,我这里用的是MySQLhttp://lucane.iteye.com/blog/866355
Trac是Python写的,访问MySQL用的是MySQL-python
需要配置的就是$MYSQL_PYTHON_HOME/site.cfg/site.cfg
下的mysql_config = $MYSQL_HOME/bin/mysql_config
目前我的这些东西都在一台机器上,如果分布在多台机器上还真不知道怎么装

2、安装Nginx,我这里是编译安装
./configure –prefix=$PATH_TO_INSTALL/nginx
make
make install
可能启动的时候报错,类似于下面这样
[emerg]: bind() to 0.0.0.0:80 failed (13: Permission denied)
这是因为端口号的问题,在Linux中1024下的端口号都需要root用户才能使用
所以普通用户启动程序绑定会报出权限问题,我这里是把Nginx绑定的端口号改为8888

Nginx比较简陋,启动之后关闭一般要通过kill命令杀进程,具体的参考Nginx相关手册
这里列出几个简单的

修改配置文件后检查配置文件语法是否正确
nginx -t -c $NGINX_HOME/conf/nginx.conf
t因该是表示测试的意思,c就是指定所用配置文件的地方,这里可以自由发挥

停止Nginx
kill -quit PID_OF_NGINX

平滑重启Nginx
kill -hup PID_OF_NGINX

启动Nginx就不说了

关键是这个配置文件,这里比较复杂,至少对于新手来说是这样的
我也是参考了http://marshalys.blogspot.com/2009/02/freebsdtrac.html才弄出来的

我先把我的配置文件贴出来,可能有些无用,但是暂时就这样了
nginx.conf

    server {
        listen       8888;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            fastcgi_pass 0.0.0.0:8080;

            auth_basic "Trac Realm"; 
            auth_basic_user_file $KEY_PATH/trac.htpasswd;

            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_param REMOTE_ADDR           $remote_addr;
            fastcgi_param SERVER_PROTOCOL       $server_protocol;
            fastcgi_param SERVER_PORT           $server_port;
            fastcgi_param SERVER_NAME           $server_name;
            fastcgi_intercept_errors off;

            # for authentication to work
            fastcgi_param AUTH_USER $remote_user;
            fastcgi_param REMOTE_USER $remote_user;
        }

其中
auth_basic “Trac Realm”;
auth_basic_user_file $KEY_PATH/trac.htpasswd;

# for authentication to work
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
是Trac授权用的,可以先不用管

当然弄好之后先要测试Nginx能否将Python转发给FastCGI处理,写个简单的测试fcgi.py放到$NGINX_HOME/html/下
其中fcgi.py的内容如下

执行python fcgi.py &
打开浏览器,键入http://localhost:8888/如果能看到Hello World字样就说明OK
当然这些端口号神马的都是根据自己的实际情况

3、安装Trac
你可以把它认为是Python的模块插件
所以安装方式和安普通模块是一样的
我这里编译安装
python setup.py build
sudo python setup.py install

接下来就是创建实例了,参考INSTALL
trac-admin /path/to/projectenv initenv

需要填些数据库连接,实例名字之类的,我这里数据库连接如下
mysql://trac:trac@127.0.0.1:3306/trac
是这种格式
DATABASE_TYPE://USERNAME:PASSWD@HOST:PORT/DATABASE_INSTANCE
在HOST那里你如果填的是localhost就可能会出下面这个错误
OperationalError: (2002, “Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)”)
将localhost换成127.0.0.1就不会报错了,原因是它指定的sock和你机器上实际的sock路径不一致,填IP就强制要求通过TCP/IP之类的去连,不用socket

安装完成之后可以用它自带的服务器测试下
执行tracd –port 8000 /path/to/projectenv
打开浏览器,键入http://localhost:8000/如果能看到Trac的东西就说明OK

4、整合,把我们的Trac部署到Nginx上去
很简单,写个trac-standalone-fcgi.py放到$TRAC_HOME/cgi-bin当中,这里的$TRAC_HOME是Trac本身安装的位置,不是trac-admin创建出来的实例(或工程,项目)的位置
简单的说如果你把Trac认为是Python的一个插件,那么这个$TRAC_HOME就是这个插件的位置
trac-standalone-fcgi.py的内容如下

执行python trac-standalone-fcgi.py &
当然你需要把之前打开的一些东西都停止,比如fcgi.py或tracd等
打开浏览器,键入http://localhost:8888/如果能看到Trac的东西就说明OK
注意这些端口号和地址,要理解清楚,弄清楚

5、权限配置
如果第四步成功搞定的话,你就可以浏览些内容了,但不会发现你无法添加内容等等
这里权限用户管理有好多种方法,具体参考官网说明,我这里是把用户信息放在key文件中的,采用basic认证的方式
就是那种user:passwd键值对形式存放的
这样做的话,先要生成这样的配置文件,可以用Apache的htpasswd工具来生成
我这里使用的$TRAC_HOME/contrib/htpasswd.py来生成的
./htpasswd.py -c -b $KEY_PATH/trac.htpasswd admin admin
./htpasswd.py -b $KEY_PATH/trac.htpasswd use1 use2
注意第二个就不用-c参数了,估计这里是第一个已经创建文件了,后面的就是往里面添加内容,所以不需要-c参数
有了这个用户密码文件,还要把它和我们的Nginx关联起来,在$NGINX_HOME/conf/nginx.conf中加这两行
auth_basic “Trac Realm”;
auth_basic_user_file $KEY_PATH/trac.htpasswd;
还需要和我们的实例(或工程,项目)关联起来,一般这里只需要增加个管理员就行了(方便在Web界面中操作),命令如下
trac-admin /path/to/projectenv permission add admin TRAC_ADMIN
你也可以help看下该命令更多的用法,比如
trac-admin /path/to/projectenv permission list

这样你再重启Nginx和trac-standalone-fcgi.py就可以看见需要你输入用户名密码的提示了,这是采用HTTP的认证方式,所以会哐哐的提示你输入用户名密码
你可以安装些插件来完成普通的基于表单的验证方式

不过你密码文件创建完成之后可以通过自带的服务器验证下是否成功
tracd -p 8000 –basic-auth=projectenv,$KEY_PATH/trac.htpasswd,” /path/to/projectenv
它提示你需要输入用户名密码,用管理员登录之后能看见Admin Tab,能创建Ticket就说明OK

我在部署在Nginx上的时候,开始死命的都看不见Admin Tab,不能创建Ticket,后来发现很多人也有类似的问题
后来在$NGINX_HOME/conf/nginx.conf加入了
# for authentication to work
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
就OK了

参考http://trac.edgewall.org/wiki/TracFastCgi

Leave a Reply

Your email address will not be published. Required fields are marked *