树莓派搭建 GitLab
不记得是什么时候,在树莓派上搭建了供个人使用的 Git 仓库,不是 GitLab 或者是其他 Git 管理平台,就是最原生的 Git 服务,也不觉得有什么奇怪,就这样使用了很久 :)
八天国庆假期,少了往年游玩的激情,也没有其他什么事情,整日宅在自己的小窝里躲避风和雨,省得过于清闲而又浮想翩翩,于是乎想利用树莓派搭建 GIT 管理平台;当下最为流行开源平台为 GitLab 吧,日常工作中几乎每天与其打交道(无外乎最多的就是 pull、push 吧,偶尔配置一二,算不上熟络)。
首先让我们先了解安装 GitLab 的需求
操作系统
- GitLab 是专为 Unix 操作系统开发的。 GitLab 不可 运行在 Windows 操作系统上,而且近期也没有考虑支持 Windows。可以在 Linux 虚拟机上或者 Docker 上来安装 GitLab。
CPU
- 1 核心 CPU 最多支持100个用户,所有的 Workers 和后台任务都在同一个核心工作这将导致 GitLab 服务响应会有点缓慢。
- 2核心 支持500用户,这也是 官方推荐 的最低标准。
…
Memory
- 1GB 物理内存 + 3GB 交换分区 是最低的要求,但我们 强烈反对 使用这样的配置。 查看下面 Unicorn Workers 章节获取更多建议。
- 2GB 物理内存 + 2GB 交换分区 支持100用户,但服务响应会很慢。
- 4GB 物理内存 支持100用户,也是 官方推荐 的配置。
…
再来了解 树莓派 配置
系统
- 基于 Debian Stretch 的 Raspbian
CPU
- 四核 1.2GHz 64位 ARM Cortex-A53 CPU
Memory
- 1GB RAM
Other
- BCM43438 无线局域网和蓝牙低功耗(BLE)
GitLab 安装
嗯,是的,官方推荐的最低配置是 CPU 2核,4G 物理内存,能正常访问 GitLab 而不会太缓慢,这点很重要,在调试过程中也被这个坑了良久;而能运行 GitLab 最低配置是 CPU 1核,内存 1G + 3GB 交换分区 (比 1G 还小的内存估计也不好找了吧),嗯,是的,是能运行,在不考虑性能的前提下,而且也很是考验使用者的耐心,堪比 2G 时代的速度,不多说了,忍,自行体会吧!
了解了软硬件的需求,接下来按照 官方文档 进行安装 GitLab ,这一步应该没什么问题,要选择对应的系统版本,我的硬件是树莓派,选择的 raspberry-pi-2 版本,安装到最后应该会看到打印的 GitLab 官方 Logo ,此时说明已经安装完成。
如果在安装中下载过慢,可以直接使用迅雷加速下载对应的版本 GitLab 安装文件,然后上传到系统中安装路径中进行安装,如 Debian 文件路径
/var/cache/apt/archives/partial。
GitLab 配置
接下来就对 GitLab 进行必要的配置,访问地址、存储地址等,打开 GitLab 配置文件【官方配置文档】
sudo nano /etc/gitlab/gitlab.rb
1、配置 GitLab 域名,启用 HTTPS 时,防火墙必须打开端口 443 以允许入站 HTTPS 流量,可以使用 防火墙配置工具 进行管理。
external_url 'https://192.168.2.222' # 我配置的是 HTTPS 请求,此处换成你对应的域名或 IP 地址
2、将 HTTP 重定向到 HTTPS, 默认情况下,当您以 https 开头指定一个 external_url 时,Nginx 将不再侦听端口 80 上未加密的 HTTP 流量。如果要将所有 HTTP 流量重定向到 HTTPS,您可以使用该 redirect_http_to_https 设置。
nginx['enable'] = true # 开启代理
nginx['redirect_http_to_https'] = true # 开启将 HTTP 重定向到 HTTPS
nginx['redirect_http_to_https_port'] = 80 # 将 HTTP 80 端口重定向到 HTTPS
3、更改 SSL 证书位置,首先你需要有证书,如你是域名或者是公网 IP,很多网友推荐免费的 Let’s Encrypt,不过有效期为90天,过期后需要再次申请,也提供了在线 免费获取HTTPS证书,如果对于生成私钥不熟悉,可以在线生成私钥;由于我是局域网 IP 不能申请免费证书,就使用自签的证书,然后将自签的证书手动安装到电脑根证书中,当然 Chrome 并不承认自签证书有效,而此时 IE 是承认自签证书是有效的。
nginx['ssl_certificate'] = "/etc/gitlab/ssl/192.168.2.222.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/192.168.2.222.key"
4、GitLab 电子邮件服务器 SMTP 配置,我使用的 QQ 个人邮箱,首先要开启邮件 POP3/SMTP 服务或者是 IMAP/SMTP 服务,并获取 授权码。
gitlab_rails['smtp_enable'] = true # 开启 smtp
gitlab_rails['smtp_address'] = "smtp.qq.com" # smtp 服务器地址
gitlab_rails['smtp_port'] = 465 # smtp 服务器端口
gitlab_rails['smtp_user_name'] = "demo@qq.com" # 邮箱地址
gitlab_rails['smtp_password'] = "授权码" # 申请的授权码
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true # 启用 tls
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = "demo@qq.com" # 发送人地址
gitlab_rails['gitlab_email_display_name'] = "demo-GitLab" # 邮件发送人
gitlab_rails['gitlab_email_reply_to'] = "demo@qq.com" # 回复邮件地址
gitlab_rails['gitlab_email_subject_suffix'] = "demo" # 邮件主题后缀,没有发现在哪里呈现
- 测试 SMTP 配置,可以验证 GitLab 使用 Rails 控制台正确发送电子邮件的能力。在 GitLab 服务器上,执行
sudo gitlab-ctl reconfigure重新生成配置,再执行gitlab-rails console进入控制台。然后,可以在控制台提示符下输入以下命令,使 GitLab 发送测试电子邮件Notify.test_email('demo.test@qq.com', 'Message Subject', 'Message Body').deliver_now。
5、可选项,配置非默认目录来存储 Git 数据
默认的文件路径为:/var/opt/gitlab/git-data/repositories
|
|
6、可选项,如果需要调整Unicorn超时或工作人员数量
unicorn['worker_processes'] = 2 # 最低要求 worker_processes 为2,以便网页编辑器正常工作
unicorn['worker_timeout'] = 80 # 超时 80s,即使这样,还是时常 502,知道有多慢了吧
目前为止所有前期工作已准备完毕,可以愉快的访问了 GtiLab 了 ^_^
提示:操作 Git 代码库,可以直接使用 GitLab 提供的 SSH
git@192.168.2.222:rpi/raspberry.git和 HTTPShttps://192.168.2.222/rpi/raspberry.git。
另一种,直接访问 Git 服务,此方式支持外网直接访问,但需要对路由器做端口转发配置,非默认端口访问方式ssh://git@公网IP:22200/home/git/code/repositories/rpi/raspberry.git
维护命令
- 修改任何配置文件后都要输入如下命令使配置生效(或者是修复权限设置):
sudo gitlab-ctl reconfigure - 页面缓存清除:
sudo gitlab-rake cache:clear RAILS_ENV=production - GtiLab 各组件启动:
sudo gitlab-ctl start - GtiLab 各组件停止:
sudo gitlab-ctl stop - GtiLab 各组件重启:
sudo gitlab-ctl restart - 禁用 GtiLab 开机自启动:
sudo systemctl disable gitlab-runsvdir - 启用 GtiLab 开机自启动:
sudo systemctl enable gitlab-runsvdir - 查看 GtiLab 运行状态:
sudo gitlab-ctl status
遇到的问题
1、Unicorn 默认端口为 8080,若有端口冲突,调整 Unicorn 端口。
unicorn['listen'] = '127.0.0.1'
unicorn['port'] = 8082
gitlab_workhorse['auth_backend'] = "http://localhost:8082" # 这里是否需要调整,有些不太确定了
2、502网关错误,这个问题排查了良久,后来发现内存不足,导致 GitLab 相关组件启动缓慢,或者启动后树莓派出现假死状态。

