树莓派从零开始搭建Gitlab服务器

提示:本文面向新手,可以放心阅读。


前言

如今树莓派价格居高不下,软路由流行是一个原因。更多是物联网,人工智能,物联网进入了各位技术爱好者的视野。从51单片机,Arduino,NodeMCU,再到树莓派,英伟达JETSON,阿里云IoT HaaS EDU等等。
本篇方向就不在IoT,AI,大数据方向展开,在树莓派搭建代码服务器GitLab-CE,实现居家的低功耗代码私服。


提示:以下操作均基于树莓派4B,系统基于官网的arm64位镜像:2022-01-28-raspios-bullseye-arm64-lite,其他版本的请自行类比型号和系统版本

一、安装树莓派系统

安装系统是基操,通过阅读本文,希望可以避免遇到奇怪的问题。

1. 下载64位系统

到官网的系统下载页,找到下方的“Raspberry Pi OS (64-bit)”,在右侧下载需要的系统版本,这里推荐Raspberry Pi OS Lite
下载说明

2. 下载烧录工具烧录系统

树莓派官方网站有提供烧录工具,这里推荐使用balenaEtcher,软件简介易用,属于新手福音。可以到官网下载免安装的版本直接运行。

开始烧录

  1. 将插有tf卡的读卡器插到电脑上的USB口
  2. 双击运行balenaEtcher
  3. 选择下载好的固件2022-01-28-raspios-bullseye-arm64-lite.zip
  4. 开始烧录

步骤通常是校验文件完整性,烧录,验证完整性,完成。这个过程的快慢取决于以下几个方面:

  • 电脑USB口速度,usb3.0及以上更佳
  • 读卡器USB口速度,支持USB3.0及以上更佳
  • TF卡速度,u3及以上更佳,有条件直接买v30或v60或v90,会有惊喜
  • 硬盘读写速度,以及当前系统的IO占用情况

以上都是说给新手听的,老手请无视。

无屏访问树莓派SSH

刚装完系统,有时我们没有合适的视频线,又或者microHDMI转HDMI线缆恰巧不在身边,访问系统有困难,如需实现在不插屏幕和键盘的情况下访问树莓派SSH终端,通常可以这样操作:

  • 在烧录完成后,拔出读卡器重新插入电脑,让电脑可以识别出boot设备。
  • 在根目录下创建文本文档,命名为ssh,注意不需要后缀名
  • 在根目录下创建文本文档wpa_supplicant.conf,按以下内容进行编辑并保存
  • 断电重启树莓派,稍等片刻在路由器中查看联网的树莓派设备
    以下是wpa_supplicant.conf配置文件的内容,用来自动连接无线网络,如果插上了有线网络,可忽略这步。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
 
network={
	ssid="无线信号名称,2.4G或5G均可"
	psk="无线连接的密码"
	key_mgmt=WPA-PSK
}

在路由器中找到raspberrypi的主机名(如果没有多个树莓派接入),通过ip地址,使用ssh客户端工具进行连接即可。

ssh pi@ip地址
#默认密码:raspberry

二、Docker环境的安装和镜像拉取

1.一键安装docker

建议使用root账户完成docker的安装:

sudo -i
# 输入树莓派密码,默认raspberry
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 静静等待安装完成,完成后如果想让pi用户也可以执行docker命令,可以继续执行
usermod -aG docker pi

2.拉取镜像

面向新手向,就不要自己编译镜像了,直接使用大神的公共镜像就行:

docker pull yrzr/gitlab-ce-arm64v8:latest

该镜像大小超过了1Gb,确保本地网络环境可以访问https://hub.docker.com/,网速越快越好。
拉取完成后,可以通过docker images查看镜像是否成功下载下来了

pi@raspberrypi:~ $ docker images
REPOSITORY               TAG       IMAGE ID       CREATED      SIZE
yrzr/gitlab-ce-arm64v8   latest    c935bfe114bf   5 days ago   2.41GB

三、配置并启动gitlab-ce

本文的主机名默认是git.cha1024.com,各位可以通过自己的实际情况进行配置主机名和域名。

1.创建宿主机目录

mkdir -p /opt/data/gitlab-ce/conf
mkdir -p /opt/data/gitlab-ce/logs
mkdir -p /opt/data/gitlab-ce/data

2.配置端口

由于树莓派启动了sshd服务,未配置的情况下,默认会占用22端口,为了gitlab访问地址的美观性,我们可以修改sshd的端口。

