在领导和乡亲们的大力支持下,我们开始在项目组里推广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:69
和spec/models/repository_spec.rb:75
如果使用gitorious的人比较多的话可以配置mongrel cluster,具体参见Deploying Rails Applications。
部分参考资料:
用gitosis(python)来架git要简单方便高效得多。
谢谢推荐。