gitorious

在领导和乡亲们的大力支持下,我们开始在项目组里推广git,为了方便大家使用,很希望有一个类似github之类的东西,可惜github不是开源软件。后来找到了gitorious,一个基于rails的应用。

以前从没接触过rails,第一次部署rails应用,感觉头很大,gitorious还没有一个详细的部署文档,只好硬着头皮自己来,网上搜索了一大堆资料,最终成功的搭建起来。

首先创建一个用户git,如果选择其它用户名会导致更多步骤来配置gitorious,所以没有特殊原因,尽量使用这个用户名。以下操作均以该用户操作,除非显示地使用了sudo

在局域网里搭建gitorious需要安装的软件有apache, mysql, sendmail, ruby, rubygems, imagemagick, sphinx, apg和aspell等应用程序,另外还需要libmagick9-dev, libmysqlclient15-dev, libmysqlclient15off, libonig2, libonig-dev, libaspell-dev等程序库。装好rubygems之后最好更新一下,否则可能出现错误,方法是:

$ sudo gem update --system

现在可以安装所有需要的gem了,

$ sudo gem install rake rails BlueCloth mime-types oniguruma textpow chronic rmagick ruby-openid mysql raspell ultrasphinx ruby-yadis mongrel mongrel_cluster

接下来将gitorious/config下面的gitorious.sample.yml和database.sample.yml分别复制一份,名字改为gitorious.yml和database.yml。然后运行

$ apg -m 64

随便选择一行输出,替换掉gitorious.yml文件的cookie_secret字段的值。这一步一定要做,否则会出现500错误。如果想用sendmail发邮件,在config/environments/production.rb文件里添加一行config.action_mailer.delivery_method = :sendmail。接下来创建数据库,

$ mysql -u root
> create database gitorious_production;
> exit

接下来创建需要的表

rake db:migrate RAILS_ENV=production

如果找不到rake的话可以试试ruby /var/lib/gems/1.8/gems/rake-0.8.1/bin/rake。这时如果出现找不到/tmp/mysql.sock错误,把database.yml文件里面的localhost换成127.0.0.1。然后运行

$ ./script/server -e production

当server起来之后,尝试访问http://0.0.0.0:3000/,如果成功看到首页,那么就成功了。按CTRL+C退出。

下面添加搜索功能,

$ cp vendor/plugins/ultrasphinx/examples/default.base config/ultrasphinx/

然后把default.base里面的path改为#{RAILS_ROOT}/db/sphinx/,把vendor/plugins/ultrasphinx/tasks/ultrasphinx.base文件里面包围#{Ultrasphinx::CONF_PATH}的单引号去掉,一共三处。再运行

$ rake ultrasphinx:configure RAILS_ENV=production
$ rake ultrasphinx:index RAILS_ENV=production
$ rake ultrasphinx:daemon:start RAILS_ENV=production

重新启动server,搜索功能就在了。注册一个帐号,收到激活邮件,激活帐号,成功。

不过如果真想让gitorious干活的话还要配置两个cron job

$ mkdir /path/to/gitorious/public/images/graphs
$ crontab -e

内容为:

*/5 * * * * /path/to/gitorious/script/task_performer
*/17 * * * * /path/to/gitorious/script/graph_generator

时间长短随意定,我选择5分钟运行一次task_performer,另外还要做的一件事是

$ sudo ln -s /path/to/gitorious/script/gitorious /bin/gitorious

但是,如果想给其他人使用的话,http://0.0.0.0:3000/这样的东西是拿不出手的,为此我们需要使用apache做一个reverse proxy server。首先打开mod_proxy,

$ sudo a2enmod proxy_http

然后添加一个配置文件gitorious.conf

<IfModule mod_proxy.c>
    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000/
</IfModule>

重启apache,用域名访问,如http://example.com/,如果发现没有css和image,确认一下gitorious.conf里面的http://0.0.0.0:3000/结尾的”/“是否在,没有的话,加上它。重启apache再试一下。

最后还需要一点配置,使用户可以做git clone。启动git-daemon,

$ ./script/git-daemon

这样用户就可以使用git clone git://...了,为了能够通过http方式clone,还要配置二级域名,如http://git.example.com,指向#{repository_base_path}所在的路径,也可以使用http://example.com/git/的方式,但是要修改app/models/repository.rb:69spec/models/repository_spec.rb:75

如果使用gitorious的人比较多的话可以配置mongrel cluster,具体参见Deploying Rails Applications

部分参考资料:

2 thoughts on “gitorious

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据