Gitlab安装及使用

一、Gitlab的概述

1.Gitlab介绍

​ GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。

​ GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

​ GitLab能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。

​ 它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找

2.Git,GitHub与GitLab的区别

  • Git是一种版本控制系统,是一种工具,用于代码的存储和版本控制。
  • GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台,可以帮助程序员之间互相交流和学习。
  • GitLab是一个基于Git实现的在线代码仓库软件,你可以用GitLab自己搭建一个类似于GitHub一样的仓库,但是GitLab有完善的管理界面和权限控制,一般用于在企业、学校等内部网络搭建Git私服。
  • GitHub和GiLlab两个都是基于Web的Git远程仓库,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。从代码的私有性上来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。

3.Gitlab的服务构成

Nginx:静态web服务器。 gitlab-shell:用于处理Git命令和修改authorized keys列表。(Ruby) gitlab-workhorse: 轻量级的反向代理服务器。(go)

GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。

logrotate:日志文件管理工具。

postgresql:数据库。

redis:缓存数据库。

sidekiq:用于在后台执行队列任务(异步执行)。

Ruby) unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby Web Server,主要使用Ruby编写)

二、Gitlab的安装部署

前置条件:

  • Gitlab要求服务器内存2G以上

  • Gitlab要求服务器cpu最低2核4GB,建议4核8GB

  • 安装依赖软件

    1
    2
    
    sudo yum install -y git vim gcc glibc-static telnet 
    sudo yum install -y curl policycoreutiels-python openssh-server
    

1.方式一:rpm包安装

2.方式二:yum源安装

  • 设置yum源

    1
    2
    3
    4
    5
    6
    7
    
    [root@node1 ~]# 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
    [root@node1 ~]# yum makecache
    
  • 安装Gitlab

    1
    2
    3
    4
    5
    6
    
    [root@node1 ~]# yum install -y gitlab-ce
    可以访问"https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/"查看Gitlab-ce的版本。
    安装历史版本请使用下面命令:
    [root@node1 ~]# yum install -y gitlab-ce-{VERSION}
    # 如果安装时出现gpgkey验证错误,只需在安装时明确指明不进行gpgkey验证
    [root@node1 ~]# yum install -y gitlab-ce --nogpgcheck
    

3.方式三docker部署gitlab

1)搜索和下载gitlab镜像

1
2
3
4
#搜索镜像
docker search gitlab
#下载镜像
sudo docker pull gitlab/gitlab-ce:latest

2) 创建docker中的网络

1
docker network create gitlab_net

3) 使用镜像创建容器,并且使重要数据外部挂载到宿主机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
docker run --name='gitlab' -d \
--net=gitlab_net \
--publish 443:443 --publish 80:80 \
--restart always \
--volume ~/docker/gitlab/config:/etc/gitlab \
--volume ~/docker/gitlab/logs:/var/log/gitlab \
--volume ~/docker/gitlab/data:/var/opt/gitlab \
--privileged=true \
gitlab/gitlab-ce:latest

-----------------------------------------------
参数解析:
1.http端口使用 80
2.网络使用 gitlab_net网络
3.将容器内部 /etc/gitlab,/var/log/gitlab,/var/opt/gitlab - 挂载到宿主机的 /root/docker/gitlab/config,logs,data 下,防止容器被删除数据丢失
4.privileged=true 使用特权,怕什么地方权限不足,安装不顺5./root/docker/gitlab下的config,logs,data没有的话,创建容器会一并创建

## 查看容器是否运行起来
docker ps | grep gitlab

4.配置Gitlab

1) nginx配置(可选)

补充说明:因为编译gitlab的配置 /etc/gitlab/gitlab.rb 时会重新生成这个自定义nginx 配置,所以只要 gitlab 的配置配得好,上面的nginx其实不需要自定义的。

1
2
3
4
5
6
7
vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
[修改内容]
# 外网访问的端口,如果服务器已经有服务器占用了80,那么这里可以改成其它
listen *:9091;
server_name gitlab.test.domain.com;

set $http_host_with_default "gitlab.test.domain.com:9091";

2) 修改密码(可选)

补充说明:界面初始化时会创建密码,管理系统也可以修改密码,这里只是补充服务器端修改的途径

1
2
3
4
gitlab-rails console production
user = User.where(id:1).first
user.password='123456'
user.save!

3) 配置文件修改

配置文件位置  /etc/gitlab/gitlab.rb

1
cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak
A.gitlab基本配置
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
### 基础配置 ###
#外部访问url(经过编译后,自动将这个配置编译到nginx配置,nginx就无需配置了)
external_url 'http://10.0.8.116:9091'
#默认值就是8080。如果端口被占用,可将8080修改为其它(例如:9090)
unicorn['port'] = 9091		#13.10版本可用
nginx['listen_port'] = 9091   #14.00版本可用
#时区
gitlab_rails['time_zone'] = 'Asia/Shanghai'

