Gitlab安装与配置

最近公司需要让我将Git的使用规范起来,在规范的过程中发现了一些问题。

  • “git commit”时的消息不够规范,存在随意描述
  • 代码“.gitignore”文件随意编写
  • 使用SSH方式进行clone代码,不够安全
  • Git没有一个友好的业务进行可视化
    对于以上这些问题,我调研了一下GitLab此神器。

一. GitLab的介绍

虽然GitLab是模仿Github的产品,并且他还是开源的。相比Github来说可以减少很多成本。Github本身是有企业版可以在公司环境搭建的,但是价钱不菲,看看Github Enterprise定价就知道了,最小的也要一年5000美金,对于小团队小公司是一笔不小的投入。有了GitLab可以几乎不需投入就能轻松有一套内部的Git管理平台。

Gitlab主要功能

1. 仓库管理

在创建仓库的时候可以选择创建到群组空间下(类似于Github的Orgnization);或者个人空间下,默认是私仓,可以选择公开。也可以到全局空间下,没有前缀;

2. 公仓和私仓 (权限分配)

每个仓库的权限可以单独分配,只需要设置为Master就可以对仓库有完全的操控权,如果需要过库到别人名下也是支持的。配置允许默认创建公仓还是私仓,自己创建的私仓只能自己和管理员看见。

3. Github工作流 (Github Flow了解)

Github工作流主要是使用Pull Requets的功能完成,没个人去提交自己的仓库,然后再去pull request来完成协作,gitlab也支持pull request。

4. 团队和群组管理

可以建立一个团队(比如公司的某个部门),把用户加进来,这些用户默认就有了访问团队下仓库的给定权限。群组和Github的Orgnizition类似,但又不完全一样。我一把把群组当作项目来用。注意:团队是没有仓库空间的,群组是有的。
注:团队是人员的集合,群组是项目的集合

Gitlab版本

GitLab CE : 社区版本(免费)(本Wiki使用)
GitLab EE : 企业版本(收费)

二. Gitlab安装

现在Docker已经很火了,具体Docker的使用请查看官网或其他文章进行了解,文章使用Docker方式进行安装。
在Dockerhub中有两个版本:

  • GitLab CE Docker image (本Wiki使用)
  • GitLab EE Docker image
    具体的Docker内安装文档official installation docs参考
    使用版本号:11.4.X

Docker运行

需要按照以下命令运行:

[XXXX-work:ZZZ sweetsop]$ sudo docker run --detach \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /data/app/gitlib/config:/etc/gitlab \
    --volume /data/app/gitlib/log:/var/log/gitlab \
    --volume /data/app/gitlib/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

端口说明:

本地端口号 容器端口号 用处
443 443 为了Https协议
80 80 为了Http协议
22 22 为了SSH协议

注意:对于gitlab默认的端口是Package defaults,不要和默认设置Package defaults一样的。不要设置冲突。

volume 说明:

本地路径 容器路径 用处
/srv/gitlab/data /var/opt/gitlab 为了存储应用数据
/srv/gitlab/logs /var/log/gitlab 为了存储日志
/srv/gitlab/config /etc/gitlab 为了存储GitLab的配置文件

配置Gitlab

在容器中有 /etc/gitlab/gitlab.rb 文件 ,具体的配置信息,Gitlab属性配置Omnibus GitLab documentation参考。

# 进入运行的Docker中进行操作
[XXXX-work:ZZZ sweetsop]$sudo docker exec -it gitlab /bin/bash  

编辑/etc/gitlab/gitlab.rb 文件

[XXXX-work:ZZZ sweetsop]$sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb
## GitLab configuration settings
##! This file is generated during initial installation and **is not** modified
##! during upgrades.
##! Check out the latest version of this file to know about the different
##! settings that can be configured by this file, which may be found at:
##! https://gitlab.com/gitlab-org/omnibus-gitlab/raw/master/files/gitlab-config-template/gitlab.rb.template
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
# external_url 'GENERATED_EXTERNAL_URL'
external_url 'http://100.100.100.100'   # 需要公开给外部的地址,主要是在系统生成一些地址是所使用,后面会提到。
## Roles for multi-instance GitLab
##! The default is to have no roles enabled, which results in GitLab running as an all-in-one instance.
......
  • 其他的一些使用docker-compose文件配置、 swarm做集群等,GitLab Docker images 官网参考。
  • 配置说明Configuration options官网参考。
  • external_url 设置需要带端口号的情况,需要和外部的一致。本人踩了好久的坑......
    例如:external_url 'http://100.100.100.100:1080'
    [XXXX-work:ZZZ sweetsop]$ sudo docker run --detach
    --publish 1080:1080 \ # 这些端口必须一致,我这里也不知道为什么会这样了解的可以给我指导一下。
    --name gitlab
    --restart always
    --volume /data/app/gitlib/config:/etc/gitlab
    --volume /data/app/gitlib/log:/var/log/gitlab
    --volume /data/app/gitlib/data:/var/opt/gitlab
    gitlab/gitlab-ce:latest

这个时候可以访问 http://100.100.100.100/ 地址,首次进入需要为root用户初始化页面。

Gitlab安装与配置_第1张图片
安装完成的效果图

三. Gitlab配置

1. 初始化root用户密码

首次进入时需要初始化root用户的密码,自己先填写完成。root是整个系统的Administrator,超级管理员。

2. 登录

填写用户名密码登录Gitlab系统。


Gitlab安装与配置_第2张图片
登录页面

3. 创建用户

按照Admin area > Overview > Users 引导进入的 用户管理页面。将团队内的用户都可以建立完成。

Gitlab安装与配置_第3张图片
用户管理列表

进入用户详细页面进行编辑
Gitlab安装与配置_第4张图片
用户详细页面

