CentOS上安装GitLab

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 "gitlab@localhost"
$ 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

默认的用户名和密码:

admin@local.host
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;
  }
}

haha

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值