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中有两个版本:

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. 初始化root用户密码

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

2. 登录

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


登录页面

3. 创建用户

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

用户管理列表

进入用户详细页面进行编辑
用户详细页面

4. 创建Groups

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

创建组织列表

进入组织详细页面进行编辑
组织详细页面

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

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

添加用户到组内页面

点击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)

配置页面

目的在于为了让用户不能根据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'] = 'gitlab@sweetsop.cn'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@sweetsop.cn'

配置说明 SMTP settings官网参考。

四. 客户端配置

1. 基本信息配置

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

用户配置页面

1.2. 配置客户端信息

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

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:123456789@10.100.0.46
[XXXX-work:ZZZ ~]$ git config --global credential.helper store
[XXXX-work:ZZZ ~]$ more .gitconfig                               #查看文件:more .gitconfig,可以看到如下信息,设置成功。
[user]
    email = XXX@XXXX.com
    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 取消保护。

取消保护后的状态

五. 备份还原

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 注意:系统中不要安装其它第三方程序,可能会有端口占用冲突。(8080)下载准备安装包:gitlab-ce-11.1...
    瑾兰阅读 1,046评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,609评论 1 180
  • 我正在睡覺,聽到警報,嚇死了,我抹了一下冷汗,穿上衣服出去。 麥蕭說:「你為啥穿涼鞋?」我驚,看了看我的鞋,我吐了...
    苗条的饭桶233阅读 96评论 1 2
  • 在第32天的文章《问题的唯一原因,用三层系统给出解释》提到过一个点,我印象很深刻,讲的是一个知识管理课程讲的是如何...
    拉面的第二人生阅读 530评论 0 51