说明

这篇文章我现在的主要目的是记录自己安装redmine和gitosis的过程,可能写的有些糙,请各位读者见谅。我会在后面的时间里逐渐完善细节。但我想,这已经是网上迄今为止国内最详细的nginx+redmine+gitosis的安装文档了。

1. Redmine

redmine是一款用Ruby开发的开源项目管理系统,非常符合我个人的使用习惯,用色和布局也是很主流的风格。

官方网址:

http://www.redmine.org

对比了redmine和JIRA和Trac后,果断选择redmine.理由如下:

Trac
不支持多项目,Ticket模式令人费解,大红的设计让人抓狂。

JIRA:
我就不说了,不免费啊,而且使用起来也注意到有一部分非技术人员对JIRA深恶痛绝,外加需要破解,实在不是我等免费开源爱好者的菜啊。

2. Gitosis

gitosis是一个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. 安装mysql

mysql 可以通过yum安装。

$ yum install -y mysql mysql-server

启动mysql

$ /etc/init.d/mysqld start

连接数据库, 并设置数据库账号root的密码。

3. 安装nginx和ruby

nginx本来可以用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. 翻墙 2. 找镜像.

1. 翻墙对于服务器来说有点不太现实,而且Linux服务器翻墙的设置估计大家都头痛(我就特别头痛),暂且不表,以后有时间慢慢研究。

2. 使用ruby镜像ruby.taobao.org。 感谢伟大的马云大师!!!

大家可以先访问下http://ruby.taobao.org看看淘宝的帮助说明。

由于国内网络原因(你懂的),导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败。所以你会与遇到 gem install rack 或 bundle install 的时候半天没有响应,具体可以用 gem install rails -V 来查看执行过程。

使用说明:

$ 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

然后安装bundle

$ gem install bundler

如果出现像我这样的问题

Successfully installed bundler-1.3.
gem installed
Installing ri documentation for bundler-1.3....
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. 安装gitosis

gitosis是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

需要源代码安装git,从http://code.google.com/p/git-core/downloads/list下载了最新的稳定版本git-1.8.3.4.tar.gz, 通过SecureCRT的rz命令上传到服务器上的/usr/local/src目录,使用下面的命令安装git

$ 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 --version
git version 1.8.3.4

5. 安装python 2.7

由于团队后端主开发语言是python, 为了统一python开发, 所以服务器也需要安装python的最新版2.7.5, yum 安装的python最新版是2.6x,不是2.7版本的,所以需要手工源码方式安装Python2.7版本。

$ cd /usr/local/src
$ wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz
$ tar xf Python-2.7..tgz
$ cd Python-2.7.
$ ./configure
$ make
$ make install

安装完之后,可能需要手工建立一个python的链接文件,否则输入python命令有可能打开的是python2.6。

$ ln /usr/local/bin/python2. /usr/bin/python

这样做完,yum工具命令就不能用了,原因是最新的yum工具只支持2.6版本,解决方法是

vi /usr/bin/yum

在打开的编辑器中将第一行的

#!/usr/bin/python

修改为

#!/usr/bin/python2.

保存,退出,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了 :)

参考了一篇其他博友写的文章

http://hi.baidu.com/jsexp/item/d96cbada0a4ac04cddf9beca

其中强调到

git环境默认是可以直接使用的,但需要为每个成员开ssh权限帐号,且各个仓库之间的交叉权限管理很麻烦,
所以需要使用gitosis, 它无需为每个开发人员开设ssh帐号,安全方便。

gitosis原版已经很有没有更新了,所以现在github上有很多的其他版本, 本来也没太想装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
    将其他开发者的公钥(公钥名称以“用户名.pub的方式或者用户@邮箱.pub的方式”)放置到这个文件夹,push到服务器上后,其他开发者就可以用公钥访问指定的git项目了。

具体的gitosis的使用文档大家可以参照蒋鑫写的《git权威指南》http://book.douban.com/subject/6526452/

我就不在这里表述了。

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.gz
tar xf redmine-2.3..tar.gz
mv redmine-2.3. redmine
cd 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_assets
sudo chown -R redmine:redmine files log tmp public/plugin_assets
sudo chmod -R 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目录。

 server {
listen ;
server_name redmine.yoursite.com; # yoursite.com是我瞎编的域名,请用你自己的域名代替
root /var/www/redmine/public; # <- 确保指向到public目录
passenger_enabled on;
}

重新启动nginx,如果上面你填写的server_name真实存在的话,并且你设置了dns那当然没有问题,否则就要像我一样设置客户端的hosts文件来模拟域名。

至此!!我们好像已经全部装完了... 但是...

redmine的执行账号是redmine,而gitosis的执行账号是git, 这两个账号分别属于不同的用户组,那么。。。会出现什么情况呢? 请看下一大节。

8 Linux系统权限设置

redmine和gitosis的账号不同,所以访问权限是不一样的,我们需要修改一些权限,来让redmine能够读取gitosis.

咱们先看下当前的git文件夹的权限

竟然是700哎,修改文件夹/home/git的内部全部文件和文件夹的权限为755

