美文网首页
Gitlab安装与配置

Gitlab安装与配置

作者: 失去记忆5656 | 来源:发表于2018-11-12 11:53 被阅读0次

    最近公司需要让我将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
    

    相关文章

      网友评论

          本文标题:Gitlab安装与配置

          本文链接:https://www.haomeiwen.com/subject/nldnxqtx.html