我是按照這篇文章來搭建的: Tutorial: setting up Gitlab on Debian 6 (下面簡稱gitlab-debian),不過實際上卻是在一台RHEL 5.6上搭建的。由於我對RedHat系列不熟(后來才看見Installing GitLab 2.1 on Centos 6和GitLab 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密碼必須跟上面的實際值一致
- 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的具體方法, 可以參考如下內容:
- Installing GitLab 2.1 on Centos 6 中 Install passenger for Apache一節
- Is it possible to host GitLab in a subdirectory of www root, like http://www.mydomain.com/gitlab (Google Groups)
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
)。