關於gitlab搭建方法的幾點補充


我們部門想搞一些內部開源項目,但缺少一個支撐平台。都知道GitHub很火,但看了一下企業版的架構,還是有些肉痛,加上對git也存在一些爭論,於是一番研究之后,決定先把gitlab/gitorious或者trac/redmine之類的都搭上,體驗一下再做決定。

我是按照這篇文章來搭建的: Tutorial: setting up Gitlab on Debian 6 (下面簡稱gitlab-debian),不過實際上卻是在一台RHEL 5.6上搭建的。由於我對RedHat系列不熟(后來才看見Installing GitLab 2.1 on Centos 6GitLab installation on Fedora 16 (with gitolite),要按照這兩篇估計能省點力),加上RHEL的光盤和在線倉庫都比較難找,另外自己還是個ruby/rails小白,還是比較痛苦的 ——不過后來在公司內找到了RHEL 5.6的ISO,然后又發現了一個第三方倉庫EPEL——Extra Packages for Enterprise Linux,省了些力。

搭建過程中有不少收獲,整理了一下,貼出來(注:內容主要針對Tutorial: setting up Gitlab on Debian 6這篇文章進行補充說明)。

Step 0: 一些准備工作

0.1 proxy設置

export http_proxy=http://username:password@proxy.mycompany.com:8080

如果要讓http_proxy能透過sudo傳遞給apt-get或者gem install,需要在/etc/sudoers里面添加如下配置:

Defaults env_keep = "http_proxy ftp_proxy" 

0.2 添加第三方倉庫: EPEL (對於Debian/Ubuntu不用這一步)

cat > /etc/yum.repos.d/fedora-epel.repo <<EOF
[fedora-epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=http://cn.archive.ubuntu.com/fedora-epel/$releasever/$basearch/
enabled=1
gpgcheck=0
gpgkey=
EOF

yum check-update

然后就可以用 yum install wget curl python-pygments 來安裝EPEL上的第三方包了。

0.3 建議安裝GNU screen或者tmux

因為需要來回切換用戶,加上http_proxy的設置問題,還是用screen/tmux方便。

Step 3: Install Gitolite

Gitolite使得多個人通過同一個ssh賬號(即不用建立多個UNIX用戶)訪問不同的git倉庫,是GitLab/Gitorious提供 git服務的關鍵。推薦看看它的文檔: gitolite documentation 尤其是 how gitolite uses ssh 這一節。對英文有 障礙的話,可以看看這篇 Gitolite 構建 Git 服務器 (這篇文章詳細講述了gitolite的原理和安裝/升級方法)。

這里需要關注原文里如下兩步:

sudo -u gitolite cat /var/lib/gitolite/.ssh/id_rsa.pub
#(now select the output in your terminal and copy it to the clipboard)
sudo dpkg-reconfigure gitolite

后面這一步到底干了啥,因為 dpkg-reconfigure 是Debian/Ubuntu系的東西,RedHat上不玩這個啊。 我從Debian下載了gitolite的安裝包,看了一下里面的postinst腳本,其實上面兩步等價於

sudo -u gitolite -H gl-setup /var/lib/gitolite/.ssh/id_rsa.pub
# or su -c "gl-setup /var/lib/gitolite/.ssh/id_rsa.pub" gitolite

注意,執行這一步時要保證gitolite沒有被配置過,如果覺得有問題,就把 /var/lib/gitolite/ 目錄下的內容全刪掉 (包括 /var/lib/gitolite/.ssh, /var/lib/gitolite/.gitolite.rc ),然后重新開始這一步。 詳情可參考gitolite的文檔里cleaning out a botched install 這一節。

Step 4: Install Ruby 1.9

編譯ruby之前要從epel安裝libyaml-devel和libffi-devel包(原文沒說),否則后面的 gem install bundler 會 有問題:

yum install libyaml-devel

Step 5: Install Gitlab

5.1 通過proxy訪問gitlab

在公司內, 從github取代碼時只能使用http鏈接方式,git(ssh)和https都不行,所以在取gitlabhq本身,以及取下來后用bundler安裝子模塊時,都需要修改(在 bundle install --without development test --deployment 這一步之前, 需要先修改 /opt/gitlabhq/Gemfile ,將所有https換成http。如果不小心先跑了這 一步,則需要再修改 Gemfile.lock )。

另外,git不使用環境變量http_proxy的值,而是需要單獨設置:

git config --global http.proxy http://username:password@proxy.foobar.com:8080
git clone http://github.com/gitlabhq/gitlabhq.git

5.2 bundle install –without development test –deployment

  • 需要事先安裝libicu-devel, mysql-devel, pcre-devel這幾個包,這幾個包在RHEL中已有
  • sqlite必須要3.6以上,否則ruby模塊編譯不會成功。RHEL 5.6里面的sqlite太老了,需要自己下載源代碼包編譯

5.3 建立數據庫之前需要先安裝mysql和redis(文檔中沒說)

  • mysql在安裝光盤中有
    • mysql用這個命令設置其內root用戶的密碼: mysqladmin -u root password NEWPASSWD
    • config/database.yml 文件里面(僅production節)的mysql root密碼必須跟上面的實際值一致
  • redis在EPEL里面: yum install redis
  • 然后 /etc/init.d/mysqld start && /etc/init.d/redis start
  • 注意: bundle exec rake db:seed_fu RAILS_ENV=production 這一步輸出的是最后登錄網站的管理員 用戶名和密碼,請記錄下來

Step 6: Generate an SSL certificate

如果不是在互聯網上部署,這一步並不需要。因為即使按這里所說的生成了SSL證書,也還要瀏覽器導入這個證書。 如果是在互聯網上部署,應該到VeriSign或者StartSSL申請證書,才會被瀏覽器信任。可參考Nginx + https + 免費SSL證書配置指南

改用http(不用https)的方法:(注意,這里應該是在Step 7里面完成)

server {
  listen       80;
  server_name  hadoop-slave-16;
  root /opt/gitlabhq/public;

  location / {
      #    root   html;
      #    index  index.html index.htm;
      passenger_enabled on;
  }
}    

Step 7: Deploy to Phusion Passenger and Nginx

7.1 部署到nginx

  • 雖然EPEL倉庫里有nginx,但不要安裝,因為下面的 passenger-install-nginx-module 這一步會下載nginx並重新編譯
  • nginx.conf里80端口的rewrite可以取消, "root /nowhere"也可以恢復成缺省配置
  • 如果nginx的配置存在問題,想要重啟nginx的話,可以用 kill -QUIT $(pidof nginx) 的方法先停掉nginx, 修改完成后再用 /opt/nginx/sbin/nginx 啟動

7.2 部署到apache

如果想將gitlab部署到www root的子目錄(比如/gitlab/),可以改用Apache來做Web Server (我不知道在nginx上怎么搞,自己瞎試了一下,沒搞定)。

用apache配置gitlab的具體方法, 可以參考如下內容:

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13
PassengerRuby /usr/local/bin/ruby

##Note: ln -s /opt/gitlabgq/public/ /var/www/html/gitlab

RailsBaseURI /gitlab
<Directory /var/www/html/gitlab>
    # This relaxes Apache security settings.
    AllowOverride all
    # MultiViews must be turned off.
    Options -MultiViews
</Directory>

BTW: 如果部署gitlab到子目錄,另外還需要修改一下 /opt/gitlabhq/app/views/layouts/admin.html.haml 里面Resque的連接,這里是 個絕對連接,需要添加上gitlab的部署前綴(即改為 /gitlab/info/resque )。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM