centos+nginx+redmine+gitosis安装指南
说明这篇文章我现在的主要目的是记录自己安装redmine和gitosis的过程,可能写的有些糙,请各位读者见谅。我会在后面的时间里逐渐完善细节。但我想,这已经是网上迄今为止国内最详细的nginx+redmine+gitosis的安装文档了。 1. Redmineredmine是一款用Ruby开发的开源项目管理系统,非常符合我个人的使用习惯,用色和布局也是很主流的风格。
官方网址: http://www.redmine.org 对比了redmine和JIRA和Trac后,果断选择redmine.理由如下: Trac
不支持多项目,Ticket模式令人费解,大红的设计让人抓狂。 JIRA:
我就不说了,不免费啊,而且使用起来也注意到有一部分非技术人员对JIRA深恶痛绝,外加需要破解,实在不是我等免费开源爱好者的菜啊。 2. Gitosisgitosis是一个git服务,已经有段时间没有更新了,还用这个1是因为它是python的,这个我容易看懂,还有就是个人非常喜欢它的公钥模式和简单的配置。 gitosis可以和redmine通过插件的方式整合起来,这样redmine中的版本库就可以显示git项目的全部进展了。 官方的整合插件redmine-gitosis已经2年多没有更新了,所以并不兼容2.x以上的redmine版本, 不过好在我的人品大爆发, 我竟然在一篇老外的讨论贴的最底处看到一个回复, 说某人修改了redmine-gitosis插件,使其能够支持2.x版本redmine,最终是稍微有些不太顺的整合了redmine和gitosis(还是人品大爆发,具体看下面)。 安装1. Linux首先安装Linux, 这个没什么可说的, 我安装的是CentOS6.4, 选择的最小化安装。 2. 安装mysqlmysql 可以通过yum安装。 $ yum install -y mysql mysql-server
启动mysql $ /etc/init.d/mysqld start
连接数据库, 并设置数据库账号root的密码。 3. 安装nginx和rubynginx本来可以用yum的方式安装,但是用yum方式安装的nginx缺少运行redmine所需要的ruby passenger module (我对ruby不熟,如果不正确,请指正,但是安装方法是对的)。 所以需要手工下载源代码安装nginx, 并附加ruby passenger module. 不过我发现一个更好的方法来安装附加了ruby passenger module的nginx的方法。请看下面 首先安装ruby, 这个简单,使用yum 安装就可以了。 $ yum install -y ruby rubygems
装好ruby之后,需要做一件只有在天朝才需要做的事情... 因为官方的ruby网站被某组织墙掉了,所以只有2种解决办法, 1. FQ 2. 找镜像. 1. FQ对于服务器来说有点不太现实,而且Linux服务器FQ的设置估计大家都头痛(我就特别头痛),暂且不表,以后有时间慢慢研究。 2. 使用ruby镜像ruby.taobao.org。 感谢伟大的马云大师!!! 由于国内网络原因(你懂的),导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败。所以你会与遇到 gem install rack 或 bundle install 的时候半天没有响应,具体可以用 gem install rails -V 来查看执行过程。
使用说明: [url=] [/url]
$ gem sources --remove https://rubygems.org/$ gem sources -a http://ruby.taobao.org/$ gem sources -l*** CURRENT SOURCES ***http://ruby.taobao.org# 请确保只有 ruby.taobao.org$ gem install rails[url=] [/url]
然后安装bundle $ gem install bundler
如果出现像我这样的问题 Successfully installed bundler-1.3.51 gem installedInstalling ri documentation for bundler-1.3.5...ERROR: While executing gem ... (NoMethodError) undefined method `map' for Gem::Specification:Class
可以通过下面的方法解决 $ gem update --system
安装passenger $ gem install passenger
如果你已经像我一样之前就使用yum安装了nginx, 继续之前,请先使用下面的命令卸载nginx. $ yum erase nginx
使用passenger自带的一个命令安装nginx $ passenger-install-nginx-module
按照提示一步一步的操作,这个命令会自己下载最新版的nginx和编译passenger module. 回车,看到下面的画面 ok, 这个工具命令发现我们少装了一些库,它告诉我们不用担心,它将告诉我们怎么安装缺失的库。 回车 按照上面的提示,安装缺失的curl-devel $ yum install -y curl-devel
继续执行 $ passenger-install-nginx-module
跳过上面已经讲过的步骤,我们看到这个画面。 系统提示你自动安装或者自定义安装,我选择了1。 系统开始自动下载安装nginx和附加的module. 当出现询问安装位置的时候,我输入了我习惯的/usr/local/nginx目录。 在一堆密密麻麻的文本卷动上去之后,nginx就基本安装完了。 回车,我们看到这个工具给出了如何设置passenger站点的方法。 因为还没有装redmine,这里就先跳过站点的设置。 4. 安装gitosisgitosis是git的服务器端管理服务,能够让我们通过公钥的方式对开发者和相关人员进行授权,不用每个用户都开通ssh账号,安全性相对比较高。 首先要安装git, git安装不能使用yum install git来进行安装, 因为yum 自带的git版本是1.7.1, 会导致中文文件夹在redmine上的显示会是乱码格式。解决办法是安装git版本到1.7.2以上。 如果各位像我一样已经安装了git, 可以先通过git --version 查看下版本是否符合我们的需求。 git低版本会导致文件夹乱码的资料见: http://www.redmine.org/issues/9107 $ tar -zxf git-1.8.3.4.tar.gz$ cd git-1.8.3.4$ ./configure prefix=/usr/local$ make$ make install
尝试使用git命令,如果像我这样的显示,那么git就安装成功了。 $ git --versiongit version 1.8.3.4
5. 安装python 2.7 由于团队后端主开发语言是python, 为了统一python开发, 所以服务器也需要安装python的最新版2.7.5, yum 安装的python最新版是2.6x,不是2.7版本的,所以需要手工源码方式安装Python2.7版本。 [url=] [/url]
$ cd /usr/local/src$ wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz$ tar xf Python-2.7.5.tgz$ cd Python-2.7.5$ ./configure$ make$ make install[url=] [/url]
安装完之后,可能需要手工建立一个python的链接文件,否则输入python命令有可能打开的是python2.6。 $ ln /usr/local/bin/python2.7 /usr/bin/python
这样做完,yum工具命令就不能用了,原因是最新的yum工具只支持2.6版本,解决方法是 vi /usr/bin/yum
在打开的编辑器中将第一行的 #!/usr/bin/python
修改为 #!/usr/bin/python2.6
保存,退出,yum就可以恢复使用了,但是由于是手工安装python,会导致python最关键的一个工具setup tools的缺失,在需要安装python packages的时候会出现无法安装的局面,而yum install python-setuptools 的方式仅仅是将setuptools装在了python2.6版本上,这个可不行!!! 在研究了setuptools的介绍页面后, https://pypi.python.org/pypi/setuptools/0.9.8#unix-based-systems-including-mac-os-x 解决问题的方法如下: $ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python
python2.75版就此安装完毕。 6. 安装gitosis终于可以开始安装gitosis了  参考了一篇IT论坛博友写的文章 http://hi.baidu.com/jsexp/item/d96cbada0a4ac04cddf9beca 其中强调到 git环境默认是可以直接使用的,但需要为每个成员开ssh权限帐号,且各个仓库之间的交叉权限管理很麻烦,所以需要使用gitosis, 它无需为每个开发人员开设ssh帐号,安全方便。
gitosis原版已经很有没有更新了,所以现在github上有很多的IT论坛版本, 本来也没太想装gitosis,但是因为它是python实现的,而且据说易用性和特性还不错,而另一个可选gitlite是perl实现的,看资料说配置比较复杂,觉得还是用gitosis吧, 不过幸亏后面有人实现了gitosis在redmine 2.x以上的插件, 否则如果不能喝redmine进行配合,这个还真是不太推荐。 gitosis文件地址 https://github.com/ossxp-com/gitosis gitosis的安装方法如下: $ cd /usr/local/src$ git clone https://github.com/ossxp-com/gitosis.git$ cd gitosis$ python setup.py install
然后创建一个名称为git的用户和名称为git的用户组, 设置git用户的密码. $ useradd git$ groupadd git
设置git用户的密码 $ passwd git
将git用户设置为sudoers $ vi /etc/sudoers
添加一行git ALL=(ALL) ALL,如下所示 和允许git 以ssh连接服务器 $ echo "AllowUsers:git" >> /etc/ssh/sshd_config
现在需要在客户端生成ssh公钥,使用windows系统的朋友可以安装gitbash这个软件,既能使用git又能以bash的方式操作windows系统。我使用的是mac book pro, 所以下面主要以mac的操作来进行gitosis的配置。 在mac本地执行 $ ssh-keygen
ssh秘钥分公钥和私钥,带pub后缀的为公钥,只要上传公钥到服务器,就可以操作gitosis了。 如果你像我一样一开始发现ssh-keygen不存在,那么说明我们缺个了openssh的包,在mac上使用下面的方法安装(其它系统也是装openssh就可以了)。 $ sudo port install openssh
现在我们可以上传刚刚生成的公钥到服务器上了。 ssh秘钥一定要放在用户目录下的.ssh文件夹下,否则ssh将找不到秘钥。 上传公钥 scp ~/.ssh/id_virtual.pub root@[your_server_ip]:/tmp/
现在回到服务器端操作 切换到git账号。 $ su - git
这个时候我们会处于/home/git目录下。 执行如下的命令生成gitosis项目库。 gitosis-init < /tmp/id_virtual.pub
上面的id_virtual.pub是我刚才传到服务器上的由本地mac生成的公钥。 gitosis-int会在/home/git目录下生成一个名字叫做repositories的文件夹,里面有一个gitosis-admin.git文件夹,这个文件夹是保存用来设置git用户组和放置其它开发者公钥的git工程目录。 现在我们回到本地客户端进行操作, 以后所有的管理员操作就通过git 管理服务器端的gitosis-admin.git来进行设置。 选择你的开发目录, 我习惯使用客户端登陆账号下的Develop目录,所以我们打开mac的terminal终端,输入下面的命令 $ cd ~ # 切换到账号主目录$ mkdir Develop # 创建开发目录$ cd Develop$ git clone git@192.168.1.111:/home/git/repositories/gitosis-admin.git #服务器地址请自己修改
这样整个gitosis-admin项目就保存到客户端了 我们打开这个目录,看看它有什么 - gitosis.conf
这个文件是设置gitosis开发组的设置文件,我们可以通过这个文件设置用户组和用户的项目权限。 - keydir
将IT论坛开发者的公钥(公钥名称以“用户名.pub的方式或者用户@邮箱.pub的方式”)放置到这个文件夹,push到服务器上后,IT论坛开发者就可以用公钥访问指定的git项目了。
我就不在这里表述了。 7. 安装Redmine回到服务器端,我们开始安装redmine。 在正式安装之前,建议阅读下官方的redmine安装指南。 http://www.redmine.org/projects/redmine/wiki/RedmineInstall 说明: 官方的安装指南是很好,但是缺少了我想要的2个插件的安装,一个是知识库插件knowledge,一个是gitosis插件, 所以我在这里结合了redmine和附加的知识库插件和gitosis插件讲下安装过程。 步骤1 下载redmine项目。我个人比较倾向于将站点放置在/var/www/目录下,所以我们切换到/var/www目录下,如果该目录不存在,请创建。 我选择安装redmine的稳定版本,我安装时最新的稳定版本为2.3.2。 wget http://rubyforge.org/frs/download.php/77023/redmine-2.3.2.tar.gztar xf redmine-2.3.2.tar.gzmv redmine-2.3.2 redminecd redmine
出于国内的网络的特殊情况,需要修改Gemfile,将Gemfile第一行的source修改为: source 'http://ruby.taobao.org'
步骤2 设置数据库打开mysql数据库,执行下面的语句创建redmine空数据库和设置redmine数据库账号。 CREATE DATABASE redmine CHARACTER SET utf8;CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password'; # 这里的my_password是你的redmine数据库账号的密码GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
步骤3 数据库连接设置复制config目录下的database.yml.example到config/database.yml。 $ cp config/database.yml.example config/database.yml
编辑database.yml,设置你的数据库连接,由于我们要部署生产模式,所以只需要设置production配置节就可以了,如下图所示。 步骤4 下载gitosis插件gitosis插件在redmine官方网站上给出的版本只支持redmine 1.x版本,而我们安装的是2.x版本,肯定不兼容,但是好在有个老美跟我一样特别倾向于使用gitosis和redmine的结合,单独自己改造了下gitosis的插件,使其支持redmine2.x版本了。 gitosis插件网址: https://github.com/scambra/redmine_gitosis 我们直接通过git在服务器端下载这个插件的最新源代码就可以。 $ cd plugins/ 首先切换到redmine插件目录$ git clone https://github.com/scambra/redmine_gitosis.git
我们通过ls命令看下,会发现这个目录多了个redmine_gitosis文件夹。 步骤5 下载知识库插件redmine本身没有知识库,我们可以安装一个名字叫做knowledge的插件来增加知识库功能。 知识库插件网址: https://github.com/alexbevi/redmine_knowledgebase 同样通过git在服务器端下载这个插件的最新源代码。 $ git clone https://github.com/alexbevi/redmine_knowledgebase.git
切换到redmine_knowledgebase目录下,修改Gemfile文件,将第一行的source修改为 source 'http://ruby.taobao.org'
步骤6 安装依赖项切换回redmine项目目录。 $ cd /var/www/redmine
由于redmine使用ImageMagick作为生成图片的依赖库,我们先通过yum安装ImageMagick. $ yum install ImageMagick
在前面的步骤中我们为了安装附带passenger模块的nginx,已经安装了bundler, 所以我们直接可以以bundle的方式进行依赖项安装, 由于我们是使用production模式,所以排除掉development和test的安装。 $ bundle install --without development test
步骤7 Session存储秘钥$ rake generate_secret_token
步骤8 数据库表结构初始化首先生成redmine的数据库表结构和初始化数据 $ RAILS_ENV=production rake db:migrate # 生成表结构$ RAILS_ENV=production rake redmine:load_default_data $ 初始化数据
然后生成插件知识库的数据库表结构 $ RAILS_ENV=production rake redmine:plugins:migrate NAME=redmine_knowledgebase
生成gitosis查件的数据库表结构 $ RAILS_ENV=production rake redmine:plugins:migrate NAME=redmine_gitosis
步骤9 创建上传文件目录和设置文件夹权限mkdir -p tmp tmp/pdf public/plugin_assetssudo chown -R redmine:redmine files log tmp public/plugin_assetssudo chmod -R 755 files log tmp public/plugin_assets
步骤10 测试redmine的安装执行下面的命令测试redmine的安装是否正确。 $ ruby script/rails server webrick -e production
然后在客户端,http访问服务器的3000端口 http://server:3000 如果你像我一样看到这个画面,表示redmine的安装成功了。
步骤11 设置nginx站点由于我们已经编译了ruby passenger 模块进nginx,所以我们现在可以修改nginx的配置来设置redmine站点了。 $ vi /usr/local/nginx/conf/nginx.conf
插入下面的server设置,要确保root的指向是我们刚才创建的redmine站点的public目录。 [url=] [/url]
server { listen 80; server_name redmine.yoursite.com; # yoursite.com是我瞎编的域名,请用你自己的域名代替 root /var/www/redmine/public; # <- 确保指向到public目录 passenger_enabled on; }[url=] [/url]
重新启动nginx,如果上面你填写的server_name真实存在的话,并且你设置了dns那当然没有问题,否则就要像我一样设置客户端的hosts文件来模拟域名。 至此!!我们好像已经全部装完了... 但是... redmine的执行账号是redmine,而gitosis的执行账号是git, 这两个账号分别属于不同的用户组,那么。。。会出现什么情况呢? 请看下一大节。 8 Linux系统权限设置redmine和gitosis的账号不同,所以访问权限是不一样的,我们需要修改一些权限,来让redmine能够读取gitosis. 咱们先看下当前的git文件夹的权限 竟然是700哎,修改文件夹/home/git的内部全部文件和文件夹的权限为755 $ chown -R 755 /home/git
9 打开redmine站点, 开始设置站点访问redmine.yoursite.com 步骤1 设置redmine,点击最上侧的Administration管理入口,系统显示下面的画面。 选择左侧的Settings选项点击,系统显示下面的画面。 redmine的基本设置都在这里,我们先设置中文,选择Display选项卡,在打开的页面中设置Default language的选项为Simplified Chinese(简体中文)。 其它的请自己研究设置吧。 步骤2 设置gitosis插件选择管理页面的Plugins, 页面显示Plugins的页面,安装的gitosis插件和knownledgebase插件都在这里显示出来了。 点击Redmine gitosis plugin右侧的配置选项 我说下上面的字段如何填写,这块是gitosis插件的修改版的作者新增加的功能,但是github那个网站上并没有做过多的解释,安装的时候我还破费了些心机去猜测。
步骤3 设置项目的版本库 打开你创建好的项目,选择最右侧的设置选项。 摘自:http://www.cnblogs.com/csharpsharper/p/3250913.html
选择repositories选项卡 选择 New repository 填写Identifier,点击Create. 系统显示已经添加的版本库页面。 点击版本,系统会显示Repository does not exist. Create one using the instructions below. 按照下面的提示安装。但是在执行下面的执行之前,请先设置gitosis-admin.git项目中的gitosis.conf文件。 添加要创建的项目权限并push到服务上。 如下所示: 然后在服务器端创建对应的项目.git文件夹。 $ mkdir tnb.git # 我的项目名是tnb$ cd tnb.git$ git --bare init
好像从本地创建git项目是不行的,至于为什么不行,我也没搞清楚。就从服务器端创建吧。
经过漫长的安装,终于见到了
至此彻底安装完毕。
centos+nginx+redmine+gitosis安装指南
|