> 技术文档 > 如何在本地环境中搭建 GitLab 服务器

如何在本地环境中搭建 GitLab 服务器


引言

本文详细描述了如何在本地环境中搭建 GitLab 服务器。GitLab 是一个开源的 Git 仓库管理平台,类似于 GitHub,但可以自托管。我们将使用 Ubuntu Linux 系统(推荐 22.04 LTS)作为示例,通过官方 Omnibus 包进行安装。这种方式简单高效,适合个人或小型团队使用。

注意:本教程假设你有基本的 Linux 命令知识。如果你使用其他系统(如 Windows),建议使用虚拟机(如 VirtualBox)安装 Ubuntu。整个过程大约需要 1-2 小时,视网络和硬件而定。安装后,GitLab 会占用一定资源(至少 4GB RAM)。

系统要求

  • 操作系统:Ubuntu 20.04 或更高版本(其他 Linux 发行版也可,但需调整命令)。
  • 硬件:至少 4GB RAM、2 核 CPU、20GB 可用磁盘空间(推荐 8GB RAM 以获得更好性能)。
  • 网络:静态 IP 地址(可选,但推荐用于生产环境);端口 80/443(HTTP/HTTPS)、22(SSH)需开放。
  • 软件:已安装 curl、openssh-server、ca-certificates、postfix(邮件服务,用于通知)。

如果你的机器不符合要求,GitLab 可能运行缓慢或崩溃。

系统架构概述

以下是 GitLab 的基本架构图:

#mermaid-svg-d7Uyei1HgnArSXXf {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-d7Uyei1HgnArSXXf .error-icon{fill:#552222;}#mermaid-svg-d7Uyei1HgnArSXXf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-d7Uyei1HgnArSXXf .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-d7Uyei1HgnArSXXf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-d7Uyei1HgnArSXXf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-d7Uyei1HgnArSXXf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-d7Uyei1HgnArSXXf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-d7Uyei1HgnArSXXf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-d7Uyei1HgnArSXXf .marker.cross{stroke:#333333;}#mermaid-svg-d7Uyei1HgnArSXXf svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-d7Uyei1HgnArSXXf .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-d7Uyei1HgnArSXXf .cluster-label text{fill:#333;}#mermaid-svg-d7Uyei1HgnArSXXf .cluster-label span{color:#333;}#mermaid-svg-d7Uyei1HgnArSXXf .label text,#mermaid-svg-d7Uyei1HgnArSXXf span{fill:#333;color:#333;}#mermaid-svg-d7Uyei1HgnArSXXf .node rect,#mermaid-svg-d7Uyei1HgnArSXXf .node circle,#mermaid-svg-d7Uyei1HgnArSXXf .node ellipse,#mermaid-svg-d7Uyei1HgnArSXXf .node polygon,#mermaid-svg-d7Uyei1HgnArSXXf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-d7Uyei1HgnArSXXf .node .label{text-align:center;}#mermaid-svg-d7Uyei1HgnArSXXf .node.clickable{cursor:pointer;}#mermaid-svg-d7Uyei1HgnArSXXf .arrowheadPath{fill:#333333;}#mermaid-svg-d7Uyei1HgnArSXXf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-d7Uyei1HgnArSXXf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-d7Uyei1HgnArSXXf .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-d7Uyei1HgnArSXXf .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-d7Uyei1HgnArSXXf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-d7Uyei1HgnArSXXf .cluster text{fill:#333;}#mermaid-svg-d7Uyei1HgnArSXXf .cluster span{color:#333;}#mermaid-svg-d7Uyei1HgnArSXXf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-d7Uyei1HgnArSXXf :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}GitLab ComponentsHTTP/HTTPS/SSHPostgreSQL 数据库Redis 缓存Git 存储Sidekiq 后台任务Unicorn/Puma Web 服务器用户浏览器/客户端GitLab 服务器

这个图展示了 GitLab 的核心组件:Web 服务器处理请求,数据库存储数据,Redis 处理缓存等。

安装步骤

我们分步进行安装。以下流程图概述整个过程:

