1 安装

1.1 Omnibus package installation

这是 Gitlab 官网推荐的安装方式。官网文档链接位于Gitlab Installation。不过,现在直接去官网默认给出的是企业版,即 gitlab-ee 的安装方式(付费的),而个人版其实用 gitlab-ce 就够了。gitlab-ce 安装方式如下

1.1.1 安装并配置依赖

1
sudo apt-get install -y curl openssh-server ca-certificates 

然后安装 Postfix 来启动邮件提醒功能。(如果你使用了第三方的邮件服务,可以跳过这一步并且参照配置外部 SMTP 服务器)。

1
sudo apt-get install -y postfix

在接下来的配置过程中,选择'Internet Site'选项。使用你的服务器的域名来作为'mail name'。如果还有后续的选项,输入 Enter 直至安装完成。

1.1.2 安装 Gitlab-EE

添加 Gitlab Package 仓库:

1
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash 

注意这里安装的是 CE 版本,故是 gitlab-ce,企业版对应的是 gitlab-ee

接下来安装 Gitlab:

1
sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ce 

这里的 EXTERNAL_URL 是你的 Gitlab 服务要使用的域名。如果你只使用 http,或者后续要使用已有的 Nginx,可以在这里使用 http。如果使用 https,gitlab 会调用Let's encrtpy的服务为你的网站添加 ssl 证书。

1.1.3 登录 Gitlab

进入你在安装阶段的域名,你会被重定向到密码重置界面。在这个页面你要设置管理员账户的密码,然后回到登录界面。在这个登录界面,使用root用户名和上一步设置的密码登录。

1.2 使用已有的 Nginx

这个章节我们参考官方文档给出使用已有的 Nginx 的方法。

1.2.1 禁用 Gitlab 自带的 Nginx

编辑/etc/gitlab/gitlab.rb文件,设置

1
nginx['enable'] = false

1.2.2 设置外部服务器的用户

这一步是为了保证外部服务器用户能够访问 gitlab。使用 Nginx 时,可以通过/etc/nginx/nginx.conf文件查看到 nginx 用户。一般情况下这个用户名是www-data。修改/etc/gitlab/gitlab.rb

1
web_server['external_users'] = ['www-data']

然后使用sudo gitlab-ctl reconfigure来使得更改生效。

1.2.3 Trusted proxies

如果你的反向代理服务器和 gitlab 不是在同一台机器上,那么你还需要设置 Trusted proxies。

1
gitlab_rails['trusted_proxies'] = ['192.168.1.0/24', '192.168.2.1', '2001:0db8::/32']

1.2.4 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
58
59
60
61
62
# gitlab socket 文件地址
upstream gitlab {
# 7.x 版本在此位置
# server unix:/var/opt/gitlab/gitlab-rails/tmp/sockets/gitlab.socket;
# 8.0 位置
server unix:/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket;
}

server {
listen *:80;

server_name gitlab.example.com; # 请修改为你的域名

server_tokens off; # don't show the version number, a security best practice
root /opt/gitlab/embedded/service/gitlab-rails/public;

# Increase this if you want to upload large attachments
# Or if you want to accept large git objects over http
client_max_body_size 250m;

# individual nginx logs for this gitlab vhost
access_log /var/log/gitlab/nginx/gitlab_access.log;
error_log /var/log/gitlab/nginx/gitlab_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 {
# If you use https make sure you disable gzip compression
# to be safe against BREACH attack

proxy_read_timeout 300; # Some requests take more than 30 seconds.
proxy_connect_timeout 300; # Some requests take more than 30 seconds.
proxy_redirect off;

proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Frame-Options SAMEORIGIN;

proxy_pass http://gitlab;
}

# Enable gzip compression as per rails guide: http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression
# WARNING: If you are using relative urls do remove the block below
# See config/application.rb under "Relative url support" for the list of
# other files that need to be changed for relative url support
location ~ ^/(assets)/ {
root /opt/gitlab/embedded/service/gitlab-rails/public;
# gzip_static on; # to serve pre-gzipped version
expires max;
add_header Cache-Control public;
}

# error_page 502 /502.html;
}

2 迁移

2.1 备份

迁移首先要做的是备份。在git 学习------> Gitlab 如何进行备份恢复与迁移?这篇文章中详细讲述了备份的问题。我们这里介绍的是最为直接和简单的步骤。如果要更加详细的信息请阅读这篇参考。

备份使用如下命令:

1
gitlab-rake gitlab:backup:create

备份会生成在/var/opt/gitlab/backups目录下。名称类似于1502357536_2017_08_10_9.4.3_gitlab_backup.tar。下面这些配置信息,没有包含在 backup 文件里面。需要手动迁移。

  • /etc/gitlab/gitlab.rb 配置文件须备份
  • /var/opt/gitlab/nginx/conf nginx 配置文件
  • /etc/postfix/main.cfpostfix 邮件配置备份
备份命令的执行

2.2 在目标机器上安装 gitlab

迁移过程中要求源机器和目标机器上安装的 gitlab 版本是相同的。如果不同,其实最好的做法是先将源机器上的 gitlab 升级到最新的版本。然后再生成备份。

如何查看Gitlab版本

2.3 上传备份

使用scp命令将备份文件上传到目标机器的/var/opt/gitlab/backups

如果 scp 上传目标文件文件夹的权限不够,可以先上传到自己的 home 目录下,然后 ssh 登录到服务器使用 sudo 进行移动。

2.4 应用备份文件

首先为了避免潜在的权限问题,将备份文件的权限设置为 777

1
chmod 777 1502357536_2017_08_10_9.4.3_gitlab_backup.tar 

然后停止 gitlab 的相关数据连接服务

1
2
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

然后用下面的命令读取备份:

1
gitlab-rake gitlab:backup:restore BACKUP=1502357536_2017_08_10_9.4.3

在后续出现的所有询问中输入 yes,等待执行完毕,即完成了迁移过程,接下来再次启动 gitlab

1
sudo gitlab-ctl start

3 删除

下面的删除过程在 Ubuntu 16 上得到验证:

3.1 移除 gitlab 服务

1
sudo gitlab-ctl uninstall

3.2 清楚 Gitlab 产生的数据

1
sudo gitlab-ctl cleanse

3.3 删除 Gitlab 生成的系统账户

1
sudo gitlab-ctl remove-accounts

3.4 删除 gitlab

1
sudo dpkg -P gitlab-ce

3.5 其他文件的删除

除了上述操作,Gitlab 使用的其他文件夹还需要手动删除,包括:

  • /opt/gitlab: 包含了 Gitlab 的应用代码和依赖
  • /var/opt/gitlab: 包含了应用的数据和配置信息(gitlab-ctl reconfigure 的写入内容)
  • /etc/gitlab: omnibus gitlab 的配置信息。这里的文件是唯一允许你手动编辑的部分
  • /var/log/gitlab: 日志文件

在你完成了开始的四个步骤后,这里的四个文件夹可以安全地手动删除。