首先感谢以下文章的内容给了我很多指导:
lnmp、lamp、lnmpa一键安装包(Updated: 2015-08-31)
Nginx下Redmine2.6配置
CentOS安装GitLab

大致流程如下:

先搭建 LNMP 环境

这里参照第一篇文章的一键安装就可以~

为 Nginx 添加 Passenger

最好第二步进行这个,GitLab 需要 Passenger 这个模块。
这里参照第二篇文章即可。

最后再来安装 GitLab 以及配置

安装

主要参考了官方文档和第三篇文章。
大致步骤如下:

如果在天朝,更换 yum 源:

1
2
$ cd /etc/yum.repos.d
$ wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

安装必要软件包:

1
$ yum -y install libicu-devel patch gcc-c++ readline-devel zlib-devel libffi-devel openssl-devel make autoconf automake libtool bison libxml2-devel libxslt-devel libyaml-devel zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

安装/更新 Git

1
2
3
4
5
6
7
8
9
10
11
12
13
// 查看当前git版本
$ git --version

// 如果小于1.7.10则先卸载
$ yum remove git

// 下载最新的git并安装
$ wget -O git-src.zip https://github.com/git/git/archive/master.zip
$ unzip git-src.zip
$ cd git-src
$ make prefix=/usr/local all
$ make prefix=/usr/local install
$ ln -fs /usr/local/bin/git* /usr/bin/

安装Ruby环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ mkdir /tmp/ruby && cd /tmp/ruby
$ curl --progress ftp://ftp.ruby-lang.org/pub/ruby/ruby-2.2.3.tar.gz | tar xz
$ cd ruby-2.2.3
$ ./configure --disable-install-rdoc
$ make && make install

$ 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

// 如果在天朝 设置ruby gem源为淘宝
$ gem source -r https://rubygems.org/
$ gem source -a http://ruby.taobao.org/

$ gem install bundler --no-ri --no-rdoc

安装 MySQL 及初始化 GitLab 库

1
2
3
4
5
6
7
8
$ yum install mysql mysql-devel mysql-server -y
$ /etc/init.d/mysqld start
$ chkconfig mysqld on

// 登录mysql创建gitab的帐号和数据库
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';

安装 Redis(应该可以略过去,我一直不成功 QAQ)

1
2
3
$ yum -y install redis
$ /etc/init.d/redis start
$ chkconfig redis on

添加 git 帐号并允许 sudo

1
2
$ useradd --comment 'GitLab' git
$ echo "git ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers

安装 GitLab (这里参考官方文档,我的是 CentOS 7)

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo yum install curl openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

sudo gitlab-ctl reconfigure

初始账户密码:

Username: root
Password: 5iveL!fe

当然这里多半登录进域名会出现之前的 LNMP 安装成功页面。停掉当前的 nginx 即可,service nginx stop。这个时候一般都会成功进入 GitLab。

配置 GitLab

参考官方文档 GitLab Documentation NginxUsing an existing Passenger/Nginx installation 部分。使用咱们之前搭建的 LNMP 的 Nginx 。
我的配置大概如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
##################### GitLab ##############################

upstream gitlab-git-http-server {
server unix://var/opt/gitlab/gitlab-git-http-server/socket fail_timeout=0;
}

server {
listen 80;
server_name git.dianqk.org;
rewrite ^/(.*) https://$server_name$1 permanent;
}

server {
listen 443 ssl;
server_name git.dianqk.org;
# server_tokens off;

ssl_certificate /etc/gitlab/ssl/git.dianqk.org.crt;
ssl_certificate_key /etc/gitlab/ssl/git.dianqk.org.key;

root /opt/gitlab/embedded/service/gitlab-rails/public;

client_max_body_size 250m;

access_log /var/log/gitlab/nginx/gitlab_access.log;
error_log /var/log/gitlab/nginx/gitlab_error.log;

passenger_ruby /opt/gitlab/embedded/bin/ruby;

passenger_env_var PATH "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/usr/local/bin:/usr/bin:/bin";

passenger_user git;
passenger_group git;

passenger_enabled on;
passenger_min_instances 1;

location ~ [-\/\w\.]+\.git\/ {
gzip off;

proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;

proxy_buffering off;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://gitlab-git-http-server;
}

error_page 502 /502.html;
}
####################### GitLab End ############################

推荐阅读

使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署