GitLab 部署

GitLab概述

众所周知,提供Git项目仓库托管服务的是业界有名的GitHub,可是你要将代码上传到GitHub里,并且要将项目设置为私有那就得收费。而GitLab就是为了提供免费的项目仓库托管服务而诞生(社区版免费,企业版须要订阅)。html

GitLab是利用Ruby on Rails语言编写的 一个开源的版本管理系统,后来一部分用Go语言重写,它能实现一个自托管的Git项目仓库,可经过Web界面进行访问公开的或者私人项目。与 Github 相似,GitLab 可以浏览源代码,管理缺陷和注释。node

能够管理团队对仓库的访问,它很是易于浏览提交过的版本并提供一个文件历史库。团队成员能够利用内置的简单聊 天程序(Wall)进行交流。 它还提供一个代码片断收集功能能够轻松实现代码复用,便于往后有须要的时候进行查 找。python

官网:https://about.gitlab.com/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/linux

GitLab安装

GitLab提供了两种方式安装:nginx

  • 使用官方打包好的rpm包,该方式简单快捷,也不容易出问题
  • 手动安装,把代码下载下来,而后安装各类环境,例如:数据库、nginx、编译环境等,一步一步安装起来就很麻烦也费时间,还容易出问题

环境规划git

主机名 IP地址 说明
git01-21 10.4.7.21 Gitlab
git02-22 10.4.7.22 Gitlab同步仓库

操做系统:centos7.4
内存:实验环境至少 2G,生产建议 4G 以上
磁盘:至少 50G,根据生产实际仓库大小进行配置
安全:关闭防火墙、selinuxgithub

1.安装GitLab依赖包web

[root@git01-21 ~]# yum install -y curl policycoreutils openssh-server \
                                     openssh-clients policycoreutils-python

特别是:若是不安装依赖包的话,在使用rpm安装github会报错redis

2.获取Gitlab安装包并安装sql

//1.经过wget下载gitlab rpm安装包
[root@git01-21 ~]# mkdir /opt/src && cd /opt/src
[root@Git src]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

//2.下载完成后,使用rpm安装
[root@Git src]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

3.配置GitLab

Gitlab的默认配置文件路径为:/etc/gitlab/gitlab.rb

[root@git01-21 ~]# vim /etc/gitlab/gitlab.rb
# 对外公开访问地址(IP/域名)
external_url 'http://10.4.7.21'

# 数据目录
git_data_dirs({
  "default" => {
     "path" => "/data/gitlab/data"
    }
})

建立数据目录

[root@git01-21 ~]# mkdir -p /data/gitlab/data

4.从新配置gitlab

// 修改完主配置文件后,使用 gitlab-ctl reconfigure 从新配置 gitlab
[root@git01-21 ~]# gitlab-ctl reconfigure

需等待数分钟才能完成

GitLab 主要目录:

/data/gitlab/data/repositories # 仓库存储目录
/opt/gitlab              # GitLab应用代码和相应的依赖程序 
/var/opt/gitlab          # gitlab-ctl reconfigure 命令编译后的应用数据和配置文件,不须要人为修改配置 
/etc/gitlab              # 配置文件目录 
/var/log/gitlab          # 此目录下存放了GitLab各个组件产生的日志 
/var/opt/gitlab/backups/ # 备份文件生成的目录

每次修改了GitLab的主配置文件,都须要执行gitlab-ctl reconfigure

5.启动GitLab

// 从新配置执行成功后,就能够启动 Gitlab,
[root@git01-21 ~]#  gitlab-ctl start
ok: run: gitaly: (pid 2919) 189s
ok: run: gitlab-monitor: (pid 2935) 189s
ok: run: gitlab-workhorse: (pid 2905) 190s
ok: run: logrotate: (pid 2611) 221s
ok: run: nginx: (pid 2591) 227s
ok: run: node-exporter: (pid 2756) 213s
ok: run: postgres-exporter: (pid 2966) 188s
ok: run: postgresql: (pid 2355) 268s
ok: run: prometheus: (pid 2952) 188s
ok: run: redis: (pid 2295) 274s
ok: run: redis-exporter: (pid 2788) 209s
ok: run: sidekiq: (pid 2558) 235s
ok: run: unicorn: (pid 2520) 237s

// 查看各组件状态
[root@git01-21 ~]# gitlab-ctl status

GitLab 由主要由如下服务构成,他们共同承担了 Gitlab 的运做须要

  • Nginx:静态web服务器。
  • gitlab-shell:用于处理Git命令和修改
  • authorized keys 列表。
  • gitlab-workhorse: 轻量级的反向代理服务器。
  • logrotate:日志文件管理工具。
  • postgresql:数据库。
  • redis:缓存数据库。
  • sidekiq:用于在后台执行队列任务(异步执行)。
  • unicorn:An HTTP server for Rack applications,GitLab Rails 应用是托管在这个服务器上面的。
  • prometheus:监控软件
  • redis-exporter:redis监控
  • node-exporter:节点系统监控
  • postgres-exporter:postgres 数据库监控

6.GitLab 经常使用命令

启动全部 gitlab 组件: gitlab-ctl start 
中止全部 gitlab 组件: gitlab-ctl stop 
中止 postgresql 组件: gitlab-ctl stop postgresql 
中止相关数据链接服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq 
重启全部 gitlab 组件: gitlab-ctl restart 
重启 gitlab-workhorse 组件: gitlab-ctl restart gitlab-workhorse 
查看服务状态 gitlab-ctl status
查看日志 sudo gitlab-ctl tail 
检查 redis 的日志 sudo gitlab-ctl tail redis

GitLab访问

1.浏览器输入:http://10.4.7.21,访问GitLab的web界面

2.首次登录须要咱们设置root用户密码(长度要求8位以上)

3.从新设置用户的密码后,便可使用root用户及刚刚设置的密码登陆GitLab

4.登陆后的页面以下,至此完成了GitLab的安装

GitLab关闭用户注册

咱们Gitlab系统是企业内部私有代码仓库,全部用户都是由管理员建立,并不须要注册功能,所以咱们须要关闭此功能。

1.使用root登陆GitLab,点击页面最上方的Admin area

2.进入管理员区域页面,点击页面左侧菜单栏最下方的Settings

3.进入Settings页面后,下拉页面找到Sign-up Restrictions选项

4.取消Sign-up enabled选项前面的勾选后,下拉到页面的最下方,点击Save按钮完成配置。退回到系统的登陆页面,发现已经没有用户注册功能。

GitLab仓库管理

GitLab 是经过组(group)的概念来统一管理仓库(project)和用户(user),经过建立组,在组下再建立仓库,再将用户加入到组,从而实现用户与仓库的权限管理。

建立组

1.在管理员页面点击页面顶部的Admin area按钮,进入管理员区域

2.在页面右侧点击绿色的New group按钮,进入建立组页面

3.在建立组页面中,组路径和组名称为必填项,并且此两处内容最好一致

组可见级别:
一、visibility Level:选择谁能够访问该组:咱们默认选择 private 便可,
二、Private:只有受权的用户才能够看到
三、Internal:只要是登陆 gitlab 的用户就能够看到
四、Public:只要能够访问 gitlab web 页面的人就能够看到

4.点击页面最下的create group按钮,完成组的建立,进入组管理页面

在此页面咱们可为组添加用户。

建立用户

1.在管理员页面点击页面顶部的Admin area按钮,进入管理员区域

2.在页面右侧点击绿色的New user按钮,进入建立用户页面

3.在建立用户页面,输入用户名昵称、用户名、电子邮件、选择用户级别

个性化设置(这里就保留为空了):

4.点击页面最下部的create user按钮,完成用户建立,进入用户管理页面,点击页面右上页的 Edit 按钮,为用户设置初始密码

5.在Password选项中,填写设置用户的密码,点击页面最下的Save changes按钮,完成密码设置

在此页面也可同时修改用户注册信息。

用户受权

用户建立完成后,咱们就须要对用户进行受权,从而使用户能够管理仓库,有两种方式,

  • 方法一:将用户加入到组,这样用户能够管理组内的仓库,
  • 方法二:直接受权用户管理仓库。

一般咱们采用的方式方法二用户加入相应的组,并赋予不一样的角色。 GitLab 中用户的角色是系统定义好的,不能更改。这一点可能不符合咱们正常的思惟习惯。下面咱们将刚建立的Jason用户添加到咱们的development组,将赋予developer权限。

1.在管理员页面点击页面顶部的Admin area按钮,进入管理员区域

2.点击用户组下面的development组,进入组管理界面

3.选择咱们刚建立的Jason用户,选择developer角色,而后添加到组

注:关于每一种角色对应的权限,可参见官方文档相关内容:
https://docs.gitlab.com/ee/user/permissions.html

GitLab建立仓库

在GitLab中,你能够建立仓库用来存储你的程序代码、做为一个问题跟踪器、用 于代码协做、用于持续集成中的构建、测试和部署等。

1.在管理员区域点击New project按钮,或者点击导航栏中的项

2.进入到新建 project 页面

3.默认建立的是空仓库,须要执行一些命令初始化仓库

4.咱们将sky-demo仓库加入到development组后,组内的成员便可以看到该仓库,咱们使用Jason用户登陆,便可看到该仓库。

配置SSH KEY

前面已经在GitLab建立了仓库,而且受权用户可使用仓库,全部的操做都是在 WEB 页面进行,下在介绍如何使用客户端来链接的GitLab仓库。
个人development组的sky-demo仓库是私有的,只有受权的用户才能够访问到该仓库,那么只要将客户端的用户与咱们 GitLab的用户绑定,客户端便可访问到 GitLab上的仓库,建议使用SSH方式实现客户端与 Gitlab 用户的绑定。

now,如今要实现git02-22这个客户端可以从development组的sky-demo仓库拉取或者提交代码,具体配置以下:
1.在git02-22客户端生成 ssh 密钥对(windows客户端下只能使用rsa加密方式)

// 客户端生成基于rsa加密方式的密钥
[root@git02-22 ~]# ssh-keygen -t rsa

// 客户端已经生成了公钥和私钥
[root@git02-22 ~]# ll ~/.ssh/
total 8
-rw------- 1 root root 1766 Mar  7 22:59 id_rsa
-rw-r--r-- 1 root root  395 Mar  7 22:59 id_rsa.pub

2.将git02-22客户端与GitLab的Jason用户绑定,复制git02-22客户端的公钥,在GitLab主页面点击用户设置

3.进入到用户设置页面,点击左侧菜单栏的SSH Keys

4.进入到SSH Keys管理页面

此处只能添加公钥,若是添加私钥系统将报错,此外一个公钥在整个GitLab系统中只能添加一次,可是一个GitLab用户能够添加多个公钥

设置分支保护

在实际使用过程当中,咱们一般会保持master分支稳定,用于生产环境的版本发布,只有受权的用户才能够向master合并代码。要实现此功能,咱们须要将master设置为保护分支,并受权什么用户能够向master用户推送代码。

咱们的Jason用户下面有个sky-demo仓库,可是它是普通用户,而我又把git02-22的key添加到Jason用户,就会致使一个问题,GitLab上默认不容许普通用户提交代码到仓库的Master分支,因此咱们须要经过分支保护功能Jason用户受权,给予能提交代码到仓库的Master分支

1.在设置分支保护以前,咱们必需要手动初始化一下sky-demo仓库,添加一个文件。

若是仓库为空,则没法设置分支受保护

2.新增文件名README.md,最后提交文件

3.在GitLab上设置分支保护,使用 root 用户点击demo仓库页面左下角的Settings

4.进入设置页面,选择设置菜单栏下面的Repository选项

5.进入repository设置页面

6.展开Protected Branches

仓库操做

咱们刚才在Json用户添加了git02-22的公钥,那么git02-22就能访问Json用户用户所属组下的全部仓库,咱们也建立了一个名为:sky-demo的仓库,让咱们拉取该仓库并建立文件在推送到仓库吧

1.建立/data/git_repo目录,在该目录下拉取仓库,建立文件并提交到master分支

[root@git02-22 ~]# mkdir -p  /data/git_repo && cd /data/git_repo
[root@git02-22 git_repo]# git clone git@10.4.7.21:development/sky-demo.git
[root@git02-22 git_repo]# cd sky-demo
[root@git02-22 sky-demo]# git config --global user.email "jasondev@163.com"
[root@git02-22 sky-demo]# git config --global user.name "xmh"
[root@git02-22 sky-demo]# echo "123" >index.html
[root@git02-22 sky-demo]# git add .
[root@git02-22 sky-demo]# git commit -m "first"

// 将代码提交到master分支
[root@git02-22 sky-demo]# git push -u origin  master
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 268 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@10.4.7.21:development/sky-demo.git
   743b351..c5c4f70  master -> master
Branch master set up to track remote branch master from origin.

2.登陆到GitHub界面的sky-demo仓库,能够看到刚才提交的代码

相关文章
相关标签/搜索