description: 之前在公司因为工作需要,需要搭建一个基于的git的项目管理平台,最好能够比较贴近GitHub的管理方式,从网上找到了GitLab这个开源项目,无论是从界面上还是从功能上都还不错,结果公司的服务器是win的…
之前在公司因为工作需要,需要搭建一个基于的git的项目管理平台,最好能够比较贴近GitHub的管理方式,从网上找到了GitLab这个开源项目,无论是从界面上还是从功能上都还不错,结果公司的服务器是win的…就在自己的VPS上搭建了,我的服务器系统版本是Ubuntu 10.04 lts的,很方便地就升级到了12.04 lts,现在的Ubuntu确实很好用,感觉各方面做的都好了很多。不过按照官方的文档搭建GitLab的时候还是遇到了一些问题,主要涉及到的都是软件版本、文件权限等比较蛋疼的配置问题,当然这也和我自己没怎么做过后台有关。这次是在项目组的服务器上搭建GitLab,服务器的系统版本是CentOS,安装的过程和Ubuntu大同小异,这里本着补充后台知识的角度写这篇教程,也希望给别人带来方便(Ubuntu的就直接参照官方的吧,官方有个CentOS的一键安装脚本,不过你要是敢用就用吧)。
安装EPEL和依赖库
首先安装第三方的软件库EPEL和编译的依赖库,EPEL直接安装RPM包就可以了。
¥ rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ yum -y update
$ yum -y install gcc gcc-c++ make autoconf libyaml-devel gdbm-devel ncurses-devel openssl-devel zlib-devel readline-devel curl-devel expat-devel gettext-devel tk-devel libxml2-devel libffi-devel libxslt-devel libicu-devel sendmail patch libyaml* pcre-devel sqlite-devel vim
Python2.7+
$ mkdir /tmp/gitlab && cd /tmp/gitlab
$ curl --progress http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz | tar xvf
$ cd Python-2.7.5
$ ./configure --prefix=/usr/local
$ make && make install
安装好了以后需要注意的就是使用ln命令来创建连接,这样系统默认的PATH寻址的时候就能找到最新的版本(默认路径/usr/local/bin)。
$ sudo ln -s /usr/local/bin/python2.7 /usr/local/bin/python
Ruby2.0
$ cd /tmp/gitlab
$ curl --progress http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz | tar xz
$ cd ruby-2.0.0-p247
$ ./configure
$ make
$ make install
ruby2.0已经内置了gem(管理Ruby库和程序的标准包),所以只需要安装bundler(图像处理的一个源码库,这个不知道是干嘛用的)。
$ gem install bundler
如果你出现了Network Connected Error之类的网络问题(你懂得),rubygems.org存放在Amazon S3上的资源文件会间歇性地连接失败,(http://ruby.taobao.org/) 这个镜像源还是挺不错的,把GemFile中的地址修改为这个即可,然后继续添加连接。
$ ln -s /usr/local/bin/ruby /usr/bin/ruby
$ ln -s /usr/local/bin/gem /usr/bin/gem
$ ln -s /usr/local/bin/bundle /usr/bin/bundle
Git和Gitolite
如果系统的已经安装Git,一定要保证版本大于1.7.10,GitHub和许多Git服务依赖的git版本都不能低于这个版本,但是CentOS 6.4默认的epel安装的版本偏偏是低于这个版本的,这里可以通过rpmforge源(和EPEL一样也是个第三方YUM源)的二进制包来更新。
// 安装rpmforge源
$ wget ‘http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm‘
$ rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
$ rpm -i ‘http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm‘
$ yum clean all
// change the enabled=0 flag to enabled=1 in the section labelled [rpmforge-extras].
$ cd /etc/yum.repos.d
$ vim (or whatever) rpmforge.repo
// 安装新版本Git
$ yum update
$ yum provides git
$ yum install git-1.7.11.3-1.el6.rfx.x86_64
$ yum -y install git-all gitolite
MySql和Redis
GitLab支持MySQL和PostgreSQL,而且还必须安装Redis(有点悔恨当年数据库的课没好好学,然后现在有时还得自学)。
$ yum -y install mysql mysql-devel mysql-server redis
$ service mysqld start
$ mysql -u root
$ mysql> CREATE USER ‘gitlab‘@‘localhost‘ IDENTIFIED BY ‘gitlab‘;
$ mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
$ mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO ‘gitlab‘@‘localhost‘;
$ mysql> \q
$ service redis start
Nginx
GtiLab当然也支持Apache,但毕竟Nginx的性能要好太多了(据相关测试,高并发连接的情况下,Nginx的性能能胜过10倍的Apache)。
$ yum -y install nginx
$ service nginx start
至此,主要的软件包都已经安装完毕,下面就要进行配置了。
GitLab Uesr
$ useradd -c ‘GitLab‘ git
$ passwd -l git
$ su git
后面就直接切换到git账户下操作,可以省去文件权限的一些问题,如果还是出出现了Permission的一些问题,直接使用chown命令进行修改就可以了。
GitLab Shell
$ cd /home/git
$ git clone https://github.com/gitlabhq/gitlab-shell.git
$ cd gitlab-shell
通过git tag来查看最新的版本并切换
$ git checkout v1.7.9
修改配置文件,添加自己domain后安装即可。
$ vi config.yml
$ ./bin/install
GitLab
$ cd /home/git
$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab
$ cd /home/git/gitlab
$ git checkout 6-3-stable
$ cd /home/git/gitlab
$ cp config.yml{.example,}
$ vi config/gitlab.yml
$ mkdir tmp/pids/
$ mkdir tmp/sockets/
$ chown -R git log/
$ chown -R git tmp/
$ chmod -R u+rwX log/
$ chmod -R u+rwX tmp/
$ chmod -R u+rwX tmp/pids/
$ chmod -R u+rwX tmp/sockets/
创建satellites目录,保存各个用户的仓库。
$ mkdir /home/git/gitlab-satellites
$ mkdir public/uploads
$ chmod -R u+rwX public/uploads
修改unicorn配置文件:
$ cd /home/git/gitlab
$ cp config/unicorn.rb{.example,}
$ vi config/unicorn.rb
设置git的全局配置参数:
$ git config --global user.name "GitLab"
$ git config --global user.email "[email protected]"
$ git config --global core.autocrlf input
设置GitLab的数据库:
$ cp config/database.yml{.mysql,}
$ vi config/database.yml
$ chmod o-rwx config/database.yml
安装相关Ruby Gems依赖包;
$ cd /home/git/gitlab
$ [sudo] gem install charlock_holmes --version ‘0.6.9.4‘
$ bundle install --deployment --without development test postgres aws
// 初始化数据库数据
$ bundle exec rake gitlab:setup RAILS_ENV=production
设置init脚本:
$ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
$ sudo chmod +x /etc/init.d/gitlab
GitLab Check
$ bundle exec rake gitlab:env:info RAILS_ENV=production
$ sudo service gitlab start
$ bundle exec rake gitlab:check RAILS_ENV=production
一定要通过最后一项的check,注意切换到git账户进行check,特别是进行IP地址和端口修改的时候需要重新进行check。
配置Nginx
这里需要注意的是Ubuntu下默认的下载的Nginx版本和CentOS是不同的,发行版不同配置结构是有一定差异的。
$ mkdir -p /etc/nginx/sites-available/
$ mkdir -p /etc/nginx/sites-enabled/
$ cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
$ ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
在加载配置文件的时候,确定nginx.conf索引的配置文件在哪个目录,包括如果你想修改端口的话(nginx和apaache的80端口冲突了)也是要注意Nginx发布加载的配置文件是监听哪个端口的。我所使用的Nginx的版本是1.0.15,修改了default.conf端口监听和nginx.conf来加载自己的配置文件。
$ http {
$ …
$ # Load config files from the /etc/nginx/conf.d directory
$ # The default server is in conf.d/default.conf
$ include /etc/nginx/conf.d/*.conf;
$ include /etc/nginx/sites-enabled/*;
$ …
$ }
重启各项服务:
$ sudo service nginx restart
$ sudo service gitlab restart
如果Nginx无法重启,提示80端口占用,说明的端口修改还是不正确的。
Done
现在访问自己的domain就可以看到GitLab的登陆界面了,为了加快域名解析的速度可以配置下hosts文件。
$ echo "127.0.0.1 YOUR_DOMAIN" >> /etc/hosts
默认的用户名和密码:
[email protected]
5iveL!fe
修改端口
修改HTTP服务器unicorn的占用端口:
$ vi /home/git/gitlab/config/unicorn.rb
# listen "127.0.0.1:9292", :tcp_nopush => true
修改GitLab的发布端口:
$ vi /etc/nginx/sites-enabled/gitlab
# listen *:888 default_server;
$ vi /home/git/gitlab/config/gitlab.yml
# port: 888
$ vi /home/git/gitlab-shell/config.yml
# gitlab_url: "http://mygitdomain.com:888"
添加SSL
假设我们准备好了服务器的密钥 server.key 和证书 server.crt 和根证书 ca.crt (如何获得证书参考 ssl证书生成 ), 且将这些文件放在/etc/nginx/sites-available/下面。
# 将以下内容添加到 /etc/nginx/sites-available/gitlab 最后。
# 替换 server_name 指定的域名
server {
listen *:443;
ssl on;
ssl_certificate /etc/nginx/sites-available/server.crt;
ssl_certificate_key /etc/nginx/sites-available/server.key;
server_name mygitdomain.com;
#ubuntu1204-dell source.cml.com; # e.g., server_name source.example.com;
root /home/gitlab/gitlab/public;
# individual nginx logs for this gitlab vhost
access_log /var/log/nginx/gitlab_ssl_access.log;
error_log /var/log/nginx/gitlab_ssl_error.log;
location / {
# serve static files from defined root folder;.
# @gitlab is a named location for the upstream fallback, see below
try_files $uri $uri/index.html $uri.html @gitlab;
}
# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://gitlab;
}
}