搭建家庭私人 GitLab 服务器

大概今年(2022)一月中旬的时候入手了一个 R86S 的小主机。因为错过了众筹的车,所以是直接下的单。最后入手了 16G 的黑色千兆版本。不上万兆一个原因是家里没有这个需求,还有一个就是万兆版的没有 NVME 硬盘位,这一点对我还是刚需。最后用了差不多一周的时间,终于在年前,这个心心念的小主机到手了。

有关这个小主机我就不多做介绍了,今天主要是介绍一下我怎么用它在我的家庭环境搭建一个私人的 GitLab。这篇文章从我为什么要搭建家庭私人 GitLab 以及如何搭建。都会都做一个比较详细的介绍。

初衷

家里是有一个 J4125 的软路由,去年很早就买了。一直在我家作为主路由负责拨号和科学上网的功能,用的 OpenWrt 也是我自己配置和 GitHub Action 编译的,也满足了我家的基本需求。而且也因为是物理机直装,再加上害怕 J4125 玩起来怕性能不够,再影响了正常的网络。所以也就不想再折腾他了,就让他安安心心做我家的路由器就好了。

但与此同时呢,作为一个爱折腾的程序员,身边的很多不管是硬件还是软件的小玩意儿都是有特别的需求的。

就比如去年(2021)年买的一个 STACK OVERFLOW THE KEY MACROPAD 键盘,配上从淘宝买的键帽,因为使用 QMK 的键盘方案,所以可以定制固件。现在已经成为了我的专用密码输入器。但是问题来了,因为我现在还尝试看他还有没别的好玩的东西,所以我需要对这个键盘固件的代码不断进行修改、编译、刷入,然后再尝试修改、编译、刷入。这样的操作重复起来会让人很繁琐,但是因为固件中存在一些敏感代码(比如我的各种密码)所以不方便托管到 GitHub。所以之前我就在想要是能有一个私人的 Git 多好。除了代码的托管,如果还可以加入 CI/CD 这种持续集成的能力,就可以解放很多无谓的重复的劳动。而能同时满足这个需求的让我想到的第一个解决方案就是 GitLab 了。

除了上面说的那个键盘固件,还有比如说我的 Rime(鼠须管)的配置文件,因为词库中有很多的自定义词,以及还有人名通讯地址之类的敏感词,所以也是不方便把这个配置直接托管在 GitHub 上的。

还有现在看到的这个博客,用 Hexo 生成的 GitHub Pages 静态页面,博客本身的代码我不想放到 GitHub 上,所以这时候的我也需要一个私人的 GitLab。除了能实现代码的托管,还能顺便利用 GitLab CI 实现一键发布,每次只要提交了代码,稍等片刻 GitHub Pages 就自动部署好了。

开始

上面说了那么多。现在有了 R86S 这样一个性能跟得上的小主机,在东西到货的第二天,就开始了他的折腾之路。

安装硬件

因为这个 R86S 只带了一个电源,内置的一个 EMMC 容量只有 128G 且性能堪忧。所以第一步是安装一个自己的 NVME 固态。记得之前有一块买多了的吃灰三星 980 Pro 500G,都没有开封。之前还差点给挂到海鲜市场出掉,现在终于派上用场了。
安装好硬盘然后找一个网线,连接好路由器的 LAN 口和 R86S 的随便一个网口。连接好键盘鼠标,就可以插上电源自动上电开机了。

安装系统

既然是是要做小型服务器,哪有用桌面操作系统的。所以这里就选择了 Ubuntu Server 20.04.3 LTS。下载完镜像后,写入到 U盘。然后就可以通过 U盘 启动就可以进安装环节了。
安装系统有几个点需要注意一下

  1. 分配 IP 地址的方式

    在进行网络配置的时候,既可以通过 DHCP 动态分配 IP,也可以手动指定。如果是 DHCP 分配,则后续需要到路由器中绑定一下 Mac 地址和 IP,毕竟我们在内网访问也是需要有一个内网的固定 IP。通过手动指定 IP 地址,要注意不要和现有分配的的地址冲突。手动指定 IP 就不需要后续到路由器绑定 Mac 地址和 IP 了。

  2. 选择安装硬盘

    因为主板上带一个 EMMC,所以在选择硬盘的时候记得选自己安装的 NVME SSD 上,而且调整根目录大小调整为剩余 SSD 所由空间。否则根目录默认只划分了 100G,后面进入系统后还需要手动扩容。

  3. 安装后修改网络配置

    安装完系统后重新启动有可能会出现日志 A start job is running for wait for network to be configured. 导致需要很长时间才能进入系统。这时候需要等进到系统后修改网络配置文件

    /etc/netplan/00-installer-config.yaml(文件名 00-installer-config.yaml 不固定,但是文件名类似的一个 yaml 文件)

    在每一个设备下面添加 optional: true

    最后的配置应该类似

    network:
    ethernets:
    enp1s0:
    dhcp4: true
    optional: true
    enp2s0:
    dhcp4: true
    optional: true
    enp3s0:
    dhcp4: true
    optional: true
    version: 2

    然后应用更改

    netplan apply

创建 GitLab 备份位置

上面说到了,这个 R86S 自带一个 128G的 EMMC 存储,虽然性能比较差,但是东西不能浪费了。所以这里我拿来作为一个独立的 GitLab 数据备份存储,即使是主硬盘挂了,还有一份独立的备份存在,而且短时间内 128G 还是够用的。

创建新的硬盘分区

sudo cfdisk /dev/mmcblk0        # mmcblk0 是 EMMC 设备
sudo mkfs.ext4 /dev/mmcblk0 # 格式化为 ext4

挂载到 /mmc

sudo vim /etc/fstab
# 添加一行
/dev/mmcblk0 /mmc ext4 defaults 0 0

安装 GitLab

安装依赖

sudo apt install -y curl openssh-server ca-certificates tzdata perl

添加 GitLab 源

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

安装 GitLab

sudo apt install gitlab-ce

获取 root 用户密码

cat /etc/gitlab/initial_root_password

注意,这个文件后面会被自动删除。因此请及时保管好该密码或者及时进行修改。

配置 GitLab

如果上面几步都比较顺利,不出意外,现在应该已经在这个系统中安装好了 GitLab。接下来先进行一些简要地配置。

GitLab 的配置文件是 /etc/gitlab/gitlab.rb

我家 OpenWrt 主路由在 DHCP 中设置的 本地服务器本地域名 分别为 /home/home,同时我也希望能通过域名访问这个 GitLab 服务器。所以我还添加了一条 自定义挟持域名,其中域名为 git,IP 地址为 R86S 分配的固定IP(比如我家的是 192.168.50.50)。这样我就可以通过域名 http://git.home 来访问这个 GitLab 服务器了。

根据以上前提,这里需要修改的几个地方

external_url 'http://git.home'
gitlab_rails['gitlab_ssh_host'] = 'git.home'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['backup_path'] = '/mmc'

backup_path 即为 EMMC 设备的挂载点

修改完 gitlab.rb 后需要重新配置 GitLab 才能生效

sudo gitlab-ctl reconfigure

稍等片刻,在浏览器中打开 http://git.home 就可以看到搭建好的 GitLab 了。