ECWU Homepage

To Dark Mode
Featured Images
Photo by Pankaj Patel on Unsplash

自建 GitLab 踩坑实录

Zhenghao Wu

Status: Finished Confidence: likely Importance: 8

Post Details

This post is part 4 of 4 in the Website Note series.

Goto: First Post | Prev: Cleaning Up Git Repo For My Blog

Table of Contents

之前自建了一个 Git 服务来托管自己的非公开代码。考虑要轻量,所以选择了 Gitea 并通过 Docker + Nginx 的方式进行部署。

前段时间腾讯云免费提供了轻量服务器配置升级的活动,配置提升到了 4 核心 + 4G 内存。机器性能是一个过剩的状态,为了充分利用,所以我考虑将服务从 Gitea 换到 GitLab。这里把我的部署过程进行记录。

Gitea 也提供了不错的体验,如果只需要一个轻量的 Git 服务,可以尝试。

“巨无霸” GitLab

单从 Docker 库的大小来看,Gitea 1.16.6镜像大小为 102.05MB。而 GitLab 14.10.0-ce.0镜像大小有 1.02GB。这十倍的差异直接体现在了 GitLab 庞大的功能。就像自建的 GitLab 首页的描述:

A complete DevOps platform

GitLab is a single application for the entire software development lifecycle. From project planning and source code management to CI/CD, monitoring, and security.

安装好的 GitLab 就是一个完整的 DevOps(开发+运维)平台,包括了项目管理、源代码管理、持续构建和集成、监控和安全的功能。更具体的体现是,GitLab 除了支持其网站运行的服务,还集成了用于数据上报和监控的工具(Exporter + Prometheus + Grafana)。

GitLab 庞大的系统也注定了需要比较多的资源,特别是内存:要求至少 2 核 4G 内存,而 Gitea 只需要 2 核 1G 内存。GitLab 和 Gitea 官方都提供了横向对比,可以进一步了解。

安装方法

GitLab 的官方文档属于很详细的类型,官方给出的安装方法有六七种,其中比较典型的是:

我的服务器使用了宝塔面板,在内带的软件市场有 GitLab 的安装选择,本质上和官方的软件包安装一致。之前也尝试过使用 Docker 进行部署,但是 Nginx 的反向代理没成功,最后放弃了 Docker 的方案。

如果使用官方的软件包,只需要在安装指南选择对应的的系统版本,会有很详细的逐步指南。以 CentOS 7为例,步骤为:

  1. 启用 OpenSSH,防火墙添加 HTTP 和 HTTPS 服务
  2. 安装 Postfix 用来发送邮件
  3. 添加 GitLab 的软件包源
  4. 配置环境变量来定义访问用的 URL
  5. 等待安装完成
  6. 安装完成后,获取自动生成的 root 用户密码,登录

进一步配置

这部分是这篇文章的重点内容,我在配置自己的 GitLab 时,重复安装了很多次,主要是无法通过自定义域名(不带端口号)访问域名。解决后复盘时会发现,一方面是自己比较心急,没有认真读文档;另外是网络上许多教程没有写的很清楚。

使用自定义域名访问(配置文件部分)

GitLab 的软件包中集成了 Nginx,安装后就可以通过 IP + 端口号的方式访问搭建好的 GitLab 实例(在云服务器上还有配置防火墙允许相应的端口)。但在自己试错的过程中,我尝试了:改配置中的URL、使用 Docker 安装再用 Docker 外的 Nginx 做反向代理,都没有成功。

最后使用的方案是关闭 GitLab 自带的 Nginx,然后利用宝塔的 Nginx 来处理请求。

  1. 第一步是将 GitLab 的 Nginx 关闭:
# from
nginx['enable'] = true
# to
nginx['enable'] = false
  1. 设置 Nginx 用户
# www is the user.
web_server['external_users'] = ['www']

如果不知道 Nginx 的用户,可以查看 Nginx 的配置文件 nginx.conf,用户会直接写在第一行(user www www; 则用户为 www)。如果不知道 nginx 配置文件的位置,可以用运行 nginx -t 查看。

  1. 修改 external_url 到你的个人域名
external_url 'http://git.yourdomain.com'
# type `https` if you want https SSL.
external_url 'https://git.yourdomain.com'

需要注意,如果要使用 https,url 中需要将 http 改为 https。

到这,你已经修改了 GitLab 的配置文件,运行 gitlab-ctl reconfigure 应用配置。

使用自定义域名访问(Nginx 配置部分)

官方其实已经提供了 Nginx Vhost 的配置文件,你只需要稍微的修改,就可以运用在自己的服务器上(有两个版本,根据是否启用 SSL 进行选择)。

我在配置时,为了能和宝塔的面板联动,所以进行了如下的修改。

  1. 前提:在宝塔中创建好网站,解析已经配置

  2. 在创建好的站点,进行配置:在配置文件选项卡,先粘贴覆盖官方提供的配置文件(以 SSL 版本为例)

  3. 修改 server_name

在 38 行和 49 行的位置,将原配置中的 YOUR_SERVER_FQDN 换成你的域名,不需要带 http 或 https

  1. 配置 SSL
  ssl_certificate        /www/server/panel/vhost/cert/git.yourdomain.com/fullchain.pem;
  ssl_certificate_key    /www/server/panel/vhost/cert/git.yourdomain.com/privkey.pem;
  1. 修改 log 的位置

在配置文件的 41-42 行、90-91 行,定义了日志的输出位置,根据自己的情况进行修改。

  access_log  /www/wwwlogs/git.yourdomain.com.log;
  error_log   /www/wwwlogs/git.yourdomain.com.error.log;

至此,使用自定义域名访问自建 GitLab 的配置已经完成,你应该应该可以通过域名访问自建的 GitLab 实例。

配置 Runner

虽然前面提到 GitLab 是完整的 DevOps 平台,但是要支持 CI/CD 等功能还需要进一步的配置。为了支持自动构建仓库,我尝试配置了一个 GitLab Runner。使用 Docker 进行安装和注册。官方对于 Docker 安装 Runner 已经给出了详细的教程(安装/注册)。

注册完就可以在管理后台的 Runner Tab 看到自建的 Runner 了。但是会发现项目还是无法使用 Runner 进行构建。排查后发现,虽然 Runner 是 Shared 的,但是还是只允许指定的项目,所以你需要在 Runner 的 Restrict projects for this runner 配置中,指定需要 CI 的项目。(这并不是一个治本的解决方案,需要待我继续熟悉下 GitLab)。


这就是目前我自建 GitLab 的情况,目前的使用已经达到我比较满意的状态。未来也会尝试配置配置其他功能。个人对于服务器运维方面开始小白,欢迎大家留言交流。

Article Card

For "自建 GitLab 踩坑实录"

Author Zhenghao Wu
Publish & Update Date 2022-05-06 - 2022-05-06
Tags git self-host gitlab nginx gitlab-ce baota cloud
Extra Materials

Related Posts