4. 创建Groups

按照Admin area > Overview > Groups 引导进入的 组织管理页面。创建属于自己的组织。

Gitlab安装与配置_第5张图片
创建组织列表

进入组织详细页面进行编辑
Gitlab安装与配置_第6张图片
组织详细页面

Visibility Level : 设置Private,项目不希望被其他人看见,只有组用户才可以看见。

具体说明如下:
私有库:只有被赋予权限的用户可见
内部库:登录用户可以下载
公开库:所有人可以下载

Gitlab安装与配置_第7张图片
添加用户到组内页面

点击 Add users to group按钮,进行用户添加,在选择完成用户的使用需要选择权限。

权限说明:
Guest(匿名用户) - 创建项目、写留言薄
Reporter(报告人)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段
Developer(开发者)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分
支 、创建标签、编写wiki
Master(管理者)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分
支 、创建标签、编写wiki、增加团队成员、推送受保护的分支、移除受保护的分支、编辑项目、添加部署密钥、配置项目钩子
Owner(所有者)- 创建项目、写留言薄、拉项目、下载项目、创建代码片段、创建合并请求、创建新分支、推送不受保护的分支、移除不受保护的分
支 、创建标签、编写wiki、增加团队成员、推送受保护的分支、移除受保护的分支、编辑项目、添加部署密钥、配置项目钩子、开关公有模式、将项目转移到另一个名称空间、删除项目

5. 禁止SSH

按照 Admin area > Setting > General > Visibility and access controls 引导展开,修改Enabled Git access protocols的值为 Only HTTP(S)

Gitlab安装与配置_第8张图片
配置页面

目的在于为了让用户不能根据SSH的方式来登录服务器。因此,只是开发 HTTP(S)这个方式。

6. Email配置

root@e187ccb15959:/etc/gitlab# vi /etc/gitlab/gitlab.rb                                  #编辑gitlab.rb 
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
# config email windtools
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "100.100.100.100"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_domain'] = "sweetsop.cn"
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'

配置说明 SMTP settings官网参考。

四. 客户端配置

1. 基本信息配置

1.1. 用户信息维护
创建用户章节中创建的用户,需要让注册用户进行登录操作。在做这步操作之前,需要让每个用户初始化自己的密码。开始登录,按照User setting > setting > profile 引导进入的 用户管理页面,进入页面配置用户信息。

Gitlab安装与配置_第9张图片
用户配置页面

1.2. 配置客户端信息

[XXXX-work:ZZZ sweetsop]$ git config --global user.name "XXX"               # 用户名
[XXXX-work:ZZZ sweetsop]$ git config --global user.email [email protected]       # 用户的邮箱

2. 配置用户名密码

由于只是使用了HTTP(S)方式,因此,需要配置客户端。

[XXXX-work:ZZZ sweetsop]$cd ~                                   #进入~(用户)目录,cd ~
[XXXX-work:ZZZ ~]$ touch  .git-credentials                      #编辑文件  .git-credentials
[XXXX-work:ZZZ ~]$ vi  .git-credentials                 
#添加http://用户名:密码@gitlab.com
http://fuyp:[email protected]
[XXXX-work:ZZZ ~]$ git config --global credential.helper store
[XXXX-work:ZZZ ~]$ more .gitconfig                               #查看文件:more .gitconfig,可以看到如下信息,设置成功。
[user]
    email = [email protected]
    name = XXX
[credential]
    helper = store

如果不配置,在每次执行git push | git pull命令时,让用户输入用户名和密码。

3. 提交代码问题解决

[XXXX-work:ZZZ sweetsop]$git push origin master             # 提交这个的时候错误发生
remote: GitLab: You are not allowed to push code to protected branches on this project.
To http://XXXX/XX.git

解决方式:

按照 Projects > Your Projects > 进入项目 > settings > repository > Protected Branches 引导展开,将保护的分支master 取消保护。

Gitlab安装与配置_第10张图片
取消保护后的状态

五. 备份还原

1. 通过任务计划crontab 实现自动备份

[XXXX-work:ZZZ sweetsop]$ sudo crontab -e -u root             # 编辑root的定时器
#secu-tcs-agent monitor, install at Tue Sep 27 10:19:33 CST 2016
......
0 2 * * * docker exec -t gitlab gitlab-rake gitlab:backup:create  # 添加备份的定时器

2. 备份保留7天

可设置只保留最近7天的备份,编辑配置文件 /etc/gitlab/gitlab.rb

[XXXX-work:ZZZ sweetsop]$ sudo docker exec -it gitlab /bin/bash       
[root@e187ccb15959:/etc/gitlab]# vi /etc/gitlab/gitlab.rb                                  #编辑gitlab.rb 
# 数值单位:秒
gitlab_rails['backup_keep_time'] = 604800 
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl reconfigure                                  #重新加载gitlab配置文件

3. 恢复

备份文件:

/var/opt/gitlab/backups/1499244722_2017_07_05_9.2.6_gitlab_backup.tar

停止 unicorn 和 sidekiq ,保证数据库没有新的连接,不会有写数据情况。

# 停止相关数据连接服务
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl stop unicorn 
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl stop sidekiq
# 指定恢复文件,会自动去备份目录找。确保备份目录中有这个文件。
# 指定文件名的格式类似:1499242399_2017_07_05_9.2.6,程序会自动在文件名后补上:“_gitlab_backup.tar”
# 一定按这样的格式指定,否则会出现 The backup file does not exist! 的错误
[root@e187ccb15959:/etc/gitlab]# gitlab-rake gitlab:backup:restore BACKUP=1499242399_2017_07_05_9.2.6
# 启动Gitlab
[root@e187ccb15959:/etc/gitlab]# gitlab-ctl start

你可能感兴趣的:(Gitlab安装与配置)