您的位置:首页 >聚焦 >

当前观点:Gitlab安装及使用

2022-10-27 16:09:02    来源:程序员客栈

Gitlab是基于Ruby on Rails开源的项目管理和代码托管平台,可以很方便的管理公司私有库,所以通常是自建Gitlab。下面来看下Gitlab服务的安装。


(资料图)

官方硬件需求至少需要4GB内存。在CentOS 7安装为例,安装Gitlab。

安装配置依赖包

Gitlab服务需要系统防火墙打开HTTP,HTTPS和SSH访问。这些依赖通常是通用的,运维人员可能已经安装好

sudoyuminstall-ycurlpolicycoreutils-pythonopenssh-serversudosystemctlenablesshdsudosystemctlstartsshdsudofirewall-cmd--permanent--add-service=httpsudofirewall-cmd--permanent--add-service=httpssudosystemctlreloadfirewalld

安装邮局服务

我们可以安装Postfix进行邮件通知,注意DNS解析。如果安装有其他邮局服务,可以跳过。此外,安装Gitlab后,还需配置smtp。

sudoyuminstallpostfixsudosystemctlenablepostfixsudosystemctlstartpostfix

安装Gitlab软件包

我们可以使用官方提供的一键脚本安装包,安装最新稳定版

//输出到文件里是为了看下下载的脚本内容curlhttps://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh>rpm.shchmod+xrpm.sh./rpm.sh

或者在线下载官方包进行安装

wget-Ogitlab.rpmhttps://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-12.10.4-ce.0.el7.x86_64.rpm/download.rpmrpm-ivhgitlab.rpm#可以查看安装了哪些的文件,看到gitlab安装在/opt/gitlab目录下#rpm-qlgitlab-ce-12.10.4-ce.0.el7.x86_64

也可以使用软件源安装

#配置yum源cat<>/etc/yum.repos.d/gitlab-ce.repo[gitlab-ce]name=gitlab-cebaseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6Repo_gpgcheck=0Enabled=1Gpgkey=https://packages.gitlab.com/gpg.keyEOF#更新本地yum缓存sudoyummakecache#安装Gitlab-ce社区版sudoyuminstallgitlab-ce#自动安装最新版sudoyuminstallgitlab-ce-x.x.x#安装指定版本

我们还可以将gitlab安装在docker、kubernetes等容器服务里

修改配置

默认配置文件路径:/etc/gitlab/gitlab.rb,修改配置后,需要重启服务方可生效。

配置URL

external_url"http://gitlab.wenqy.com:80"nginx["listen_port"]=80

默认nginx 监听的是80 端口,如果nginx 修改端口,external_url 里面也必须带端口。gitlab安装内置默认用户root,首次访问external_url时,需要root用户登陆,设置密码。如果配置不修改重启,可能会出现502错误。

配置unicorn端口

unicorn是Ruby语言领域的一款http server软件。默认端口是8080。如果是非独享服务器,Tomcat默认端口也是8080,容易发生端口占用冲突,也会导致502错误。此时,可以需要unicorn端口。

unicorn["port"]=8901

配置SSH

新暴露了ssh的端口8902

gitlab_rails["gitlab_ssh_host"]="192.168.1.34"gitlab_rails["gitlab_shell_ssh_port"]=8902

修改ssh协议后,/etc/ssh/sshd_config配置文件新增ssh端口

#Port22Port22port8902

防火墙开放端口

iptables-IINPUT-ptcp-mstate--stateNEW-mtcp--dport8902-jACCEPTiptables-saveiptables-nL--line-number

重启ssh服务

systemctlrestartsshd.service

配置邮箱

填写配置好的smtp信息

gitlab_rails["smtp_enable"]=truegitlab_rails["smtp_address"]="smtp.wenqy.com"gitlab_rails["smtp_port"]=25gitlab_rails["smtp_user_name"]="wenqy@wenqy.com"gitlab_rails["smtp_password"]="123456"gitlab_rails["smtp_domain"]="smtp.uf-tobacco.com"gitlab_rails["smtp_authentication"]="login"gitlab_rails["smtp_tls"]=falsegitlab_rails["smtp_enable_starttls_auto"]=truegitlab_rails["smtp_openssl_verify_mode"]="none"gitlab_rails["smtp_ssl"]=falsegitlab_rails["smtp_force_ssl"]=falsegitlab_rails["gitlab_email_enabled"]=truegitlab_rails["gitlab_email_display_name"]="Gitlab"gitlab_rails["gitlab_email_from"]="wenqy@wenqy.com"