$ chown -R  /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那个网站上并没有做过多的解释,安装的时候我还破费了些心机去猜测。

  • Gitosis URL
    gitosis-admin.git项目的ssh路径,需要改成 "git@server:/home/git/repositories/gitosis-admin.git
    ",其中的server请替换成你服务器的server地址。
  • Gitosis identity file
    redmine要想能够管理gitosis,必须得设置私钥的位置,私钥就是之前我们客户端创建的.ssh文件夹下的私钥文件,我们将私钥文件传到服务器上。
  • 在客户端执行:
    $ scp ~/.ssh/id_virtual root@server:/home/redmine/

    在服务器端执行:

    $ mkdir /home/redmine/.ssh # 创建.ssh文件夹
    $ mv /home/redmine/id_virtual /home/redmine/.ssh/ # 将客户端传上来的私钥保存到.ssh文件夹
    $ chmod -R /home/redmine # 设置redmine文件夹的执行权限

    现在我们可以回到设置网页上,设置Gitosis identity file的值为"/home/redmine/.ssh/id_virtual"

  • Base Path
    这是设置gitosis的项目文件的具体存储路径的,设置为"/home/git/repositories/"
  • Developer base URL(s)
    设置开发者基础路径,设置为“git@server:/home/git/repositories/”
  • Read-only base URL(s)
    设置只读路径,暂时不知道怎么改,也不用改

步骤3 设置项目的版本库

打开你创建好的项目,选择最右侧的设置选项。

选择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安装指南的更多相关文章

  1. Ubuntu+Ruby+MySQL+Nginx+Redmine部署记录

    (2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年7月26日) 周五的时候老大布置了一个任务下来,要部署一个Redmine用于研发部,同时升级工作室的Redmine ...

  2. centos 6.5下安装mysql+nginx+redmine 3.1.0 笔记

    centos 6.5下安装mysql+nginx+redmine 3.1.0 笔记 目录[-] 过程 1.安装RVM 2.利用rvm安装 Ruby 1.9.3 并设为默认 3.安装rails 4.安装 ...

  3. CentOS+Nginx+PHP+MySQL详细配置(图解)

    原文地址: http://www.jb51.net/article/26597.htm CentOS+Nginx+PHP+MySQL详细配置(带有图解),需要的朋友可以参考下.   一.安装MySQL ...

  4. 1分钟完美安装最新CentOS+Nginx+PHP-FPM+MySQL

    PHP 5.3.1 MySQL 5.0.89 Nginx 0.8.33 或 0.7.65 (可选) 现在,我们可以快速全自动搞定 CentOS + Nginx + PHP-FPM + MySQL 的安 ...

  5. centos下配置gitosis服务器遇到的困难

    这篇博客主要讲的是在centos下配置gitosis遇到的问题. 背景:centos7.2 64 :gitosis2.0 1.困难1 1)产生的问题及原因.gitosis没有安装成功,没有出现fini ...

  6. 在阿里云服务器上配置CentOS+Nginx+Python+Flask环境

    在阿里云服务器上配置CentOS+Nginx+Python+Flask环境 项目运行环境 阿里云(单核CPU, 1G内存, Ubuntu 14.04 x64 带宽1Mbps), 具体购买和ssh连接阿 ...

  7. Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)

    Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建) 具体案例:局域网内有两台主机,一台Linux.一台Windows,现在需要配置一台Cacti监控服务器对这两台 ...

  8. Centos+Nginx+NetCore3.1

    Centos+Nginx+NetCore3.1部署 1 先将vs2019升级到,16.4.0版本 2.新建一.netcore3.1的web程序 3.编译后将项目上传到centos服务器 4.配置ngi ...

  9. CentOS + Nginx 的常用操作指令总结

    CentOS + Nginx 的常用操作指令总结 一. 关于CentOS 查看 yum 源是否存在 yum list | grep nginx 如果不存在 或者 不是自己想要的版本 可以自己设置Ngi ...

随机推荐

  1. #leetcode刷题之路35-搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置.你可以假设数组中无重复元素. 示例 1:输入: [1,3,5,6], 5输出: ...

  2. 557. Reverse Words in a String III (5月25日)

    解答 class Solution { public: string reverseWords(string s) { string temp,result; while(1){ if(s.find( ...

  3. chromium之at_exit

    // This class provides a facility similar to the CRT atexit(), except that // we control when the ca ...

  4. GoogleHacking相关技巧

    转自https://www.cnblogs.com/anka9080/p/googlehack.html 0x 01 GoogleHack语法 Site 指定域名 Intext 正文中出现关键字的网页 ...

  5. 10.安装使用jenkins及其插件

    持续集成 1.安装jenkins 安装依赖 [root@git ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel rpm包下载: ...

  6. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  7. ArrayList的源码分析(基于jdk1.8)

    1.初始化 transient Object[] elementData; //实际存储元素的数组 private static final Object[] DEFAULTCAPACITY_EMPT ...

  8. django的Request-7

    目录 1. 从url中获取截取 2. QueryDict (1). QueryDict.get(key, [default]) (2). QueryDict.getlist(key, [default ...

  9. java 用接口计算圆柱的体积和面积并添加颜色

    import java.util.Scanner; class Test { public static void main(String[] args) { fangfa i = new fangf ...

  10. go学习笔记-错误处理

    错误处理 通过内置的错误接口提供了非常简单的错误处理机制. error类型是一个接口类型 type error interface { Error() string } 可以在编码中通过实现 erro ...