症状:访问 GitLab 未等待就直接返回 502,或者请求处理等待无响应,同时对树莓派发出的指令也无响应,树莓派处于假死状态,只好断电重启,就这样弄了 n 次。
解决方案:对于个体用户来说,GitLab 显得有些臃肿,同时硬件也是硬伤,只能软件上来解决,在文章上半部分有提到 GitLab 对硬件最低要求是 1GB 物理内存 + 3GB 交换分区,查看树莓派的当前的交换分区只有 100M 完全不满足最低要求,然后就创建 4G 的交换分区,嗯,真的好了,GitLab 可以正常访问,并且树莓派也再未出现假死状态。
创建交换分区
用dd命令创建一个 4G 的文件,它将在 /var/swapfile 路径创建一个名为 swapfile 、大小为 4G 的分区文件,该分区文件拥有1024000个扇区(block),每个扇区大小为 4K 。
sudo dd if=/dev/zero of=/var/swapfile bs=4k count=1000k将新创建的文件创建为 Linux Swap 交换区文件:
sudo mkswap /var/swapfile把新建的交换区加入的交换内存:
sudo swapon /var/swapfile确认交换分区是否挂载成功:
sudo swapon -s# 查看交换分区free -h# 当前内存使用情况如果需要每次启动时激活当前交换分区,编辑
sudo nano /etc/fstab,添加一行命令:/var/swapfile swap swap defaults 0 0
SWAP 分区即虚拟内存,它可以突破物理内存的限制,增加运行内存,也就是我们平时所说的 RAM,Swappiness 是一个 Linux 内核参数, 它控制了换出运行时内存的相对权重,默认值是60,可以的取值范围是0-100,建议修改10(不过,没有感觉到有什么不同)
查看你的系统里面的 swappiness:
sudo cat /proc/sys/vm/swappiness# 不出意外的话,你应该看到是 60修改 swappiness 值为 10:
sudo sysctl vm.swappiness=10即时生效:
sudo sysctl -p重启保留当前配置,编辑配置文件
sudo nano /etc/sysctl.conf添加一行命令:vm.swappiness=30
最后,重启树莓派查看配置是否正常:
sudo restart
居然感冒了,上次应该是去年的时候吧,嗯,天气冷了,注意保暖 ^_^