重启后进入console测试邮箱发送

gitlab-railsconsole#进入控制台,然后发送邮件Notify.test_email("wen.qy@qq.com","邮件标题","邮件正文").deliver_now

重启gitlab

修改配置后,重启生效

#重器gitlab配置服务sudogitlab-ctlreconfigure#重启gitlabgitlab-ctlrestart

常用命令

gitlab-ctlstart#启动全部服务gitlab-ctlrestart#重启全部服务gitlab-ctlstop#停止全部服务gitlab-ctlrestartnginx#重启单个服务gitlab-ctlstatus#查看全部组件的状态gitlab-ctlshow-config#验证配置文件gitlab-ctluninstall#删除gitlab(保留数据)gitlab-ctlcleanse#删除所有数据,重新开始gitlab-ctltail#查看服务的日志gitlab-railsconsoleproduction#进入控制台,可以修改root的密码gitlab-ctl--help#查看gitlab-ctl命令的帮助信息

汉化

如果需要汉化,汉化包与gitlab软件包版本要一致,否则可能发送意想不到的错误,汉化之前更应该先备份gitlab数据。未尝试,不建议汉化。

#暂停gitlabgitlab-ctlstop#查看gitlab版本cat/opt/gitlab/embedded/service/gitlab-rails/VERSION12.8.1-ee#下载对应版本汉化包gitclonehttps://gitlab.com/xhang/gitlab.git#备份cp-r/opt/gitlab/embedded/service/gitlab-rails{,.ori}#汉化包覆盖cp-rfgitlab-10-3-stable-zh/*/opt/gitlab/embedded/service/gitlab-rails/#启动gitlab-ctlstart

安装git

Gitlab是基于git做版本控制,访问gitlab需要安装git,在linux用yum源安装

#修改yum源,指向163mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup#下载对应版本repo文件,放入/etc/yum.repos.d/wgethttp://mirrors.163.com/.help/CentOS7-Base-163.repo#如果yum命令直接卡死,造成rpm数据库异常,杀进程#删除rpm数据文件rm-f/var/lib/rpm/__db.00*#重建rpm数据文件rpm-vv--rebuilddb#清除缓存yumcleanallyummakecache#安装gityum-yinstallgit

Groups

一个 GitLab 的组是一些项目的集合,连同关于多少用户可以访问这些项目的数据。 每一个组都有一个项目命名空间(与用户一样),所以如果一个叫training的组拥有一个名称是materials的项目,那么这个项目的 url 会是http://server/training/materials。

每一个组都有许多用户与之关联,每一个用户对组中的项目以及组本身的权限都有级别区分。 权限的范围从 “访客”(仅能提问题和讨论) 到 “拥有者”(完全控制组、成员和项目)。 权限的种类太多以至于难以在这里一一列举,不过在 GitLab 的管理界面上有帮助链接。

项目

一个 GitLab 的项目相当于 git 的版本库。 每一个项目都属于一个用户或者一个组的单个命名空间。 如果这个项目属于一个用户,那么这个拥有者对所有可以获取这个项目的人拥有直接管理权; 如果这个项目属于一个组,那么该组中用户级别的权限也会起作用。

每一个用户账号都有一个命名空间,即该用户项目的逻辑集合。 如果一个叫wenqy的用户拥有一个名称是 springcloudstudy的项目,那么这个项目的 url 会是http://server/wenqy/springcloudstudy。

每一个项目都有一个可视级别,控制着谁可以看到这个项目页面和仓库。 如果一个项目是私有的,这个项目的拥有者必须明确授权从而使特定的用户可以访问。 一个内部的项目可以被所有登录的人看到,而一个公开的项目则是对所有人可见的。 注意,这种控制既包括git fetch的使用也包括对项目 web 用户界面的访问。

配置SSH Keys

我们需要经常免登录git账号进行推送代码,这时需要配置SSH Keys,将生成的RSA 公钥填入。

当通常情况下,我们已经在GitHub、码云上已经分配了账号,可能是相同的ID,也可能在一个平台上有多个账号,我们可能需要区分不同的平台和账号和一个平台的多个账号。我们可以看下同时配置GitHub两个账号,用命令生成公钥私钥对

ssh-keygen -t rsa -C "one@github.com"

ssh-keygen -t rsa -C "two@github.com"