sudo vim /etc/ssh/sshd_config
# 找到#Port 22,另起一行,添加内容 
Port 2222
# 这样会将原来的22端口替换成2222端口,具体用什么端口合适,各位自行选择
# 按下ESC,直接输入:wq 进行保存操作即可
# 重启sshd服务
systemctl restart sshd
exit

这样配置之后,后续连接ssh终端务必使用新配置的端口。

3.启动容器

docker run \
  --detach \
  --name gitlab-ce \
  --restart always \
  --privileged \
  --memory 4096M \
  --publish 22:22 \
  --publish 80:80 \
  --publish 443:443 \
  --hostname git.cha1024.com \
  --volume /opt/data/gitlab-ce/conf:/etc/gitlab:z \
  --volume /opt/data/gitlab-ce/logs:/var/log/gitlab:z \
  --volume /opt/data/gitlab-ce/data:/var/opt/gitlab:z \
  yrzr/gitlab-ce-arm64v8:latest

以上配置映射了3个地址:

  • /etc/gitlab : 配置文件目录,主要配置文件 gitlab.rb 保存在此
  • /var/opt/gitlab :运行和数据保存目录
  • /var/log/gitlab : 日志目录

执行完毕后,可以使用docker ps查看运行的容器。
提示:由于树莓派的性能比常规服务器性能较弱,启动过程约耗时3分钟左右才能完成 ,需耐心等待

pi@raspberrypi:~ $ docker ps
CONTAINER ID   IMAGE                           COMMAND             CREATED       STATUS                       PORTS                                                                                                         NAMES
5b3698dff9d7   yrzr/gitlab-ce-arm64v8:latest   "/assets/wrapper"   4 mins ago   Up About an min (healthy)   0.0.0.0:22->22/tcp, :::22->22/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   gitlab-ce

当看到类似上文的提示时,Gitlab服务已经启动完成。
可以打开浏览器访问:http://你的ip地址/,如果正常打开表示启动完成,如报错502,表示服务正在启动中,请稍后再试。

3.使用SSL证书,实现https访问

这个部分属于锦上添花的操作,对于一般的gitlab使用来说,上文就足够。

a.申请免费的ssl证书

自签名证书此处不展开,只说免费申请证书。
Let’s Encrypt
Let’s Encrypt的证书有效期90天,当然我不确定你在树莓派上能否使用这个gitlab达到90天,如果可以那就继续往下看。
你需要有一台有外网ip的服务器,如果已经有了,恭喜你可以白嫖。如果没有,可以按量付费创建一台云主机,预装lnmp环境有Let’s Encrypt插件的更好,如果没有可以安装宝塔,或者oneinstack等环境,均带有Let’s Encrypt插件,自行生成即可。生成后,创建网站,并使用Let’s Encrypt生成证书,证书包含一个pem和key文件。
DigiCert 免费版 SSL
DigiCert 免费版 SSL与很多云服务厂商有合作,例如阿里云。在阿里云后台,1个账号可以免费申请20个免费证书,每个证书有效期1年。操作比较人性化,当申请完成后,在列表右侧点击“下载”,选择nginx版本的证书即可。
这样你会得到1个压缩包,里面通常有2个文件,后缀分别是pem和key。

b.配置gitlab

可以在映射出来的conf文件夹中,找到gitlab.rb文件进行编辑。也可以进入容器,在容器中直接编辑gitlab.rb。
需要注意的是,启动过程中,我们publish了80和443端口,后文会基于这个配置进行说明。
打开gitlab.rb文件,找到以下配置处,解开配置修改,或另起一行进行配置。

external_url 'https://git.cha1024.com'
nginx['ssl_certificate'] = "/etc/ssl/git.cha1024.com.pem"
nginx['ssl_certificate_key'] = "/etc/ssl/git.cha1024.com.key"
nginx['redirect_http_to_https'] = true

以上配置gitlab.rb文件中的external_url为https地址,而且必需使用https,否则不会生效!同时还需要配置证书和https跳转才能完整体验SSL
配置完毕后,为了使配置生效,需要执行命令

docker exec -it [容器id或容器名] gitlab-ctl reconfigure

如果进入了容器内部,只需在内部执行gitlab-ctl reconfigure即可。
至此,配置ssl已经完成。基于本例的配置,在浏览器中访问 https://git.cha1024.com 即可访问,效果如下
访问效果


总结

基于以上配置gitlab并运行,待机资源消耗cpu平均不超过5%,内存消耗3.55G。不建议4G及以下的树莓派做这个尝试。
如果有任何疑问,欢迎留言与我交流。


版权声明:本文为cpfwmsx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。