在寫了《如何在Ubuntu Server 11.10上安裝Gitorious》這篇博文之後,很多兄弟反應這個安裝的過程過於複雜,能否找到一個在Ubuntu上安裝比較簡單的Git系統,得益於Google和百度,本人在網上找到了GitLab,正如其名字長度那樣,相對於Gitorious來說在Ubuntu上的安裝要簡單不少,故將其安裝過程記下即也可以滿足兄弟們的要求,也可以備查。
一、準備工作
根據GitLab的官方文件要求,安裝GitLab需要以下軟體:
- ruby 1.9.2
- sqlite
- ubuntu/debian
- pygments lib – sudo pip install pygments
- gitolite
因此在安裝GitLab之前需要做一些準備工作。
1、設定安裝環境(安裝一些必要軟體)
- sudo apt-get update
- sudo apt-get dist-upgrade -y
- sudo apt-get install git-core openssh-server sendmail curl gcc libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev python-setuptools
*安裝VMWare Tools(這是在虛擬機器環境下需要安裝的,如果不是的可忽略)
- sudo apt-get update -y
- sudo apt-get dist-upgrade -y
- sudo apt-get install dkms build-essential gcc linux-headers-$(uname -r) -y
- sudo mkdir -p /media/cdrom
- sudo mount /dev/cdrom /media/cdrom
- cp /media/cdrom/VM* /tmp
- sudo umount /media/cdrom
- cd /tmp
- tar -xzvf VMware*.gz
- cd vmware-tools-distrib/
- sudo ./vmware-install.pl -d
- sudo apt-get autoremove -y
- sudo shutdown -r now
上面關於虛擬機器的部分是摘抄官網的,因為沒環境測試,所以也只是原樣照搬了。:)
2、設定專門的帳號
接下來我們需要建立一個專門的gitlabhq使用者帳號來執行程式,這個帳戶需要設定密碼,因為需要將它加入到admin組來執行sudo:
- sudo useradd -s /bin/bash -m -G admin gitlabhq
- sudo passwd gitlabhq
現在使用gitlabhq使用者帳號登入機器:
- ssh gitlabhq@localhost
3、配置git全域性變數並生成SSH金鑰
- git config --global user.email "admin@local.host"
- git config --global user.name "GitLabHQ Admin User"
由於gitlabhq使用者稍後要使用SSH金鑰訪問稍後建立git使用者帳號,執行git命令,所以需要生成gitlabhq使用者的SSH金鑰:
- ssh-keygen -t rsa
注意:在出現提示詢問檔案儲存位置時直接回車,在要求輸入和確認passphrase時也按回車。
4、安裝Ruby 1.9.2、RubyGem和Rails
Ubuntu 11.10中的Ruby包,其版本是1.8的,所以需要安裝包ruby1.9.2。由於在Ubuntu 11.10中的Ruby1.9.1包中ruby版本實際上是Ruby1.9.2,之所以包名為Ruby1.9.1是因為該版本為1.9.1的“庫相容版本”,所以可以直接安裝包Ruby1.9.1即可,然後更新rubygem並安裝rails。
- sudo apt-get install ruby1.9.1-full
- sudo update-alternatives --config ruby
- sudo update-alternatives --config gem
- sudo gem install rails
注意兩點:1)、02-03行命令是在安裝了其他ruby版本包時使用;2)、如果在安裝rails時出現“RubyGems will revert to legacy indexes degrading performance.”之類的錯誤時,修改~/.gemrc檔案後重試(有時要試多次才進行安裝,一般來說都會3-6次之間,下面的bundle命令也是如此,不知道是不是偉大的牆在起作用,看你的運氣了!):
- vi ~/.gemrc
- ---
- :backtrace: false
- :benchmark: false
- :bulk_threshold: 1000
- :sources:
- - http://gems.rubyforge.org/
- - http://gems.github.com/
- - http://gems.rubyonrails.org/
- :update_sources: true
- :verbose: true
5、安裝和設定Gitolite
Gitolite 是一款 Perl 語言開發的 Git 服務管理工具,通過公鑰對使用者進行認證,並能夠通過配置檔案對寫操作進行基於分支和路徑的的精細授權,它是採用 SSH 協議並且使用 SSH 公鑰認證的。Gitolite開始於 2009年8月,其作者當時是受到了 Gitosis 的啟發,開發了這款功能更為強大和易於安裝的軟體。對於Gitolite的命名,作者原意是 Gitosis 和 lite 的組合,不過因為 Gitolite 的功能越來越強大,已經超越了 Gitosis,因此作者笑稱 Gitolite 可以看作是 Github-lite —— 輕量級的 Github。
安裝Gitolite也十分簡單,首先新增git使用者帳號並將其加入git組:
- sudo adduser
- --system
- --shell /bin/sh
- --gecos `git version control`
- --group
- --disabled-password
- --home /home/git
- git
- sudo usermod -a -G git `eval whoami`
然後將生成的gitlabhq使用者的公鑰拷到git使用者目錄中:
- sudo cp ~/.ssh/id_rsa.pub /home/git/rails.pub
接下來以git使用者的名義將gitolite原始檔下載的git使用者家目錄中:
- sudo -u git -H git clone git://github.com/gitlabhq/gitolite ~git/gitolite
再以git使用者的名義安裝gitolite
- sudo -u git -H /home/git/gitolite/src/gl-system-install
在這裡該命令會提示關於目錄的警告資訊,不用理會。直接執行下列命令:
- sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup ~/rails.pub"
在這裡將會出現vim文字編輯器的編輯介面,請將其中的REPO_UMASK=0077改為REPO_UMASK=0007,然後儲存退出(退出編輯狀態ESC,然後使用:x)。關於如何在vim中編輯這裡就不做說明了,我偷個懶,反正有谷歌和百度。:)
最後設定庫目錄的許可權:
- sudo chmod -R g+rwX ~git/repositories/
- sudo chown -R git:git ~git/repositories/
OK,設定完了之後,重新進入一次gitlabhq使用者,以使gitlabhq使用者生效:
- exit
- ssh gitlabhq@localhost
二、安裝和設定GitLab
1、安裝GitLab
- cd ~
- git clone git://github.com/gitlabhq/gitlabhq.git ~/gitlabhq
- cd gitlabhq
- sudo easy_install pygments
- sudo gem install bundler
- sudo gem install linecache19 -- --with-ruby-include=/usr/include/ruby-1.9.1/ruby/
- bundle install --without development test
注意:linecache19的安裝是必須要指定with-ruby-include引數的,否則將會在後面的bundle install中出錯!
2、設定資料庫
- bundle exec rake db:setup RAILS_ENV=production
- bundle exec rake db:seed_fu RAILS_ENV=production
注意:執行01行的rake db:setup語句時,如果出現“unititialized constant Rake::DSL”,則需要在GitLab根目錄中的Rakefile檔案中新增以下語句(參見http://stackoverflow.com /questions/6268518/uninitialized-constant-rakedsl-in-ruby-gem)來解決,如未出現上述出錯資訊,可忽略:
- require `rake/dsl_definition`
- require `rake`
3、配置GitLab
編輯GitLab的配置程式:
- vi ~gitlabhq/gitlabhq/config/gitlab.yml
將下列內容
- git_host:
- system: gitolite
- admin_uri: git@localhost:gitolite-admin
- base_path: /home/git/repositories/
- host: gitlab
- git_user: git
- # port: 22
修改為:
- git_host:
- system: gitolite
- admin_uri: git@localhost:gitolite-admin
- base_path: /home/git/repositories/
- host: gitlabhq.your.domain
- git_user: git
- # port: 22
其中03和05行中的gitlabhq.your.domain是伺服器的域名。
啟動服務
- cd ~gitlabhq/gitlabhq
- bundle exec rails s -e production
三、測試服務
如果一切OK的話,就可以在瀏覽器上輸入:http://server.ip:3000/ 來測試該服務了,使用以下資訊登入:
- Email: admin@local.host
- Password: 5iveL!fe
接下來您可以在admin中建立一個新的使用者,注意該使用者在建立時要花費一段時間,請耐心等待。在該使用者生成成功後,您需要按照前面的方法在客戶機上生成該使用者的金鑰(Windows下可以使用Git for Windows中的Git Bash來代替):
- ssh-keygen -t rsa -C "your_email@youremail.com"
然後用新使用者登入,點選GitLab中My profile>Keys>Add new按鈕,將生成的SSH公鑰貼到彈出對話方塊的Key中,Title可隨便填,我一般是使用使用者_機器名這種格式,然後點選Save按鈕。
在儲存使用者公鑰之後,就可測試是否可以通過公鑰來訪問伺服器上的git使用者,執行git命令:
- ssh -T git@gitlabhq.your.domain
其中,gitlabhq.your.domain是伺服器的域名。如果出現”Agent admitted failure to sign using the key”錯誤,並提示輸入git使用者密碼,那麼請在客戶機上使用以下命令將使用者私鑰加進來 (根據個人的密匙命名不同更改 id_rsa):
- ssh-add ~/.ssh/id_rsa
- ssh -T git@gitlabhq.your.domain
hello your_email_youremail_com_1324608633, this is gitolite v2.2-11-g8c4d1aa running on git 1.7.5.4 the gitolite config gives you the following access: @R_ @W_ testing
再次訪問git,如出現類似02行資訊時,則表明設定成功。
四、安裝和配置 Nginx和Passenger
1、解除安裝Apache2
- sudo apt-get autoremove apache2*
- sudo dpkg --purge apache2*
2、安裝Nginx和Passenger模組
- sudo gem install passenger
- sudo passenger-install-ngnix-module
注意:02行語句會檢查編譯Ngnix和Passenger模組所需要的工具,然後詢問你是否有Ngnix的原始碼,如果沒有的話,就選1,會自動下載,如果有的話,就選2,並告之原始碼所在位置。在這裡選擇1。
3、建立執行Nginx服務的使用者
- sudo adduser --system --no-create-home --disabled-login --disabled-password --group nginx
4、將Nginx設定開機啟動指令碼
- wget -O init-deb.sh http://library.linode.com/assets/660-init-deb.sh
- sudo mv init-deb.sh /etc/init.d/nginx
- sudo chmod +x /etc/init.d/nginx
- sudo /usr/sbin/update-rc.d -f nginx defaults
5、將Nginx設定為GitLab的伺服器
- sudo vi /opt/nginx/conf/nginx.conf
- user gitlabhq staff;
- # ---
- server {
- listen 80;
- server_name gitlabhq.your.domain;
- root /home/gitlabhq/gitlabhq/public;
- passenger_enabled on;
- }
- # ---
其中,07行的gitlab.yourdomain.com要改為你的域名。
6、啟動Nginx
- sudo /etc/init.d/nginx start
五、測試服務
在瀏覽器中輸入http://gitlab.yourdomain.com/來測試GitLab能是否正常工作。如果一切正常的話,就可以打完收功了!