博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GitLab 架构
阅读量:4958 次
发布时间:2019-06-12

本文共 4935 字,大约阅读时间需要 16 分钟。

版本

一般使用的是社区版(Community Edition,CE),此外还有企业版(Enterprise Edition,EE)可以使用。

EE 和 CE 都至少需要名为 gitlab-shell 和 Gitaly 的附加组件。这些组件分别可从 gitlab-shell 和 gitaly 代码库获得。

GitLab 组件

  • repository:代码库,可以是硬盘或 NFS 文件系统
  • Nginx:Web 入口
  • 数据库:包含以下信息:
    • repository 中的数据(元数据,issue,合并请求 merge request 等)
    • 可以登录 Web 的用户(权限)
  • Redis:缓存,负责分发任务
  • :后台任务,主要负责发送电子邮件。任务需要来自 Redis
  • Unicorn:Gitlab 自身的 Web 服务器,包含了 Gitlab 主进程,负责处理快速/一般任务,与 Redis 一起工作。工作内容包括:
    • 通过检查存储在 Redis 中的用户会话来检查权限
    • 为 Sidekiq 制作任务
    • 从仓库(warehouse)取东西或在那里移动东西
  • :用于 SSH 交互,而不是 HTTP。gitlab-shell 通过 Redis 与 Sidekiq 进行通信,并直接或通过 TCP 间接访问 Unicorn
  • :后台服务,专门负责访问磁盘以高效处理 git 操作,并缓存耗时操作。所有的 git 操作都通过 Gitaly 处理
  • :反向代理服务器,可以处理与 Rails 无关的请求(磁盘上的 CSS、JS 文件等),处理 Git Push/Pull 请求,处理到 Rails 的连接(修改由 Rails 发送的响应或发送给 Rails 的请求,管理 Rails 的长期 WebSocket 连接等)。
  • :处理邮件请求。回复 GitLab 发出的邮件时,GitLab 会调用此服务

Sidekiq、Unicorn 和 GitLab-shell 是 GitLab 中处理任务的 3 个程序。

GitLab 应用程序是上述所有组件的集合。

系统布局

~/git 表示 git 用户的主目录,通常是 /home/git

GitLab 在安装时,会创建 git 用户,并安装在 /home/git 目录中。在主目录中是 gitlabhq 服务器软件以及 repository 所在的位置,repository 的位置可以单独配置。

repository 位于 /home/git/repositories 中。GitLab 是一款 Ruby on Rails 应用程序,因此可以通过研究 Ruby on Rails 应用程序的工作方式来了解内部工作的细节。

要通过 SSH 提供 repository,可以使用 gitlab-shell 这个附加应用程序,该应用程序安装在 /home/git/gitlab-shell 中。

组件

这里写图片描述

GitLab 使用 Nginx 将前端请求代理到 Unicorn Web 服务器。默认情况下,Unicorn 与前端之间的通信是通过 Unix domain 套接字进行的,但也支持通过 TCP 转发请求。Web 前端访问 /home/git/gitlab/public 绕过 Unicorn 服务器来提供静态页面,上传(例如头像图片或附件)和预编译资源。GitLab 使用 Unicorn Web 服务器提供网页和 。使用 Sidekiq 作为作业队列,反过来,它使用 redis 作为作业信息,元数据和作业的非持久数据库后端。

GitLab 应用程序使用 MySQL 或 PostgreSQL 作为持久数据库,保存用户,权限,issue,其他元数据等,默认存储在 /home/git/repositories 中提供的 git repository。

通过 HTTP/HTTPS 提供 repository 时,GitLab 使用 GitLab API 来解析授权和访问以及提供 git 对象。

gitlab-shell 通过 SSH 提供 repository。它管理 /home/git/.ssh/authorized_keys 内的 SSH 密钥,不应手动编辑。gitlab-shell 通过 Gitaly 访问 bare repository 以提供 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 的生产架构可以 。

安装目录

|-- home|   |-- git|       |-- .ssh|       |-- gitlab|           |-- bin|           |-- plugins|           |-- config|           |-- db|           |-- docker|       |-- gitlab-shell|           |-- bin|           |-- go|           |-- hooks|           |-- config.yml|       |-- data|           |-- repositories|           |-- backups|           |-- uploads

/home/git/.ssh - 包含 openssh 设置。指定由 gitlab-shell 管理的 authorized_keys 文件。