#mermaid-svg-7YGJPgyKujOmm4xr {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7YGJPgyKujOmm4xr .error-icon{fill:#552222;}#mermaid-svg-7YGJPgyKujOmm4xr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7YGJPgyKujOmm4xr .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-7YGJPgyKujOmm4xr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7YGJPgyKujOmm4xr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7YGJPgyKujOmm4xr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7YGJPgyKujOmm4xr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7YGJPgyKujOmm4xr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7YGJPgyKujOmm4xr .marker.cross{stroke:#333333;}#mermaid-svg-7YGJPgyKujOmm4xr svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7YGJPgyKujOmm4xr .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7YGJPgyKujOmm4xr .cluster-label text{fill:#333;}#mermaid-svg-7YGJPgyKujOmm4xr .cluster-label span{color:#333;}#mermaid-svg-7YGJPgyKujOmm4xr .label text,#mermaid-svg-7YGJPgyKujOmm4xr span{fill:#333;color:#333;}#mermaid-svg-7YGJPgyKujOmm4xr .node rect,#mermaid-svg-7YGJPgyKujOmm4xr .node circle,#mermaid-svg-7YGJPgyKujOmm4xr .node ellipse,#mermaid-svg-7YGJPgyKujOmm4xr .node polygon,#mermaid-svg-7YGJPgyKujOmm4xr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7YGJPgyKujOmm4xr .node .label{text-align:center;}#mermaid-svg-7YGJPgyKujOmm4xr .node.clickable{cursor:pointer;}#mermaid-svg-7YGJPgyKujOmm4xr .arrowheadPath{fill:#333333;}#mermaid-svg-7YGJPgyKujOmm4xr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7YGJPgyKujOmm4xr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7YGJPgyKujOmm4xr .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-7YGJPgyKujOmm4xr .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-7YGJPgyKujOmm4xr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7YGJPgyKujOmm4xr .cluster text{fill:#333;}#mermaid-svg-7YGJPgyKujOmm4xr .cluster span{color:#333;}#mermaid-svg-7YGJPgyKujOmm4xr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7YGJPgyKujOmm4xr :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}准备系统安装依赖添加 GitLab 仓库安装 GitLab 包配置和启动访问 Web 界面初始设置测试和优化

步骤 1: 更新系统和安装依赖

首先,确保系统是最新的,并安装所需包。

  1. 打开终端,运行:

    sudo apt updatesudo apt upgrade -y
  2. 安装依赖:

    sudo apt install -y curl openssh-server ca-certificates tzdata perl
  3. 安装 Postfix(邮件服务,选择 “Internet Site” 并输入域名):

    sudo apt install -y postfix

如果出现提示,按照屏幕指示配置。

步骤 2: 添加 GitLab 仓库

GitLab 提供官方脚本添加仓库。

运行:

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

这个脚本会添加 GitLab 的 APT 仓库源。

步骤 3: 安装 GitLab 包

安装 GitLab EE(企业版,免费使用社区功能)。

sudo EXTERNAL_URL=\"http://your-ip-address\" apt install gitlab-ee
  • your-ip-address 替换为你的机器 IP(用 ip addr show 查看)或域名。
  • 如果想用 HTTPS,稍后配置。

安装过程会下载并设置所有组件(如数据库、Redis)。

安装流程简化图:

#mermaid-svg-PFvsjx01LGmfPmmO {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PFvsjx01LGmfPmmO .error-icon{fill:#552222;}#mermaid-svg-PFvsjx01LGmfPmmO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PFvsjx01LGmfPmmO .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-PFvsjx01LGmfPmmO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PFvsjx01LGmfPmmO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PFvsjx01LGmfPmmO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PFvsjx01LGmfPmmO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PFvsjx01LGmfPmmO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PFvsjx01LGmfPmmO .marker.cross{stroke:#333333;}#mermaid-svg-PFvsjx01LGmfPmmO svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PFvsjx01LGmfPmmO .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-PFvsjx01LGmfPmmO text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-PFvsjx01LGmfPmmO .actor-line{stroke:grey;}#mermaid-svg-PFvsjx01LGmfPmmO .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-PFvsjx01LGmfPmmO .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-PFvsjx01LGmfPmmO #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-PFvsjx01LGmfPmmO .sequenceNumber{fill:white;}#mermaid-svg-PFvsjx01LGmfPmmO #sequencenumber{fill:#333;}#mermaid-svg-PFvsjx01LGmfPmmO #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-PFvsjx01LGmfPmmO .messageText{fill:#333;stroke:#333;}#mermaid-svg-PFvsjx01LGmfPmmO .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-PFvsjx01LGmfPmmO .labelText,#mermaid-svg-PFvsjx01LGmfPmmO .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-PFvsjx01LGmfPmmO .loopText,#mermaid-svg-PFvsjx01LGmfPmmO .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-PFvsjx01LGmfPmmO .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-PFvsjx01LGmfPmmO .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-PFvsjx01LGmfPmmO .noteText,#mermaid-svg-PFvsjx01LGmfPmmO .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-PFvsjx01LGmfPmmO .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-PFvsjx01LGmfPmmO .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-PFvsjx01LGmfPmmO .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-PFvsjx01LGmfPmmO .actorPopupMenu{position:absolute;}#mermaid-svg-PFvsjx01LGmfPmmO .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-PFvsjx01LGmfPmmO .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-PFvsjx01LGmfPmmO .actor-man circle,#mermaid-svg-PFvsjx01LGmfPmmO line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-PFvsjx01LGmfPmmO :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}UserServer运行安装命令下载包配置数据库/Redis启动服务安装完成UserServer

步骤 4: 配置 GitLab

