GitLab搭建以及配置

作者: tsyeyuanfeng | 来源:发表于2016-03-13 21:30 被阅读47590次

    一、系统环境

    • 服务器:阿里云主机
    • 操作系统:Centos7.0 64位
    • 已装软件:Nginx(80端口)、Apache(8080端口)、PHP-FPM(9000端口)

    二、安装版本

    • GitLab分为社区版(GitLab Community Edition)和企业版(GitLab Enterprise Edition)。社区版免费,企业版收费,但是功能比社区版多。根据目前的需求,选择安装社区版(GitLab-CE)。
    • 版本号:8.5.4

    三、安装方式

    以前试过源码安装,过程痛苦无比。此次选择官方提供的GitLab-CE Omnibus安装包。GitLab官网上有详细的安装说明,根据自己的操作系统选择相应的版本,按步骤操作即可。
    https://about.gitlab.com/downloads

    四、安装过程

    由于国内阿里云主机无法连接国外的GitLab Yum源,所以只能从GitLab中文社区直接下载rpm包进行安装。

    curl -LJO https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.5.4-ce.0.el7.x86_64.rpm
    rpm -i gitlab-ce-8.5.4-ce.0.el7.x86_64.rpm
    

    GitLab中文社区:http://www.gitlab.cc

    五、GitLab服务构成

    GitLab由以下服务构成:

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

    重点讲一下gitlab-shell和gitlab-workhorse。

    Gitlab Shell

    GitLab Shell有两个作用:为GitLab处理Git命令、修改authorized keys列表。

    当通过SSH访问GitLab Server时,GitLab Shell会:

    1. 限制执行预定义好的Git命令(git push, git pull, git annex)
    2. 调用GitLab Rails API 检查权限
    3. 执行pre-receive钩子(在GitLab企业版中叫做Git钩子)
    4. 执行你请求的动作
    5. 处理GitLab的post-receive动作
    6. 处理自定义的post-receive动作

    当通过http(s)访问GitLab Server时,工作流程取决于你是从Git仓库拉取(pull)代码还是向git仓库推送(push)代码。如果你是从Git仓库拉取(pull)代码,GitLab Rails应用会全权负责处理用户鉴权和执行Git命令的工作;如果你是向Git仓库推送(push)代码,GitLab Rails应用既不会进行用户鉴权也不会执行Git命令,它会把以下工作交由GitLab Shell进行处理:

    1. 调用GitLab Rails API 检查权限
    2. 执行pre-receive钩子(在GitLab企业版中叫做Git钩子)
    3. 执行你请求的动作
    4. 处理GitLab的post-receive动作
    5. 处理自定义的post-receive动作

    也许你会奇怪在通过http(s)推送(push)代码的情况下,GitLab Rails应用为什么不在GitLab Shell之前进行鉴权。这是因为GitLab Rails应用没有解析git push命令的逻辑。好的方法是将这些解析代码放在一个地方,这个地方就是GitLab Shell,这样我们就可以在通过SSH进行访问时重用这段代码。实际上,GitLabShell在执行git push命令时根本不会进行权限检查,它是依赖于pre-receive钩子进行权限检查的。而当你执行git pull命令时,权限检查是在命令执行之前的。对git pull命令的权限检查要简单得多,因为你只需要检查一个用户是否可以访问这个仓库就可以了(不需要检查分支权限)。

    好吧,GitLab Shell这段话都是翻译官网的。链接在这里
    https://gitlab.com/gitlab-org/gitlab-shell/blob/master/README.md

    最后一段话有点拗口,我对此还是有一点问题的:既然你把git push的逻辑都放在GitLab Shell里面了,为什么不把git pull的逻辑也都放在里面提供重用呢?
    猜想:git pull这段逻辑无法重用,因为通过http(s)方式访问时,要读取仓库的数据并且把这些数据封装成http包返回给客户端;而通过ssh方式访问时,仓库代码数据是通过ssh数据包返回的。两种访问方式返回数据的封装方式不一样,所以也没有必要提供重用。但是我觉得读取仓库数据这段逻辑应该还是重用了的。

    GitLab Workhorse

    GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。官网对GitLab Workhorse的介绍在这里:https://gitlab.com/gitlab-org/gitlab-workhorse/

    六、GitLab工作流程

    GitLab工作流程图

    七、配置

    配置考量

    • 要求能通过子域名git.zn2studio.com访问GitLab站点并且站点内的仓库地址也要用子域名显示。
    • 要求使用腾讯企业邮箱的SMTP服务器发送邮件。
    • 要求使用HTTP请求方式。
    • 要求能使用SSH连接方式。
    • 要求避免与已装软件的端口冲突
    • 要求使用系统已安装的Nginx服务器

    配置过程

    • 修改GitLab配置文件,停用GitLab内置Nginx
      nginx['enable'] = false
    • 使用系统已经安装的Nginx给gitlab-workhorse作反向代理
    • 因为unicorn的默认端口是8080,与系统已存在的Apache端口冲突,修改Apache端口为8000(也可以修改unicorn的端口)
    • 修改GitLab配置文件中的external_url
      external_url 'http://git.zn2studio.com'
      修改这个配置会影响GitLab里面显示的仓库链接
    • 修改GitLab邮件服务配置,使用腾讯企业邮箱的SMTP服务器
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
    gitlab_rails['smtp_port'] = 25
    gitlab_rails['smtp_user_name'] = "xxx"
    gitlab_rails['smtp_password'] = "xxx"
    gitlab_rails['smtp_domain'] = "smtp.qq.com"
    gitlab_rails['smtp_authentication'] = 'plain'
    gitlab_rails['smtp_enable_starttls_auto'] = true
    

    八、关于GitLab-CI

    GitLab-CE 8.0以上的版本已经将GitLab-CI集成进了GitLab里面,并且是默认开启的。所以不需要像以前一样再单独安装GitLab-CI并且为GitLab-CI开启单独的Server。如下图所示:


    GitLab-CI示意图

    相关文章

      网友评论

      • huanfuan:还想问下既然是 公司内部的私有仓库 怎么设置权限呢?
      • huanfuan:按照楼主给的教程 搞了一晚上 搭建起来了 中间改ip有点小坑
        总的来说搭建起来一个私有的github服务器 站在巨人的肩膀上
        其中的一些原理不是很懂
        比如Nginx
      • 1b4a48f5e322:按照文章配置的,但是网页显示EOF,不知道怎么回事呢
      • 过期的薯条:gitlab是一个好东西
      • 22c7371353de:你好我想问一下,我也是8.0以上的版本,为什么你的web界面比我的好看许多
      • coolzpw:你好,我是小白一枚,请教几个问题,如果我要在windows系统搭建需要怎么操作??是不是需要自己租个服务器把这个搭建在上面啊??
      • 习惯安静丶:楼主能否详细讲下怎么使用现成的nginx而不是捆绑的那个么?具体该怎么配置,求详解:grin:
      • xiAo__Ju:公司也用的这个,一直以为要钱的,今天领导才给我说是免费的。😄
        mark一下,跳槽备用
      • dongshangtong:你好!我用ubuntu装gitlab!装过程中没有提示网址设置账号
        tsyeyuanfeng:@dongshangtong 没明白什么意思,设置什么账号?
      • dongshangtong:你好!我用Ubuntu装gitlab 到启动了
      • 凤鸣游子:公司一般用的是收费的还是免费的?
        tsyeyuanfeng:@阿水哥哥 你自己对比一下官网的功能,看自己的需求了。小公司一般还是用免费的吧
      • 16643f454ce8:怎么实现“使用系统已经安装的Nginx给gitlab-workhorse作反向代理”呢,不太会弄
        16643f454ce8:@tsyeyuanfeng 谢谢,我去看看
        tsyeyuanfeng:@nmchgx 官网的文档上面有详细的配置方法http://doc.gitlab.com/omnibus/settings/nginx.html#using-an-existing-passengernginx-installation
        在Using an existing Passenger/Nginx installation这一节
      • 贝影:好东西
      • 续杯君:一直想折腾这一块,正好遇到!谢谢分享
        tsyeyuanfeng:@freedom_melody 哈哈,值得试试,欢迎多交流~
      • 82c6008e8429:gitlab-workhorse 是必须的么? 我看很多教程里面都没有使用这个…… 好像都是直接nginx到unicorn上~
        准备弄一个个人git server玩 谢谢分享`
        tsyeyuanfeng:@978543210 gitlab-workhorse应该是8.0版本以后才加进去的,我之前安装的7.0版本是没有这个东西的,不知道你看的教程是不是7.0版本之前的。

      本文标题:GitLab搭建以及配置

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