/home/git/gitlab - GitLab 核心软件。
/home/git/gitlab-shell - GitLab 核心的附加组件。包括 SSH 复制和其他功能。
/home/git/data/repositories - 由命名空间组织的所有项目的裸仓库(bare repository)。这是为所有项目维护推/拉的 git repository 的地方。这是项目的关键数据,最好备份。注意:repository 的默认位置可以在 GitLab 的 config/gitlab.yml 和 gitlab-shell 的 config.yml 中配置。

进程

ps aux | grep '^git'

作为系统用户,它需要持久数据库(MySQL/PostreSQL)和 redis 数据库。它还使用 Nginx 来代理 Unicorn。作为 git 用户,它启动 Sidekiq 和 Unicorn(默认情况下运行在端口 8080 上的基于 ruby 的 HTTP 服务器)。在 GitLab 用户下,通常有 4 个进程:unicorn_rails master(1进程),unicorn_rails worker(2进程),sidekiq(1进程)。

repository 访问

可以通过 HTTP 或 SSH 访问代码库。HTTP 中的 cloning/push/pull 使用 GitLab API,SSH 克隆由 gitlab-shell 处理。

问题定位

服务的 init 脚本

GitLab 的 init 脚本负责启停 Unicorn 和 Sidekiq:

/etc/init.d/gitlabUsage: service gitlab {start|stop|restart|reload|status}

Redis(存储键值对的非持久化数据库):

/etc/init.d/redisUsage: /etc/init.d/redis {start|stop|status|restart|condrestart|try-restart}

SSH 守护进程:

/etc/init.d/sshdUsage: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}

Web 服务器(二选一):

/etc/init.d/httpdUsage: httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}$ /etc/init.d/nginxUsage: nginx {start|stop|restart|reload|force-reload|status|configtest}

持久化数据库(二选一):

/etc/init.d/mysqldUsage: /etc/init.d/mysqld {start|stop|status|restart|condrestart|try-restart|reload|force-reload}$ /etc/init.d/postgresqlUsage: /etc/init.d/postgresql {start|stop|restart|reload|force-reload|status} [version ..]

服务的日志位置

  • gitlabhq(包括 Unicorn 和 Sidekiq 日志)
    通常包括 application.log、production.log、sidekiq.log、unicorn.stdout.log、githost.log 和 unicorn.stderr.log。
/home/git/gitlab/log/
  • gitlab-shell
/home/git/gitlab-shell/gitlab-shell.log
  • ssh
/var/log/auth.log   # Ubuntu/var/log/secure     # RHEL
  • nginx
    包括错误日志和访问日志。
/var/log/nginx/
  • redis
    这里还有 log-rotated 日志。
/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 服务器设置。
  • database.yml - 数据库连接设置。

gitlab-shell 的配置文件在 /home/git/gitlab-shell/config.yml

维护任务

GitLab 还提供了 rake 任务,可以用来查看版本信息或检查配置是否正确。详情可以参考 。简而言之:

sudo -i -u gitcd gitlabbundle exec rake gitlab:env:info RAILS_ENV=productionbundle exec rake gitlab:check RAILS_ENV=production

注意:建议使用 sudo -i -u gitsudo su - git 登录 git 用户。虽然 gitlabhq 提供的 sudo 命令在 Ubuntu 中工作,但它们并不总是在 RHEL 中工作。

转载于:https://www.cnblogs.com/kika/p/10851614.html

你可能感兴趣的文章
div 只显示两行超出部分隐藏
查看>>
C#小练习ⅲ
查看>>
电源防反接保护电路
查看>>
arraylist
查看>>
zoj 1649 Rescue (BFS)(转载)
查看>>
2124: 等差子序列 - BZOJ
查看>>
字符串匹配算法综述
查看>>
Linux centosVMware shell 管道符和作业控制、shell变量、环境变量配置文件
查看>>
【设计模式】工厂模式
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
客户数据库出现大量cache buffer chains latch
查看>>
機械の総合病院 [MISSION LEVEL: C]
查看>>
实战练习细节(分行/拼接字符串/字符串转int/weak和copy)
查看>>
Strict Standards: Only variables should be passed by reference
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
AngularJs表单验证
查看>>
静态方法是否属于线程安全
查看>>
02号团队-团队任务3:每日立会(2018-12-05)
查看>>
SQLite移植手记1
查看>>
C# windows程序应用与JavaScript 程序交互实现例子
查看>>