有一個 GUI 的界面對我們的親和力總是比較高的,即使是習慣 Coding 的人還是會想有一個好的介面來使用 Git,諸如 github 與 bitbucket 此類的 Code hosting,也都設計了想當好的 Web Interface 提供相當好的使用體驗。如果我們想要有好的界面,但是又想自己 Hosting Code 在自己的伺服器呢?目前有許多 Open Source 的專案提供了這類的 Web 應用,我比較喜歡的是 Indefero(基於PHP) 和 Gitlab(基於Ruby) 這兩套。Indefero 是類似 Google Code 的網站,而 GitLab 則是類似 Github 的界面。
由於個人比較喜歡 GitLab 的界面,所以雖然對 Ruby 不是很熟悉,決定來挑戰一下安裝 GitLab。參考了 Tsung's Blog:將 GitLab 架設 於 Ubuntu 12.04 (Precise) 和 官方的安裝說明文件,不同的地方主要是在前述方法會成爲主要的 Root 網站,但我運行的伺服器還有運行其他的 Web 服務,所以要安裝在非主目錄。尋找解決方法和測試,花了將近 8 個小時,爲了方便自己記憶,決定記錄下整個過程。
Indefero |
GitLab |
套件需求
- Python 2.5+
- ruby 1.9.3+
- git 1.7.10+
- redis 2.0+
- MySQL(or PostgreSQL)
基本環境安裝
- 更新套件庫資料
$ sudo apt-get update
$ sudo apt-get dist-upgrade - 安裝 VIM 作爲編輯工具,並設定爲預設編輯器(若已安裝請略過)
$ sudo apt-get install -y vim
$ sudo update-alternatives --set editor /usr/bin/vim.basic - 安裝必要的套件
$ sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate
- 確定 Python 的版本,必須是 2.5+
$ python --version
- 確認能夠使用 python2 使用 Python,如果不行請自行建立連結
$ python2 --version
# 如果出現 command not found 錯誤請建立連結
$ sudo ln -s /usr/bin/python /usr/bin/python2 - 安裝 python-docutils
$ sudo apt-get install -y python-docutils
確認 Git 安裝的版本必須要在 1.7.10 以上
- 檢查目前 12.04 官方套件庫的版本資訊
$ apt-cache showpkg git-core
Package: git-core
Versions:
1:1.7.9.5-1
# 目前的版本爲 1.7.9.5 所以必須手動安裝 Git - 安裝 Git 相依性套件
$ sudo apt-get install -y libexpat1-dev gettext libz-dev
- 手動安裝 Git
$ cd /tmp
$ curl --progress https://git-core.googlecode.com/files/git-1.8.4.1.tar.gz | tar xz
$ cd git-1.8.4.1/
$ make prefix=/usr/local all
# 指定安裝至 /usr/local/bin(預設會裝至 ~/bin/)
$ sudo make prefix=/usr/local install
安裝 Ruby
- 安裝 Ruby 2.0+ (若有安裝 Ruby 1.8 請先移除)
$ mkdir /tmp/ruby && cd /tmp/ruby
$ curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz
$ cd ruby-2.0.0-p353
$ ./configure --disable-install-rdoc
$ make
$ sudo make install - 安裝 Bundler Gem
$ sudo gem install bundler --no-ri --no-rdoc
新增 GitLab 系統帳號
- 不允許登入
$ sudo adduser --disabled-login --gecos 'GitLab' git
安裝 GitLab shell
- 切換至 git 帳號家目錄
$ cd /home/git
- 複製 GitLab shell
$ sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
$ cd gitlab-shell - 切換至正確的版本(使用 git tag 找最新版)
$ sudo -u git -H git checkout v1.7.6
- 編輯 config 檔
$ sudo -u git -H cp config.yml.example config.yml
# 修改 gitlab_url, 改成自己的 domain name, http://your-domain-name/
$ sudo -u git -H editor config.yml - 執行安裝
$ sudo -u git -H ./bin/install
安裝資料庫
- 資料庫安裝可以參考檔案 databases.md
- 我是使用 MySQL,安裝的方式不再贅述,以 root 身份登入
$ mysql -u root -p
- 建立 GitLab 使用的 MySQL 帳號
mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';
- 建立 GitLab production 資料庫和設定權限
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost'; - 使用 gitlab 帳號, 測試 MySQL 連線狀況
$ sudo -u git -H mysql -u gitlab -p -D gitlabhq_production
# 如果看到 mysql> 表示成功了
安裝與設定 GitLab
- 切換至 git 家目錄,複製檔案
$ cd /home/git
# 由 Github 複製 GitLab 檔案
$ sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
$ cd /home/git/gitlab - Checkout 穩定版本,git branch -a 或 git branch -r 找 stable 版本
$ sudo -u git -H git checkout 6-3-stable
- 設定 GitLab
$ cd /home/git/gitlab
# 複製 GitLab Config 範本
$ sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
# 修改設定,將所有 localhost 更換成我們的 domain name
# 因爲前述步驟中,我們 Git 是由 Source 自行安裝,將 bin_path 修改爲 /usr/local/bin/git
$ sudo -u git -H editor config/gitlab.yml
# 確認 GitLab 可以寫入 log/ 和 tmp/ 資料夾
$ sudo chown -R git log/
$ sudo chown -R git tmp/
$ sudo chmod -R u+rwX log/
$ sudo chmod -R u+rwX tmp/
# 建立新資料夾給 satellites
$ sudo -u git -H mkdir /home/git/gitlab-satellites
# 建立資料夾給 sockets/pids
$ sudo -u git -H mkdir tmp/pids/
$ sudo -u git -H mkdir tmp/sockets/
$ sudo chmod -R u+rwX tmp/pids/
$ sudo chmod -R u+rwX tmp/sockets/
# 建立 public/uploads 資料夾
$ sudo -u git -H mkdir public/uploads
$ sudo chmod -R u+rwX public/uploads
# 複製 unicorn 範例及設定,如果2G RAM, worker_processes 可以改成 3
$ sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
$ sudo -u git -H editor config/unicorn.rb
# 複製 Rack attack 範例及設定
$ sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
$ sudo -u git -H git config --global user.name "GitLab"
$ sudo -u git -H git config --global user.email "gitlab@localhost"
$ sudo -u git -H git config --global core.autocrlf input
# 到此設定完成可以再檢查確認 gitlab.yml, unicorn.rb 是否存在, 檢查 gitlab.yml 設定是否正確
GitLab Database 設定
- 我是使用 MySQL 所以複製 database.yml.mysql,使用Postgresql 請複製 database.yml.postgresql
$ sudo -u git cp config/database.yml.mysql config/database.yml
- 修改 database.yml 中 production(第一個部分)中的設定,將 'secure password' 修改爲 資料庫 gitlab 帳號的密碼
$ sudo -u git -H editor config/database.yml
- 修改 database.yml 權限,只有 git 帳號可以讀取
$ sudo -u git -H chmod o-rwx config/database.yml
安裝 Gems
- 切換至 gitlab 目錄
$ cd /home/git/gitlab
- MySQL 的使用者,選項請使用 "without ... postgres",PostgresSQL 的使用者請使用 "without ... mysql"
$ sudo -u git -H bundle install --deployment --without development test postgres aws
初始化資料庫
- 輸入 "yes" 來建立需要的資料庫內容
$ sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
- 完成後將取得 GitLab 系統預設帳號、密碼
Administrator account created:
login.........admin@local.host
password......5iveL!fe
設定開機啓動與 Logrotate
- 複製 init Script,加上執行權限
$ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
$ sudo chmod +x /etc/init.d/gitlab - 設定開機啓動 GitLab
$ sudo update-rc.d gitlab defaults 21
- 設定 Logrotate
$ sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
檢查GitLab 應用程式狀態和啓動
- 檢查 GitLab 環境設定狀態
$ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
- 啓動 GitLab
$ sudo service gitlab start
# 或是
$ sudo /etc/init.d/gitlab restart - 再檢查應用程式的狀態,如果都出現綠色就是沒有問題,否則再仔細檢查前述的步驟
$ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
設定 Apache2 環境
這個部分是我和大家比較不一樣的地方,是設定 Sub directory,像是:http://www.example.com/gitlab/ 。如果你的伺服器比較單純,沒有進行其他的網站服務,可以使用 Tsung's Blog 上的方法,下載 gitlab.conf 即可。
- 有三個檔案需要修改:application.rb、gitlab.yml、unicorn.rb,將下面資料前面的註解移除。
# 移除 config.relative_url_root = "/gitlab" 前方註解
$ sudo -u git -H editor config/application.rb
# 移除 relative_url_root: /gitlab 前方註解
$ sudo -u git -H editor config/gitlab.yml
# 移除 ENV['RAILS_RELATIVE_URL_ROOT'] 前方註解
$ sudo -u git -H editor config/unicorn.rb - 設定網站的 Alias 至 apache2 中
$ sudo vim /etc/apache2/sites-available/default
Alias /gitlab "/home/git/gitlab/public"
<Directory /home/git/gitlab/public>
Options -MultiViews
SetEnv RAILS_RELATIVE_URL_ROOT "/gitlab"
</directory> - 啓用下面幾項模組
$ sudo a2enmod rewrite proxy proxy_http
- 修改 Proxy 設定,檔案中加入下面幾行
$ sudo vim /etc/apache2/mod-available/proxy.conf
ProxyRequests On
ProxyPreserveHost on
<proxy>
AddDefaultCharset off
Order deny,allow
Allow from all
AllowOverride All
</proxy> - 修改 apache2.conf 設定
$ sudo vim /etc/apache2/apache2.conf
# 檔案最後加上下列兩行
ProxyPass /gitlab/ http://127.0.0.1:8080/gitlab/
ProxyPassReverse /gitlab/ http://127.0.0.1:8080/gitlab/ - 重新啓動 Apache 和 GitLab
$ sudo service apache2 restart
$ sudo service gitlab restart
修改 unicorn listen 設定(選擇性)
因爲我的 8080 Port 運行著 Tomcat,所以必須修改 unicorn 的 listen port 避免他們打架 XD
- 切換到 gitlab 目錄
$ cd /home/git/gitlab
- 修改 config/unicorn.rb 資料,找到 listen 的地方修改 8080 更換成想要的 Port 號碼
$ sudo -u git -H editor config/unicorn.rb
listen "127.0.0.1:9242" - 前段第五點 apache2.conf 設定,改爲下列
$ sudo vim /etc/apache2/apache2.conf
ProxyPass /gitlab/ http://127.0.0.1:9242/gitlab/
ProxyPassReverse /gitlab/ http://127.0.0.1:9242/gitlab/ - 重新啓動 Apache 和 GitLab
到這裏 GitLab 就架設完成了~ !連到 http://your-domain-name/gitlab/ 享受甜美的果實吧!(第一次啓動會花比較久的時間,請耐心等候)
留言