安装后,GitLab 会自动配置,但你需要调整一些设置。

  1. 编辑配置文件:

    sudo nano /etc/gitlab/gitlab.rb
  2. 关键配置(示例):

    • 设置外部 URL:external_url \'http://your-ip-address\'
    • 如果有域名:external_url \'http://gitlab.example.com\'
    • 启用 HTTPS(需 SSL 证书):添加 letsencrypt[\'enable\'] = true(自动获取 Let’s Encrypt 证书)。
    • SMTP 设置(邮件):配置 gitlab_rails[\'smtp_enable\'] = true 等参数。
  3. 应用配置:

    sudo gitlab-ctl reconfigure

这个命令会重启服务并应用更改。可能需要几分钟。

步骤 5: 访问 Web 界面

  1. 在浏览器中访问 http://your-ip-address(或配置的 URL)。
  2. 首次访问,会提示设置 root 用户密码。输入一个强密码并记住。

登录后,你会看到 GitLab 仪表板。

步骤 6: 初始设置和测试

  1. 创建项目:点击 “New project”,选择空白仓库。

  2. 添加 SSH 密钥(可选,但推荐):

    • 生成密钥:ssh-keygen
    • 复制公钥:cat ~/.ssh/id_rsa.pub
    • 在 GitLab > 用户设置 > SSH Keys 添加。
  3. 克隆测试

    git clone git@your-ip-address:root/test-project.git
  4. 用户管理:作为 root,创建新用户(用户 > 新用户)。

配置流程图:

#mermaid-svg-R5gwmicePJ2YVpYj {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-R5gwmicePJ2YVpYj .error-icon{fill:#552222;}#mermaid-svg-R5gwmicePJ2YVpYj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-R5gwmicePJ2YVpYj .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-R5gwmicePJ2YVpYj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-R5gwmicePJ2YVpYj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-R5gwmicePJ2YVpYj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-R5gwmicePJ2YVpYj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-R5gwmicePJ2YVpYj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-R5gwmicePJ2YVpYj .marker.cross{stroke:#333333;}#mermaid-svg-R5gwmicePJ2YVpYj svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-R5gwmicePJ2YVpYj .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-R5gwmicePJ2YVpYj .cluster-label text{fill:#333;}#mermaid-svg-R5gwmicePJ2YVpYj .cluster-label span{color:#333;}#mermaid-svg-R5gwmicePJ2YVpYj .label text,#mermaid-svg-R5gwmicePJ2YVpYj span{fill:#333;color:#333;}#mermaid-svg-R5gwmicePJ2YVpYj .node rect,#mermaid-svg-R5gwmicePJ2YVpYj .node circle,#mermaid-svg-R5gwmicePJ2YVpYj .node ellipse,#mermaid-svg-R5gwmicePJ2YVpYj .node polygon,#mermaid-svg-R5gwmicePJ2YVpYj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-R5gwmicePJ2YVpYj .node .label{text-align:center;}#mermaid-svg-R5gwmicePJ2YVpYj .node.clickable{cursor:pointer;}#mermaid-svg-R5gwmicePJ2YVpYj .arrowheadPath{fill:#333333;}#mermaid-svg-R5gwmicePJ2YVpYj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-R5gwmicePJ2YVpYj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-R5gwmicePJ2YVpYj .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-R5gwmicePJ2YVpYj .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-R5gwmicePJ2YVpYj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-R5gwmicePJ2YVpYj .cluster text{fill:#333;}#mermaid-svg-R5gwmicePJ2YVpYj .cluster span{color:#333;}#mermaid-svg-R5gwmicePJ2YVpYj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-R5gwmicePJ2YVpYj :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}编辑 gitlab.rb设置 external_url配置 SMTP/HTTPS运行 reconfigure重启服务测试访问

安全和优化

  • 防火墙:启用 UFW 并允许端口:
    sudo ufw allow OpenSSHsudo ufw allow httpsudo ufw allow httpssudo ufw enable
  • 备份:定期运行 sudo gitlab-rake gitlab:backup:create
  • 性能优化:如果 RAM 不足,编辑 gitlab.rb 调整 Unicorn 工作者数量。
  • 更新:运行 sudo apt update && sudo apt upgrade gitlab-ee

常见问题和故障排除

  • 安装失败:检查网络,确保没有代理问题。重试脚本。
  • 端口占用:用 sudo netstat -tuln 检查 80/443 端口。
  • 邮件不发送:验证 SMTP 设置,测试 sudo gitlab-rails console 中发送邮件。
  • 内存不足:监控 sudo gitlab-ctl tail 日志,增加 swap 或升级硬件。
  • 重置 root 密码sudo gitlab-rake \"gitlab:password:reset[root]\"
  • 日志:查看 sudo gitlab-ctl tail/var/log/gitlab

如果遇到错误,参考官方文档或 Stack Overflow。

结语

恭喜!你现在有了一个本地 GitLab 服务器!它可以用于代码协作、CI/CD 等。记得定期维护和备份。对于生产环境,考虑 Docker 安装或云托管(如 GitLab.com)。

如果需要高级功能,如 CI/CD runners,参考官方指南。