运行命令后不要一路回车,分别在第一次对话出现“Enter file in which to save the key”的时候输入不同的文件名,避免覆盖。两份包含私钥和公钥的4个文件,后缀为.pub的文件为公钥文件。linux或mac用户一定要在~/.ssh路径下运行命令行,不然生成的文件不会出现在当前目录,Windows用户则在“C:\Users\用户名\.ssh”目录下运行命令行。

配置config文件

在.ssh目录下创建config文件,在config文件中添加以下内容:

#githubserveroneHostone.github.comHostnamegithub.comUseronePreferredAuthenticationspublickeyIdentityFileC:\\Users\\xmn-wenqy.HELLO-WORLD\\.ssh\\id_rsa#githubservertwoHosttwo.github.comHostnamegithub.comUsertwoPreferredAuthenticationspublickeyIdentityFileC:\\Users\\xmn-wenqy.HELLO-WORLD\\.ssh\\id_rsa_cloud

每个账号单独配置一个Host,每个Host要取一个别名,一般为每个Host主要配置HostName和IdentityFile两个属性,配置完保存即可。Host的名字可以自定义名字,不过这个会影响git相关命令,例如:Host one.github.com这样定义的话,使用命令git clonegit@one.github.com:one/project.git,git@后面紧跟的名字改为one.github.com

为仓库设置局部的用户名和邮箱

#取消全局用户名/邮箱配置gitconfig--global--unsetuser.namegitconfig--global--unsetuser.email#单独为每个repo设置用户名/邮箱gitconfiguser.name"one_name";gitconfiguser.email"one_email"gitconfiguser.name"two_name";gitconfiguser.email"two_email"

配置好SSH Keys后就可以免登录推送代码到gitlab了。

钩子

GitLab 在项目和系统级别上都支持钩子程序。 对任意级别,当有相关事件发生时,GitLab 的服务器会执行一个包含描述性 JSON 数据的 HTTP 请求。 这是自动化连接你的 git 版本库和 GitLab 实例到其他的开发工具,比如 CI 服务器,聊天室,或者部署工具的一个极好方法。

对应root超级用户,有更多的管理权限,有管理面板,可以对使用者、项目进行管理和统计分析等等。

架构

gitlab 依赖的组件默认安装在/var/opt/gitlab/目录下

Gitlab利用Nginx或者Apache作为web前端代理到Unicorn web服务端。默认情况下,Unicorn和前端之间的通信是通过Unix domain socket进行的,但也支持通过TCP转发请求。利用Sidekiq从Redis队列中拉取job并处理,是Ruby后台任务处理器;利用Redis缓存作业、会话等信息;利用PostgreSQL做持久化数据库,保存用户、权限、issues等元信息;利用GitLab Shell接收SSH请求,GitLab Shell通过Gitaly访问存储库,为Git对象提供服务,并与Redis通信,将作业提交给Sidekiq供GitLab处理。GitLab Shell通过GitLab API查询以确定授权和访问;Gitaly从GitLab Shell和GitLab web app执行Git操作,并为GitLab web app提供一个API,以从Git获取属性(例如titile、、branches、tags、其他元数据),并获取blob(例如diff、commits、files);GitLab Workhorse是由GitLab设计的程序,可帮助缓解Unicorn的压力,它旨在充当智能反向代理,以帮助加快整个GitLab的运行速度。

此外,官方推荐服务器CPU核数至少4核,存储空间不少于gitlab所有存储库之和,磁盘最好采用逻辑卷管理方便扩展硬盘驱动器,gitlab占用太多内存,容易导致服务器崩溃,可以启用swap分区,缓解内存压力,例如,阿里云ECS默认是没有开启swap的,这值得注意一下。日志目录默认安装在/var/log/gitlab路径下。还应该注意Gitlab的性能优化、数据备份和迁移。

Gitlab安装和部署还是相对容易的,只是依赖的组件相对庞杂,太过吃内存。对于熟悉Git和GitHub的人也是极易上手,甚至是无感知使用的。

参考

https://about.gitlab.com/install/#centos-7

https://gitlab.com/gitlab-org/gitlab-foss/

https://packages.gitlab.com/gitlab/gitlab-ce

https://docs.gitlab.com/omnibus/settings/smtp.html

https://docs.gitlab.com/ee/install/requirements.html

https://docs.gitlab.com/ce/development/architecture.html

解决GitLab内存消耗大的问题:https://blog.csdn.net/ouyang_peng/article/details/84066417

入骨相思知不知

玲珑骰子安红豆

入我相思门,知我相思苦,长相思兮长相忆,短相思兮无穷极。

关键词: 配置文件 命名空间 数据文件

相关阅读