centos+nginx+redmine+gitosis安裝指南

 

說明

這篇文章我現在的主要目的是記錄自己安裝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. FQ 2. 找鏡像.

1. FQ對於服務器來說有點不太現實,而且Linux服務器FQ的設置估計大家都頭痛(我就特別頭痛),暫且不表,以後有時間慢慢研究。

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.5
1 gem installed
Installing 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. 安裝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.5.tgz
$ cd Python-2.7.5
$ ./configure
$ make
$ make install

安裝完之後,可能需要手工建立一個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了 :)

參考了一篇其他博友寫的文章

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.2.tar.gz
mv redmine-2.3.2 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 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目錄。

 server {
        listen     80;
        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 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那個網站上並沒有做過多的解釋,安裝的時候我還破費了些心機去猜測。

  • Gitosis URL
    gitosis-admin.git項目的ssh路徑,需要改成 "git@server:/home/git/repositories/gitosis-admin.git
    ",其中的server請替換成你服務器的server地址。


  • 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 755 /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/”

 

步驟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項目是不行的,至於爲什麼不行,我也沒搞清楚。就從服務器端創建吧。

 

經過漫長的安裝,終於見到了

 

至此徹底安裝完畢。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章