前言
在日益重视代码安全与开发自主权的今天,构建私有化代码仓库已成为众多企业和开发团队的必然选择。GitLab 作为业界领先的开源自托管平台,不仅提供了媲美 GitHub/Gitee 的代码管理体验,更能让您将核心代码资产完全掌控在自己的服务器环境中,杜绝第三方平台的潜在风险。
然而,私有部署通常意味着访问局限在内网。本教程将彻底解决这一痛点!我们将手把手指导您在 CentOS 7 服务器上部署 GitLab CE 私有仓库,并借助 cpolar内网穿透技术
,安全、稳定地实现公网访问。无论您的团队分布在全球何处,都能像使用公有云服务一样便捷地协作开发,同时享受私有化部署带来的安全与可控优势。
通过本教程,您将获得:
- ✅ 完全自主的代码仓库:在自有服务器搭建 GitLab CE,掌握代码数据主权
- 🌐 无缝的公网访问能力:利用 cpolar 穿透内网限制,无需复杂路由器配置
- 🔒 安全的远程访问方案:避免代码暴露在公有云平台,降低泄露风险
- 🛠️ 企业级开发体验:享受 GitLab 强大的项目管理功能
让我们开始构建您专属的、可全球访问的私有代码托管平台!
1 为什么选择自建 GitLab?
1.1 GitLab
GitLab是一个基于Web的开源代码托管平台,它提供了代码托管、项目管理、持续集成和持续部署等功能。GitLab采用了Git作为版本控制系统,并提供了易于使用的界面和丰富的功能。
GitLab与市场上的Gitee和GitHub相比具有以下优点:
- 开源自托管:GitLab是开源软件,你可以选择将其部署在自己的服务器上,完全掌握代码托管的控制权,不受第三方平台的限制。而Gitee和GitHub则是商业化的托管服务。
- 完整的CI/CD支持:GitLab内置了持续集成和持续部署功能,使团队能够自动构建、测试和交付软件。这有助于提高团队的开发效率和软件质量。
- 全面的项目管理功能:除了代码仓库管理外,GitLab还提供了项目计划、问题跟踪、文档管理和协作功能,帮助团队更好地组织和管理项目。
- 丰富的社区支持:GitLab拥有庞大的全球开发者社区,你可以从社区中获取开源项目、解决问题以及分享经验。同时,GitLab社区版也有许多活跃的贡献者为其不断增加新功能和修复bug。
1.2 Gitee
Gitee是中国的一家Git代码托管平台,与GitHub类似。它提供了类似于GitHub的代码托管和项目管理功能,但更关注中国开发者的需求。Gitee在国内有较好的网络连接速度,支持中文界面和中文文档,因此在中国用户中比较流行。
1.3 GitHub
GitHub是全球最大的代码托管平台,也是一个开发者社交网络。它具有极高的知名度和广泛的开发者社区,涵盖了各种技术领域。GitHub提供了卓越的协作和分享功能,使得开发者能够轻松地与全球的开发者共同合作。它也提供了很多与第三方服务集成的功能,例如代码审查工具、持续集成服务等。
总之,GitLab、Gitee和GitHub都是优秀的代码托管平台,适用于不同的需求和场景。选择哪个平台取决于你的团队规模、项目需求和个人偏好。
2 GitLab安装(CE 13.9.6)
2.1 添加GitLab软件仓库
#从GitLab官方网站获取与添加仓库脚本的URL
#sudo bash 以管理员权限运行脚本,将GitLab软件仓库添加到系统中。
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
curl命令执行完成后,会在/etc/yum.repos.d
目录下生成 gitlab_gitlab-ce.repo
文件。
2.2 安装GitLab
虚拟机IP查看可以使用ifconfig
命令
# 使用管理员权限执行以下命令
# 设置 GitLab 的外部访问地址为 http://<您的虚拟机IP>:8888
# 并通过 yum 安装 GitLab 社区版 13.9.6,自动确认所有提示
#如:sudo EXTERNAL_URL="http://192.168.184.133:8888" yum install -y gitlab-ce-13.9.6
sudo EXTERNAL_URL="http://<您的虚拟机IP>:8888" yum install -y gitlab-ce-13.9.6
安装成功提示如下图:
2.3 配置GitLab
打开 GitLab 的主配置文件 gitlab.rb
,准备修改默认的访问端口。
为什么要改:GitLab 默认使用 HTTP 80
和 unicorn 8080
,如果端口冲突或你想用其他端口(比如要做端口映射或配合内网穿透工具如 cpolar),就要改成自定义的端口,比如 8888、8887。
sudo vim /etc/gitlab/gitlab.rb
打开后,在external_url 'http://<您设置的IP地址>:8888'
下面添加:
nginx['listen_port'] = 8888
unicorn['port'] = 8887
nginx['listen_port'] = 8888
:指定 GitLab 使用内置 nginx 服务监听 8888 端口(即网页访问用这个端口)unicorn['port'] = 8887
:指定 GitLab 的应用服务器(unicorn)使用 8887 端口
接下来需要给防火墙开放端口,刷新配置:
#防火墙开放端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=8887/tcp --permanent
#刷新配置
firewall-cmd --reload
刷新GitLab以应用新的配置:
sudo gitlab-ctl reconfigure
2.4 启动及访问GitLab
sudo gitlab-ctl start #启动
sudo gitlab-ctl restart #重启
sudo gitlab-ctl stop #停止
sudo gitlab-ctl status #状态
启动图示如下:
访问前面设置的 http://192.168.184.133:8888
,出现如下图即成功:
如上为设置密码页面,设置好密码后会跳转如下登录界面:
管理员登录使用:
#用户名
root
#密码
您设置的密码
登录成功即可进入主页面:
3 GitLab创建项目
前后端皆可此方法,这里以前端举例
3.1 项目创建
选择新项目(new project),然后选择创建空项目(create blank project)
点击进入项目信息页面,填写项目信息:
点击创建项目后,项目即可创建成功!随即会跳转到创建好的项目页面:
3.2 下拉代码
使用前需有git
环境,git下载官网:https://git-scm.com/
复制项目的地址:
http://192.168.184.133:8888/root/myvue3demo.git
安装好git后,在任意文件夹位置鼠标右键
可以看到open Git Bash here
选择,点击进入:
进入git bash终端后,输入如下命令下拉代码:
git clone http://192.168.184.133:8888/root/myvue3demo.git
可能会出现需要输入密码的情况,输入gitlab的用户名root和您设置的gitlab密码即可
3.3 上传代码
为了方便快捷,我这边使用cursor
AI编辑器,生成了一个简单的Vue3项目演示站:
项目会放在结尾开源,供大家免费下载代码,进行测试~
生成的页面展示如下:
现在,目录列表里面就有项目文件啦:
接下来,继续在当前位置鼠标右键
打开git bash
,执行如下命令:
#添加暂存区
git add .
#提交本地git仓库 加内容
git commit -m "内容"
#推送到远程
git push
这样,代码就成功推送成功了,服务器刷新也可以看到,代码已经成功上传到gitlab仓库啦!
4 使用 cpolar 实现公网访问
4.1 安装 cpolar
4.1.1 什么是cpolar?
- cpolar 是一款内网穿透工具,可以将你在局域网内运行的服务(如本地 Web 服务器、SSH、远程桌面等)通过一条安全加密的中间隧道映射至公网,让外部设备无需配置路由器即可访问。
- 广泛支持 Windows、macOS、Linux、树莓派、群晖 NAS 等平台,并提供一键安装脚本方便部署。
4.1.2 安装cpolar
首先,我们需要先安装curl:
sudo yum install curl
接下来下载cpolar,一条命令完成安装
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
测试cpolar
版本以确保安装
cploar version
4.2 配置cpolar系统服务
向系统添加及启动cpolar服务
#添加cpolar服务
sudo systemctl enable cpolar
#启动cpolar服务
sudo systemctl start cpolar
查看服务状态
sudo systemctl status cpolar
4.3 注册及登录cpolar web ui管理界面
4.3.1 注册cpolar
官网链接:https://www.cpolar.com/
访问cpolar
官网,点击免费注册
按钮,进行账号注册
注册页面:
4.3.2 放行9200端口(web ui端口)
在访问web页面前,需要先检查系统防火墙是否放行9200端口,避免访问不了
systemctl status firewalld
有两种方式可以实现访问,一种是放行该端口,另一种是直接关闭防火墙(不建议)
#放行 9200 端口
#--zone=public:使用默认区域(通常是 public)
#--add-port=9200/tcp:添加 TCP 协议的 9200 端口
#--permanent:永久生效(不加此参数则是临时规则,重启失效)
firewall-cmd --zone=public --add-port=9200/tcp --permanent
#重载防火墙配置(及刷新配置使其生效)
firewall-cmd --reload
验证端口是否已放行
firewall-cmd --zone=public --query-port=9200/tcp
输出内容为yes则成功放行
4.3.3 访问cpolar web ui管理界面
在访问之前,不确定ip地址可以通过ifconfig
命令查看服务器ip
ifconfig
确定好ip地址后,在浏览器中访问:
http://<此处应为您的IP>:9200 #如:http://192.168.184.133:9200
将前面步骤注册好的cpolar账号登录即可进入后台页面
登录成功同时,服务器也会后台无感自动配置token,无需手动配置token
配置文件位置:/usr/local/etc/cpolar/cpolar.yml
cat /usr/local/etc/cpolar/cpolar.yml
4.4 配置gitlab隧道及访问测试
4.4.1 配置 HTTP 隧道绑定到 8888 端口
点击左侧菜单栏的隧道管理
,展开进入隧道列表
页面,页面下默认会有 2 个隧道:
- ssh隧道,指向22端口,tcp协议
- website隧道,指向8080端口,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)
接着点击创建隧道
菜单,进入到创建页面,如下图配置:
创建完成后,点击左侧菜单的状态
菜单,接着点击在线隧道列表
菜单按钮,可以看到有2个gitlab的隧道,一个为http协议,另一个为https协议
注意:每个用户创建的隧道显示的公网地址都不一样!
4.4.2 访问公网地址验证 GitLab 是否可访问
在浏览器中访问创建gitlab隧道生成的公网地址(http和https皆可)
这里以https为例:
登录gitlab账号,成功进入gitlab首页!
4.5 设置固定二级子域名(Pro用户)
4.5.1 保留二级子域名
使用cpolar
为其配置二级子域名
,该域名为固定格式域名,不会随机变化,方便后续远程访问gitlab
仓库。
进入官网的预留页面:https://dashboard.cpolar.com/reserved
列表中显示了一条已保留的二级子域名记录:
- 地区:显示为
China Top
。 - 二级域名:显示为
gitlab01
。
注:二级域名是唯一的,每个账号都不相同,请以自己设置的二级域名保留的为主
4.5.2 修改gitlab隧道为子域名方式
进入侧边菜单栏的隧道管理
下的隧道列表
,可以看到前面配置名为gitlab-8888
的隧道
点击编辑
按钮进入编辑页面,修改域名类型为二级子域名
,然后填写前面配置好的子域名,点击更新按钮:
4.5.3 访问子域名测试
来到状态
菜单下的在线隧道列表
可以看到隧道名称为gitlab-8888
的公网地址已经变更为二级子域名+固定域名主体及后缀
的形式了:
这里以https协议做访问测试:
访问成功!
5 修改 clone 地址为公网地址
部署完成后,即使你已经使用 cpolar 成功穿透并访问 GitLab 页面,GitLab 显示的项目克隆地址仍可能是内网地址(如 192.168.x.x
),如下图所示:
这会导致使用 git clone
时默认用的是内网地址,外网机器无法访问。为了解决这个问题,我们需要修改 GitLab 的配置,使其显示为公网地址。
5.1 修改GitLab 配置文件
编辑gitlab的配置文件:
sudo vim /etc/gitlab/gitlab.rb
找到如图这行:
external_url 'http://192.168.184.133:8888'
将其修改为你的 Cpolar 分配的公网地址(注意不要加端口号):
#注意,请使用http的域名
external_url 'http://gitlab01.cpolar.top'
保存退出后,然后重新加载gitlab配置:
sudo gitlab-ctl reconfigure
5.2 访问测试
访问gitlab穿透的项目地址:
https://gitlab01.cpolar.top/root/myvue3demo
可以看到,clone的地址已经正确的从内网地址
变更为cpolar穿透的二级域名
地址了!
5.3 下拉代码测试
复制clone地址:
http://gitlab01.cpolar.top/root/myvue3demo.git
在本地资源管理器中任意文件夹位置,单机鼠标右键
,选择Open Git Bash here
,点击进入打开shell窗口,输入如下命令:
#项目地址替换为您项目的地址链接
git clone http://gitlab01.cpolar.top/root/myvue3demo.git
输入用户信息确认后,可以发现成功下拉代码
5.4 上传代码测试
这边使用AI软件cursor
进行了简单的开源文件修改,进行上传代码测试,如图:
控制台已经提示上传成功,可以看到如下提示:
To http://gitlab01.cpolar.top/root/myvue3demo.git
打开gitlab仓库查看,是否有最新提交:
可以发现,修改的开源文件提交上传上来了!
6 常见问题排查
6.1 修改 GitLab 的外部访问地址为公网域名
在大纲为5小节的修改 clone 地址为公网地址
时,如果设置外部地址使用的https协议地址,会出现如下问题:
letsencrypt_certificate[...] had an error: RuntimeError: [...] Validation failed, unable to request certificate
这是因为 GitLab 在执行 reconfigure
时尝试向 Let’s Encrypt 自动申请 HTTPS 证书失败,由于你的公网地址是 cpolar 动态分配的临时域名(或没有正确配置 DNS),导致验证失败。
而 Cpolar 的地址(如 *.cpolar.top
):
- 本质上是 临时公网穿透地址
- 没有公网 DNS 可验证所有权
- 也无法配合 Let’s Encrypt 做 HTTP-01 验证
所以只适合用作 HTTP 明文访问,而不是自动走 HTTPS。
不要用 https:// 开头的 external_url
,改为http协议的链接填入即可,然后再执行sudo gitlab-ctl reconfigure
进行配置更新!
7 总结
本教程完整演示了在 CentOS 7 服务器上搭建私有 GitLab 仓库并通过 cpolar 内网穿透实现公网访问的全过程。
主要实现步骤包括:
– GitLab CE 13.9.6 的安装与端口配置
– cpolar 内网穿透工具的部署与服务配置
– HTTP 隧道创建与公网地址生成
– 固定二级子域名设置(Pro 用户)
– GitLab 外部地址修改与 clone 地址公网化
– 远程访问与代码推拉测试验证
这套解决方案既保障了代码资产的安全性和自主控制权,又提供了便捷的远程协作环境,适用于企业内部开发、个人项目管理以及团队协作等多种场景。
8 项目源码
本教程使用的 Vue3 演示项目已开源,基于 Vue 3.x + Vite 构建,展示了 cpolar 内网穿透工具的介绍页面。
开源地址:https://github.com/TanChengBin/myvue3demo
如果本项目对您有帮助,欢迎给个 ⭐ Star 支持一下!
以上就是如何在 CentOS 7 服务器上搭建私有 GitLab 仓库,并使用 cpolar 内网穿透工具实现公网访问完整教程。cpolar 作为专业的内网穿透工具,为您的私有服务提供了稳定、安全的公网访问方案。感谢您的观看,有任何问题欢迎留言交流。更多内网穿透解决方案,请访问:cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站