### SSH配置(可选) ###
gitlab_rails['gitlab_shell_ssh_port'] = 10222
#使用SSH协议拉取代码所使用的连接端口。
#修改过ssh端口,gitlab中项目的的ssh地址,会在前面加上协议头和端口号“ssh://git@gitlab.domain.com:55725/huangdc/test.git”
B.gitlab发送邮件配置
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
### 邮箱配置 ###
gitlab_rails['smtp_enable'] = true
#启用SMTP邮箱功能,绑定一个第三方邮箱,用于邮件发送
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
#设置SMTP服务器地址
gitlab_rails['smtp_port'] = 465
#设置SMTP服务器端口
gitlab_rails['smtp_user_name'] = "xxx@xxx.cn"
#设置邮箱账号
gitlab_rails['smtp_password'] = "xxx"
#设置邮箱密码
gitlab_rails['smtp_authentication'] = "login"
#设置邮箱账号密码身份验证方式,"login"表示采用账号密码的方式登陆
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
#设置开启SMTP邮件使用TLS传输加密协议传输邮件,以保证邮件安全传输
gitlab_rails['gitlab_email_from'] = 'xxx@xxx.cn'
#设置Gitlab来源邮箱地址,设置登陆所使用的邮箱地址
gitlab_rails['gitlab_email_reply_to']= ‘noreply@domain.com'  
C.web配置
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
### WEB配置 ###
nginx['enable'] = true
#启用Nginx服务
nginx['client_max_body_size'] = '250m'
#设置客户端最大文件上传大小
nginx['redirect_http_to_https'] = true
#设置开启自动将HTTP跳转到HTTPS
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.cn.pem"
#设置HTTPS所使用的证书
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.cn.key"
#设置HTTPS所使用的证书密码
nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2"
#设置HTTPS所使用的TLS协议版本
nginx['ssl_session_cache'] = "builtin:1000  shared:SSL:10m"
#设置开启SSL会话缓存功能
nginx['ssl_session_timeout'] = "5m"
#设置SSL会话超时时间
nginx['listen_addresses'] = ['*', '[::]']
#设置Nginx监听地址,"*"表示监听主机上所有网卡的地址
nginx['gzip_enabled'] = true
#设置开启Nginx的传输压缩功能,以节约传输带宽,提高传输效率
D.配置生效

当配置文件发生变化时,或者是第一次启动时,我们需要刷新配置。

1
2
[root@localhost ~]# gitlab-ctl reconfigure
[root@localhost ~]# systemctl restart gitlab-runsvdir

注意:执行 reconfigure 命令会把gitlab的nginx组件的配置还原,导致自定义修改的端口以及域名等都没有了

4) 常用目录

1
2
日志地址:/var/log/gitlab/   # 对应各服务的打印日志 
服务地址:/var/opt/gitlab/   # 对应各服务的主目录 

5.Gitlab常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#查看gitlab版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

gitlab-ctl start         # 启动所有 gitlab 组件
gitlab-ctl stop          # 停止所有 gitlab 组件
gitlab-ctl restart       # 重启所有 gitlab 组件
gitlab-ctl status        # 查看服务状态

gitlab-ctl reconfigure   # 启动服务
gitlab-ctl show-config   # 验证配置文件

gitlab-ctl tail          # 查看日志

gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab

vim /etc/gitlab/gitlab.rb # 修改默认的配置文件

6.Gitlab使用

浏览器访问: http://10.0.8.116/

1) 第一次访问需要的配置

  • Gitlab安装好后,查看密码

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    cat /etc/gitlab/initial_root_password
    
    [root@node1 /data/tools]# cat /etc/gitlab/initial_root_password
    # WARNING: This value is valid only in the following conditions
    #          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
    #          2. Password hasn't been changed manually, either via UI or via command line.
    #
    #          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
    
    Password: XXl+X4+SsC8nOXbXUI0l+H9oMxtFDABek++UAgqZdNc=
    
    # NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
    [root@node1 /data/tools]#
    
  • 设置超管:设置密码,管理账户为root

  • 关闭用户注册功能

  • 设置语言为"简体中文"

2) 新建项目

  • 创建project
  • 创建group
  • 创建user
  • 设置ssh
  • 设置项目权限
  • 本地代码上传

7.Gitlab备份恢复

1) 修改配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
vim /etc/gitlab/gitlab.rb
[修改内容]
# 备份保存的位置,这里是默认位置,可修改成指定的位置
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

# 设置备份保存的时间,超过此时间的日志将会被新覆盖
gitlab_rails['backup_keep_time'] = 604800  # 这里是默认设置,保存7天

# 特别注意:
#     如果自定义了备份保存位置,则要修改备份目录的权限,比如:
#     chown -R git.git /data/backup/gitlab

2) 重启使配置生效

1
2
3
4
5
# 重读配置文件
gitlab-ctl reconfigure  

# 重启gitlab
gitlab-ctl restart

3) 设置定时任务

1
2
3
4
5
6
# 每天凌晨2点定时创建备份
# 将一下内容写入到定时任务中 crontab -e
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create

# 备份策略建议:
#     本地保留3到7天,在异地备份永久保存

4) 备份时间的识别

1
2
3
# 备份后的文件类似这样的形式:1494170842_gitlab_backup.tar,可以根据前面的时间戳确认备份生成的时间

data  -d  @1494170842

5) 恢复gitlab

  • 停止数据写入服务

    1
    2
    3
    
    # 停止数据写入服务
    gitlab-ctl stop unicorn
    gitlab-ctl stop sidekiq
    
  • 进行数据恢复并重启

    1
    2
    3
    4
    5
    
    # 进行恢复
    gitlab-rake gitlab:backup:restore BACKUP=1494170842  # 这个时间戳就是刚刚备份的文件前面的时间戳
    
    # 重启
    gitlab-ctl restart