gitlab 安装

12/12/2016 gitlabgit

# git、gitlab、github的区别 基础概念

和SVN类似,Git是一个版本控制系统(Version Control System,VCS),不同的是SVN为集中式版本控制系统,为单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新,git为分布式版本控制系统,关于SVN和git的对比,可以通过下图进行说明(但最大的区别在于svn为集中式,git为分布式)

# svn

svn好比一个巨大的图书馆,当你要借一本书的时候,需要先从图书馆借出,回家之后自己改,改完之后还是返回给图书馆,而git的方式完全不同,所有的客户端都一个是完整的版本库,没有中央控制的概念,可以这样类比,git提供了一个虚拟的全量图书馆,所有人都有一个虚拟的图书馆,当你想看其中一本书的时候,从自己的虚拟图书馆里面检索出来即可,如果你修改了其中的内容,可以直接提交到自己的虚拟图书馆里面,也不会影响其他人的图书馆,当有其他人想要看你修改的一本书的时候,你只要将对应的一本书的URL发给对方即可。

# Git

关于Git的诞生其实很有趣味性,在早期林纳斯·托瓦兹(Linux之父)面临Linux内核版本控制的问题,在最初,接受采用Bitkeeper进行Linux内核的代码管控,但有一个要求,不允许Linux社区开发人员对Bitkeeper进行破解,但对于追求开源软件的×××们,怎么可能这么听话,就有一个×××开发人员,对Bitkeeper进行了破解,基于之前的要求,Bitkeeper收回的林纳斯使用权,在协商无果的情况下,林纳斯闭关修炼7天,git就这样面试了,大神就是大神

Git是版本控制系统,Github是在线的基于Git的代码托管服务。GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,但是付费账户也可以创建私有的代码仓库,如果你在GitHub上面开源自己的项目,那么在面试的时候,这将是一个很大的优势和亮点,别人可以通过你在GitHub的开源项目,可以很好的了解到你的技术水平,同时GitHub上面项目的star越高,说明项目的影响力越大,这个很重要

由于GitHub对于私有的代码仓库是收费的,同时,并不是所有的公司会愿意将自己的项目托管在GitHub上面,因此gitlab就是为了解决这类问题的,gitlab搭建在个人的服务器上面,经过认证的人都可以在上面创建免费的私人repo,并进行多人协作。GitLab让开发团队对他们的代码仓库拥有更多的控制。

# Gitlab 安装配置

# gitlab 安装脚本

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

由于资源在国外,国内下载很慢,推荐使用清华大华gitlab源


vim /etc/yum.repos.d/gitlab-ce.repo
添加如下内容


[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

1
2
3
4
5
6
7
8
9
10
11

添加完成后,执行如下代码:

  • 安装
sudo yum makecache  
sudo yum install gitlab-ce  
1
2
  • 配置更改
vim /etc/gitlab/gitlab.rb

## 找到 external_url 'http://000.00.00.00:8081'

## 修改成你的地址,此处为http://192.168.1.157:8081
1
2
3
4
5
  • 对GitLab进行编译
sudo gitlab-ctl reconfigure  
1
  • 清除缓存
gitlab-rake cache:clear RAILS_ENV=production
1
  • 启动gitlab服务,以及关闭防火墙等操作
sudo gitlab-ctl start    # 启动所有 gitlab 组件;并加入开机启动项里面:/etc/rc.local

sudo gitlab-ctl stop     # 停止所有 gitlab 组件;

sudo gitlab-ctl restart   # 重启所有 gitlab 组件;

sudo gitlab-ctl status    # 查看服务状态;

sudo gitlab-ctl tail       # 查看日志;
1
2
3
4
5
6
7
8
9

关闭防火墙

service iptables stop      ###centos6关闭防火墙

systemctl stop firewalld.service  ###centos7关闭防火墙
1
2
3

# Gitlab 备份

使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份

gitlab-rake gitlab:backup:create

# 修改备份文件目录

可以通过/etc/gitlab/gitlab.rb配置文件来修改默认存放备份文件的目录

gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

修改完成之后使用gitlab-ctl reconfigure命令重载配置文件即可

# 设置备份过期时间

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb

更改如下行

gitlab_rails['backup_keep_time'] = 604800 #以秒为单位

# gitlab自动备份

创建定时任务

[root@gitlab ~]# crontab -e

0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
1
2
3

# Gitlab 迁移与恢复

Gitlab 备份版本与Gitlab恢复版本要一致

  • 在老服务器上将备份文件发送至新服务器的相应目录下
[root@gitlab ~]# scp /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar root@10.0.0.6:/var/opt/gitlab/backups/
1

# gitlab恢复

[root@gitlab ~]# gitlab-ctl stop unicorn        #停止相关数据连接服务

[root@gitlab ~]# gitlab-ctl stop sidekiq

[root@gitlab-new ~]# chmod 777 /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar

#修改权限,如果是从本服务器恢复可以不修改

[root@gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1530156812_2018_06_28_10.8.4    

#从1530156812_2018_06_28_10.8.4编号备份中恢复
1
2
3
4
5
6
7
8
9
10
11

按照提示输入两次yes并回车

# gitlab升级

[root@gitlab ~]# gitlab-ctl stop        #关闭gitlab服务

[root@gitlab ~]# gitlab-rake gitlab:backup:create        #备份

1
2
3
4

下载新版gitlab的rpm包安装,安装时选择升级

安装的过程中可能会出现报错

Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]'
1

解决方法为

[root@gitlab ~]# chmod 2770 /var/opt/gitlab/git-data/repositories

# 安装成功后重新加载配置并启动

[root@gitlab ~]# gitlab-ctl reconfigure

[root@gitlab ~]# gitlab-ctl restart

1
2
3
4
5
6
7
8

# gitlab更改默认的nginx

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb

nginx['enable'] = false        #不启用nginx
1
2
3
  • 检查默认nginx配置文件,并迁移至新Nginx服务
/var/opt/gitlab/nginx/conf/nginx.conf #nginx配置文件,包含gitlab-http.conf文件

/var/opt/gitlab/nginx/conf/gitlab-http.conf #gitlab核心nginx配置文件
1
2
3
  • 重启 nginx、gitlab服务
[root@gitlab ~]# gitlab-ctl restart

[root@gitlab ~]# systemctl restart nginx.service
1
2
3

访问可能出现报502。原因是nginx用户无法访问gitlab用户的socket文件。 重启gitlab需要重新授权

[root@gitlab ~]# chmod -R o+x /var/opt/gitlab/gitlab-rails
1