如何在本地环境中搭建 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: 更新系统和安装依赖
首先,确保系统是最新的,并安装所需包。
-
打开终端,运行:
sudo apt updatesudo apt upgrade -y
-
安装依赖:
sudo apt install -y curl openssh-server ca-certificates tzdata perl
-
安装 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 会自动配置,但你需要调整一些设置。
-
编辑配置文件:
sudo nano /etc/gitlab/gitlab.rb
-
关键配置(示例):
- 设置外部 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
等参数。
- 设置外部 URL:
-
应用配置:
sudo gitlab-ctl reconfigure
这个命令会重启服务并应用更改。可能需要几分钟。
步骤 5: 访问 Web 界面
- 在浏览器中访问
http://your-ip-address
(或配置的 URL)。 - 首次访问,会提示设置 root 用户密码。输入一个强密码并记住。
登录后,你会看到 GitLab 仪表板。
步骤 6: 初始设置和测试
-
创建项目:点击 “New project”,选择空白仓库。
-
添加 SSH 密钥(可选,但推荐):
- 生成密钥:
ssh-keygen
- 复制公钥:
cat ~/.ssh/id_rsa.pub
- 在 GitLab > 用户设置 > SSH Keys 添加。
- 生成密钥:
-
克隆测试:
git clone git@your-ip-address:root/test-project.git
-
用户管理:作为 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,参考官方指南。