树莓派上搭建GitLab教程
前言:
关键字:Raspberry Pi、GitLab、Git;
利用树莓派搭建GitLab私有代码仓库,可以说是一件非常简单的事,按照官方的安装教程操作,即可轻松搭建起GitLab服务。GitLab是在我见过的所有开源项目中,对树莓派支持最友好的一个项目了,其官方网站就提供了基于“ARM”架构设备的“DEB”安装包。
当然,GitLab在树莓派上运行,还是存在缺点的,就是GitLab的资源占用将会比较高;从GitLab的ARM包的资源库的命名方式来推断,GitLab应该是在树莓派2代开始提供对应的安装包服务的,也就是说,理论上来说,在低版本的树莓派上运行GitLab服务应该是不存在问题的,但事实是,当前的GitLab的ARM版本已经不能够在低版本的树莓派上正常运行了。博主首次安装测试是在“Raspberry Pi 3B”上操作的,但结果是以失败告终;后来博主在“Raspberry Pi 4B -- 4GB版”安装成功,分析此前失败的原因,原因大概能推断为系统资源的不足,GitLab正常无负载运行时,整个操作系统的RAM占用为1.6GB以上[含操作系统本身其它服务对内存的占用],而“Raspberry Pi 3B”本身只具备1GB的RAM,连GitLab运行的基本要求也达不到;当然,以上说法并不严谨,因为还在存在“SWAP”虚拟内存这个东西,但树莓派的操作系统默认“SWAP”虚拟内存的大小为100MB,所以以上说法现实中基本是对的。
当然,也并不是说完全在低版本的树莓派上不能安装GitLab,但显然这样做要麻烦很多,比如说扩大“SWAP”虚拟内存的大小为“2GB-4GB”以满足GitLab对内存上的要求,但显然,博主严重不建议这么做~
另注:下文图片仅参考~
一、硬件与软件环境
本教程在以下环境下搭建测试通过!注:本处博主使用了一个较旧的安装包,主要是因为博主很早之前就下过GitLab基于ARM架构的安装包了,并且不想再去重新下载了,对于读者而言,博主认为,既然都是要下载GitLab的安装包,那就下载最新的,并不需要一定对应博主所使用的版本!之所以博主一反常态,建议读者使用与本示例不同的安装包,主要原因是GitLab项目在开源上实在是做得比较全面[个人感觉],博主比较放心~[附:官方ARM架构安装包下载地址];
-
硬 件 :Raspberry Pi 4B -- 4GB版
-
操作系统 :Raspbian Buster Lite
-
GitLab安装包 :gitlab-ce_12.8.1-ce.0_armhf.deb
-
测试日期:2020年06月19日
二、配置及安装
假设以下为一个全新配置的树莓派操作系统,系统版本为“Raspbian Buster Lite”,首先,我们使用以下命令安装相关的依赖与必要软件;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
sudo apt-get update # 更新软件索引; sudo apt-get install -y curl openssh-server ca-certificates # 安装相关依赖; sudo apt-get install -y postfix # 也是安装相关依赖,这主要是用于GitLab发送电子邮件的; # 关于“postfix”的配置,这又是另一个内容了,此处不作深入; # 在此部分依赖安装时,将默认弹出一个配置页面,由于本处是局域网内使用; # 对于其配置,我们只需要直接按回车确认即可,无需修改或配置任何内容; # 当然,如果你希望GitLab能正常向公网发送电子邮件,那本处你则必需要作对应的 # 正确的配置,本文也对此部分内容不作讨论; wget --content-disposition https://packages.gitlab.com/gitlab/raspberry-pi2/packages/raspbian/buster/gitlab-ce_13.2.3-ce.0_armhf.deb/download.deb # 此处为下载安装包,注意,这与官方的安装教程不同,官方是使用脚本文件进行安装的, # 而本处是使用下载的“DEB”包进行安装,读者也可以使用官方的脚本文件进行安装, # 但使用官方脚本的方式下,则无法自定义GitLab的安装版本了; # 另外,本处下载的安装包为“gitlab-ce_13.2.3-ce.0_armhf.deb”,不同于博主所使用的安装包[gitlab-ce_12.8.1-ce.0_armhf.deb], # 博主使用的这个安装包是因为之前已经下载过了,不想再下载最新的; # 示例使用的安装包为博主写这篇博文时,官方所发布的最新的基于ARM架构的安装包, # 目的只是方便读者复制命令使用; # 若想自定义GitLab的安装版本,请至“一、硬件与软件环境”中所附带的官方地址下载所需要的版本; sudo dpkg -i gitlab-ce_13.2.3-ce.0_armhf.deb # 安装GitLab[基本安装]; # 安装包较大,需要等待若干时间; |
在成功安装后将出现以下提示,如下图:
之后,我们按照相关提示进行最基本的配置操作[见上图提示框],执行以下命令对“/etc/gitlab/gitlab.rb”文件进行配置;另注:此步建议加入“四、资源优化”中的配置,同时操作,如此操作能样整个服务搭建起来更加简单;
1 2 3 4 5 6 7 |
sudo nano /etc/gitlab/gitlab.rb # 此文件为GitLab的主配置文件,可配置项非常多; # 一个完整的GitLab服务由许多其它的服务构成,其配置文件有2000行以上[含注释], # 涉及各种非GitLab主服务的配置,所以说一般个人使用,不建议作较多的修改, # 即使是企业应用,博主也不建议对该文件作过多的修改,GitLab就其安装包的内容来说, # 它并不仅是一个工具软件,它是一个系统; # 本示例仅对其访问地址进行了修改,这是必要的; |
注:此处修改为定义GitLab的访问地址[域名或IP],将以下原文内容:
1 |
external_url 'http://gitlab.example.com' |
修改为[请依据自身设备上的IP地址进行修改];特别提示:关于“external_url”的修改,本处修改一定不要带上自定义的端口号,对GitLab服务的端口号修改,不应该在此配置项上定义;虽然说在本处带上自定义端口号也能使用服务生效,但日后若想再对本配置进行修改,则很有可能引起一些不可预期的错误;关于服务端口的配置,见“五、服务端口”;
1 |
external_url 'http://192.168.100.252' |
在对配置文件进行修改后,执行以下命令使配置生效;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
sudo gitlab-ctl reconfigure # 使用修改后配置应用至GitLab服务内; # 这应该算是真正的正式安装了[你将看到GitLab生成了大量新文件]; # 注意:这一过程时间比较长,在“Raspberry Pi 4B -- 4GB版”下, # 博主的树莓派首次配置了大约在十五分钟左右; # # 另特别补充: # 至此,GitLab实际上已经可以使用了,但若想将服务应用于公网, # 一般的家庭或个人用户,由于没有固定的公网IP, # 若想将服务应于公网,一般需要以下步骤: # --> 1.申请网上的动态域名服务; # --> 2.家用路由器上启用动态域名功能; # --> 3.启用家用路由器上的端口转发功能; sudo reboot # 重启设备,这是博主的习惯; # 因为在ARM的设备上安装服务类软件,有太多的不可预期问题了, # 重启设备后,若出现错误,最少能排除错误是由系统引发的可能; |
在整个“sudo gitlab-ctl reconfigure”命令执行完成后,你将极可能遇到“service[grafana]”的错误[见下图];不需要管这一个错误,产生这一个错误的原因是因为,该部分操作命令均需要“grafana”组件在运行状态下才能执行成功,而GitLat首次部署时,“grafana”组件是不可能在运行状态下的。当然,出现警告信息,极具怀疑精神的博主有理由相信整个GitLab服务并没有完全正确配置,要解决这一个问题,我们只需要在GitLab服务能正常使用后,再一次执行“sudo gitlab-ctl reconfigure”命令即可,此处只是对该错误作说明,并没有执行任何操作;
至此,整个安装已经正式完成了,但要正常使用GitLab服务我们还需要等待一点时间……如果此时你急于启用服务并使用浏览器连接至GitLab,你极可能得到一个“502”的错误提示页面[见下图];实际上,GitLab服务的启动较慢[包括任何有关的启动操作],具体可以在服务刚启动时使用“top”命令查看系统的资源使用的情况,刚启用服务时,你将看到一个或若干个GitLab服务的进程占用了大量的CPU资源[几乎100%][多为“bundle”进程],其正在部署一些不为博主所了解的操作,我们需要等待这个CPU资源的占用正常降下来后[CPU占用1%-20%],GitLab服务才能正式进入可使用状态[见下图][注:此等待过程五分钟内];
当GitLab服务的组件对CPU资源的占用正常后,GitLab服务才算是可以正常使用了;但还记得之前安装时遇到的“grafana”组的错误吗?此时,我们再执行一次“sudo gitlab-ctl reconfigure”命令,此时再执行本命令将不会收获到警告信息了[GitLab服务运行状态下],并且配置的过程非常快[1分钟内];当然,本处操作后,还需要使用“top”命令查看“bundle”命令进程CPU资源占用恢复至正常状态后,才能正常连接GitLab服务;
1 2 3 4 |
sudo gitlab-ctl reconfigure # 再次执行本命令; # 实际不重复执行本步骤服务也能正常使用[前提是你敢于无视前面所述说的警告]; # 如果再一次执行本命令,记得使用“top”命令查看GitLab服务已经在可使用状态[CPU资源占用情况]; |
终于,整个GitLab服务可以正常使用了,并且不存在警告信息了;GitLab服务的WEB服务运行在默认“80”端口,只需在浏览器上输入对应的IP地址即可访问GitLab服务。在本示例中,对应的IP地址为“192.168.100.252”。在浏览器首次访问GitLab页面时,GitLab将要求设定管理员“root”的密码[见下图],此时请自定义自己需要使用的密码,本示例使用密码为“12345678”。在密码设定完成后,在本示例下,即可通过用户名“root”及密码“12345678”,以管理员身份登录GitLab[见下图];
至此,整个GitLab服务已经搭建完成了,剩下的就使用Git连接至GitLab了;关于Git的使用部分,不在本文讨论范围内,也就不作细说了~
三、基本命令
博主之所以说这个是我搭建过最方便的开源项目,在此处,你可以看到原因了,GitLab甚至连开机启动功能也已经为使用者定义好了,使用者甚至不需要关心开机启动的事。并且,其开机启动服务是基于“Systemd”守护进程的,使用者可以非常方便的定义GitLab服务的启用、禁用、重启操作。在树莓派上,其默认的守护进程配置文件为“/usr/lib/systemd/system/gitlab-runsvdir.service”,以下为一些对GitLab服务的基本操作,仅供参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# ===============================服务控制=============================== sudo systemctl enable gitlab-runsvdir.service # 启用GitLab服务的开机启动功能; sudo systemctl disable gitlab-runsvdir.service # 禁用GitLab服务的开机启动功能; sudo gitlab-ctl service-list sudo gitlab-ctl status sudo systemctl status gitlab-runsvdir.service # 查询GitLab服务的状态信息[选用]; sudo gitlab-ctl stop sudo systemctl stop gitlab-runsvdir.service # 停止GitLab服务[选用]; sudo gitlab-ctl start sudo systemctl start gitlab-runsvdir.service # 启动GitLab服务[选用]; # 记得使用“top”命令查看GitLab服务是否已经在可使用状态[CPU资源占用情况]; sudo gitlab-ctl restart sudo systemctl restart gitlab-runsvdir.service # 重启GitLab服务[选用]; # 记得使用“top”命令查看GitLab服务是否已经在可使用状态[CPU资源占用情况]; sudo gitlab-ctl once # 如果GitLab服务已停止则启动服务,如果GitLab服务已启动则重启GitLab服务 # 记得使用“top”命令查看GitLab服务是否已经在可使用状态[CPU资源占用情况]; # ===============================日志查询=============================== # 关于GitLab的日志,默认保存在“/var/log/gitlab/”的目录下,该目录下保存 # 着对应组件的各种类型的日志;与查询具体组件的具体类型日志的写法,存在对 # 应的关系; sudo gitlab-ctl tail # 查看所有GitLab日志; sudo gitlab-ctl tail nginx # 查看某个组件的日志[nginx]; sudo gitlab-ctl tail nginx/gitlab_access.log # 查看某个组件的某个类型日志; # 此命令基本等同于“sudo tail /var/log/gitlab/nginx/gitlab_access.log”命令; # 区别为此命令能实时同步显示日志的信息; # ===============================配置控制=============================== sudo gitlab-ctl reconfigure # 重载/应用配置; sudo gitlab-ctl check-config # 检查配置并启动; sudo gitlab-ctl diff-config # 将用户配置与包可用配置进行比较; |
四、资源优化
GitLab服务在系统资源的占用上还是比较大的,在作为个人服务器使用或只是几个团员成员之间使用,实际上GitLab并不需要占用如此多的系统资源。下面为参考网上一些其它网页上,对GitLab的资源优化配置。
关于GitLab的配置文件,我们现在应该已经知道了其配置文件为“/etc/gitlab/gitlab.rb”,要想知道当前的GitLab服务应用了那些配置项,可使用以下命令:
1 |
sudo cat /etc/gitlab/gitlab.rb | tr -s '\n' | grep -v ^# |
现执行以下命令修改“/etc/gitlab/gitlab.rb”文件并进行修改:
1 |
sudo nano /etc/gitlab/gitlab.rb |
然后在文件内加入以下内容;注:因为本示例下“/etc/gitlab/gitlab.rb”只启用了“external_url 'http://192.168.100.252'”这一配置项,所以以下内容可以直接加入至配置文件内,如果你的GitLab服务并不是首次配置,请关于自身已启用的配置项,依据实际情况配置,以避免配置冲突;查询命令见之前述说;另外,若使用复制粘贴的方式复制配置至文件内,请务必手动替换掉配置项中的所有空格!!!在复制粘贴的方式下,配置项中的“空格”编码存在问题!!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
unicorn['worker_memory_limit_min'] = "256 * 1 << 20" unicorn['worker_memory_limit_max'] = "512 * 1 << 20" # “unicorn”的组件内存占用控制在“256MB-512MB”之间; unicorn['worker_processes'] = 2 # “unicorn”的工作进程控制在“2”之内; sidekiq['concurrency'] = 10 # “sidekiq”组件的并发连接控制在“10”以内; postgresql['shared_buffers'] = "256MB" # “postgresql”数据库缓存控制在“256MB”以内; postgresql['max_worker_processes'] = 8 # “postgresql”数据库的进程并发控制在“8”以内; |
在修改完成后,执行以下命令使配置生效;
1 2 3 4 5 6 7 |
sudo gitlab-ctl reconfigure # 应用新配置; # 记得使用“top”命令查看GitLab服务是否已经在可使用状态[CPU资源占用情况]; sudo systemctl restart gitlab-runsvdir.service # 重启GitLab服务; # 记得使用“top”命令查看GitLab服务是否已经在可使用状态[CPU资源占用情况]; |
五、服务端口
关于服务端口,我在网上看到太多具有误导性的配置教程,真的就是随便百度一下就有!对于修改服务端口,我们首先需要明白的是,我们是想通过修改服务端口实现一种什么样的效果!文章之前就已经提及,GitLab并不是一个单一的服务,而是一个系统,是由各种服务组合而成的,然后提供类拟GITHUB的服务,所以,实际上一个完整的GitLab服务占用着一系列的端口,这些端口应用于数据库、WEB服务器、代理等等……
对于服务端口的修改,一般有以下两种情况:
情况一:只是想自定义URL上的端口,即以“http://192.168.100.252:8088”此种方式访问GitLab服务;要实现以上效果,实际上非常简单,当然,我们首先要了解整个GitLab服务的基本构成,在整个GitLab服务的构成中,在接受外部访问连接的是NGINX组件,也就是说,实际上,所有的外部访问请求,首先到达的必定是NGINX组件,再由NGINX组件转发请求至真正的“GitLab服务器”[“unicorn”组件];在这样的情况下,我们想实现URL上端口号的自定义,显然我们唯一需要关心的是NGINX组件的端口定义,而关于其它组件使用什么端口号,这根本不需要关心[还是需要关心的,至少不要与其它组件所占用的端口冲突],因为,那是NGINX转发规则的事!在了解以上原理后,自定义访问URL上的端口,就非常简单了,操作如下:
修改NGINX组件的配置文件[“/var/opt/gitlab/nginx/conf/gitlab-http.conf”]:
1 |
sudo nano /var/opt/gitlab/nginx/conf/gitlab-http.conf |
找至以下原文内容
1 2 |
server { listen *:80; |
修改为想使用的端口,如“8088”;补充说明,不能使用了“8080”端口,因为“8080”端口已经被“unicorn”组件所占用;
1 2 |
server { listen *:8088; |
在修改完成后,保存设置,并执行以下命令重新启用NGINX组件;
1 2 |
sudo gitlab-ctl restart nginx # 重新启用NGINX组件; |
在重启NGINX组件成功后,你便可以以“http://192.168.100.252:8088”这种URL的方式从外部访问整个GitLab服务了;
情况二:另一种有端口修改需求的情况是,服务器上已启用的端口与GitLab服务默认所需要使用的端口产生冲突;比如说,原服务器上已经有服务在使用“8080”端口了,而GitLab服务的“unicorn”组件默认也是使用“8080”端口,于是,此时在此台服务器上安装GitLab服务,就会产生端口冲突的问题,要保证GitLab服务能正常运行,就必定需要进行端口修改;这种情况的端口修改,显然就复杂多了,因为,这是基于GitLab整个系统的定义;在这种情况下,就需要修改“/etc/gitlab/gitlab.rb”这份文件,然后运行“gitlab-ctl reconfigure”命令应用配置;关于这一情况,本文就说个原理并至此,不再作深入说明了。
六、结
原本博主认为写这篇博文并不会太花时间,原因是首先搭建时实在太顺手了,全程无障碍!!而原本也只是想写个安装的过程,可后来却加入了一些警告的解决与配置经验,结果,这篇博文的写作时间远超预想了……经验嘛,都写在上面了~END~
树莓派上搭建GitLab教程:等您坐沙发呢!