GitLab架构概述
软件交付
GitLab有两个软件发行版:开源版社区版(CE)和开芯企业版(EE)。GitLab在不同的订阅。
新版本的GitLab在稳定分支中发布,主分支用于前沿开发。
有关信息,请参见GitLab发布过程。
EE和CE都需要一些名为gitlab-shell和Gitaly的附加组件。这些组件可从gitlab-shell和吉塔分别存储库。新版本通常是标签,但留在主分支上将为您提供最新的稳定版本。新版本通常与GitLab CE的发布时间大致相同,但被认为是关键的非正式安全更新除外。
实体办公室类比
你可以把GitLab想象成一个实体办公室。
存储库是GitLab处理的货物。它们可以储存在仓库里。它可以是硬盘,也可以是更复杂的东西,比如NFS文件系统;
Nginx就像前台一样。用户来到Nginx并请求由办公室工作人员完成的操作;
数据库是一系列金属文件柜,资料包括:
- 仓库中的货物(元数据、问题、合并请求等);
- 来到前台的用户(权限)
复述,是一个带有“小隔间”的交流板,可以容纳办公室工作人员的任务;
Sidekiq主要负责发送电子邮件的员工。它从Redis通信板接收任务;
独角兽工人是一个处理快速/平凡任务的员工。他们与通信委员会(Redis)一起工作。他们的工作描述:
- 通过检查存储在Redis“cubby hole”中的用户会话来检查权限;
- 为Sidekiq安排任务;
- 从仓库里拿东西或者搬东西;
GitLab-shell是第三种worker,它从传真机(SSH)而不是前台(HTTP)接受命令。GitLab-shell通过“通信板”(Redis)与Sidekiq通信,并直接或通过前台向独角兽工作人员询问快速问题。
吉塔是一个后台,专门用于访问磁盘以高效地执行git操作,并保存昂贵操作结果的副本。所有的git操作都要经过意大利。
GitLab企业版(应用程序)是办公室运行所依据的流程和业务实践的集合。
系统布局
当提到~ git
在图片中,它指的是git用户的主目录,通常是/home/git
GitLab主要安装在/home/git
用户主目录为git
用户。在主目录中是gitlabhq服务器软件和存储库所在的位置(尽管存储库位置是可配置的)。
裸存储库位于/home/git/repositories
。GitLab是一个ruby on rails应用程序,因此内部工作的细节可以通过研究ruby on rails应用程序的工作原理来学习。
要通过SSH服务存储库,有一个名为gitlab-shell的附加应用程序安装在/home/git/gitlab-shell
。
组件
典型的GitLab安装在GNU/Linux上。它使用Nginx或Apache作为web前端来代理传递独角兽web服务器。默认情况下,Unicorn和前端之间的通信是通过Unix域套接字进行的,但也支持通过TCP转发请求。web前端访问/home/git/gitlab/public
绕过Unicorn服务器来提供静态页面,上传(例如头像图像或附件)和预编译资产。GitLab提供网页和GitLab API使用Unicorn web服务器。它使用Sidekiq作为作业队列,而作业队列又使用redis作为非持久性数据库后端,用于处理作业信息、元数据和传入作业。
GitLab web应用程序使用MySQL或PostgreSQL来保存持久的数据库信息(例如用户,权限,问题,其他元数据)。GitLab存储它所服务的裸git存储库/home/git/repositories
默认情况下。它还将默认的分支和钩子信息保存在裸存储库中。
当通过HTTP/HTTPS提供存储库时,GitLab利用GitLab API来解析授权和访问以及服务git对象。
附加组件gitlab-shell通过SSH为存储库提供服务。它管理其中的SSH密钥/home/git/.ssh/authorized_keys
不应该手工编辑。GitLab -shell通过Gitaly访问裸存储库,为git对象提供服务,并与redis通信,将作业提交给Sidekiq供GitLab处理。GitLab -shell查询GitLab API来确定授权和访问。
Gitaly从GitLab -shell和GitLab web应用程序执行git操作,并为GitLab web应用程序提供API,从git获取属性(例如title, branches, tags,其他元数据)和blob(例如diffs, commits, files)。
你也可能对GitLab.com的生产架构。
安装文件夹摘要
总结一下的目录结构。git
用户主目录。
流程
Ps x / grep '^git'
GitLab有几个组件要操作。作为系统用户(即,任何非系统用户)git
用户)它需要一个持久的数据库(MySQL/PostreSQL)和redis数据库。它还使用Apache httpd或Nginx来proxypass Unicorn。随着git
用户启动Sidekiq和Unicorn(一个运行在端口上的简单ruby HTTP服务器)8080
默认情况下)。在GitLab用户下,通常有4个进程:unicorn_rails主
(1)过程,unicorn_rails工人
(2流程),sidekiq
(1)过程。
库访问
存储库可以通过HTTP或SSH访问。HTTP克隆/推/拉使用GitLab API, SSH克隆由GitLab -shell处理(前面解释过)。
故障排除
有关更多信息,请参阅README。
初始化服务脚本
GitLab初始化脚本启动和停止Unicorn和Sidekiq。
/etc/init.d/gitlab用法:service gitlab {start|stop|restart|reload|status}
Redis(键值存储/非持久化数据库)
/etc/init.d/redis用法:/etc/init.d /复述,{开始|停止状态| |重启| condrestart | try-restart}
SSH守护进程
/etc/init.d/sshd用法:/etc/init.d / sshd{开始|停止|重启|重载|才| condrestart | try-restart |状态}
Web服务器(以下之一)
/etc/init.d/httpd用法:httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}/etc/init.d/nginx美元用法:nginx {start|stop|restart|reload|force-reload|status|configtest}
持久化数据库(以下之一)
/etc/init.d/mysqld用法:/etc/init.d / mysqld{开始|停止状态| |重启| condrestart | try-restart |重载|才}/etc/init.d/postgresql美元用法:/etc/init.D /postgresql {start|stop|restart|reload|force-reload|status} [version ..]
记录服务的位置
gitlabhq(包括Unicorn和Sidekiq日志)
/home/git/gitlab/log/
包含application.log
,production.log
,sidekiq.log
,unicorn.stdout.log
,githost.log
和unicorn.stderr.log
正常。
gitlab-shell
/home/git/gitlab-shell / gitlab-shell.log
ssh
/var/log/auth.log
auth log(在Ubuntu上)。/var/log/secure
授权日志(在RHEL上)。
nginx
/var/log/nginx/
包含错误和访问日志。
Apache httpd
- Apache日志说明。
/var/log/apache2/
包含错误和输出日志(在Ubuntu上)。/var/log/httpd/
包含错误和输出日志(RHEL)。
复述,
/var/log/redis/redis.log
这里也有对数旋转的对数。
PostgreSQL
/var/log/postgresql/*
MySQL
/var/log/mysql/*
/var/log/mysql.*
GitLab特定的配置文件
GitLab的配置文件位于/home/git/gitlab/config/*
。常用的配置文件包括:
gitlab.yml
- GitLab配置。unicorn.rb
- Unicorn web服务器设置。的形式
—数据库连接设置。
Gitlab-shell有一个配置文件/home/git/gitlab-shell / config.yml
。
维护任务
GitLab提供rake任务,您可以使用这些任务查看版本信息,并对配置进行快速检查,以确保在应用程序中正确配置。看到维护rake任务。简而言之,要做到以下几点:
Sudo -i -u gitcd gitlabbundle exec rake gitlab:env:info RAILS_ENV=productionbundle exec rake gitlab:检查RAILS_ENV=生产
注意:建议登录git
用户使用Sudo -i -u git
或Sudo su - git
。虽然gitlabhq提供的sudo命令在Ubuntu中工作,但它们并不总是在RHEL中工作。
GitLab.com
我们还详细介绍了我们的GitLab.com架构但除非你拥有数百万用户,否则这可能是过高的。