在 Ubuntu 上自建 GitLab 服务器并结合 SakuraFrp 进行内网穿透,主要分为两大步:先在本地搭建并配置好 GitLab,再通过 SakuraFrp 将服务暴露到公网。下面是一个清晰、可操作的流程,包含了两种协议(HTTP 和 SSH)的穿透配置,这样你在公网上既能通过浏览器访问,也能顺利拉取代码。
🏗️ 第一步:在 Ubuntu 上搭建 GitLab 服务器
这里我们使用官方推荐的 Omnibus 包安装方式,对 Ubuntu 系统最友好 。
-
安装基础依赖
打开终端,先更新软件包列表,并安装必要的工具。
bashsudo apt update sudo apt install -y curl openssh-server ca-certificates tzdata perl小提示:如果在安装过程中提示配置
postfix(邮件服务),选择 "Internet Site" 并使用你服务器的系统域名即可 。 -
添加 GitLab 官方仓库
运行以下脚本,它会自动帮你把 GitLab 的安装源添加到系统中。
bashcurl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash -
安装 GitLab 社区版
接下来就可以正式安装了。这一步需要一点时间,请耐心等待。
bashsudo apt install gitlab-ce -
获取初始密码
安装完成后,管理员账户
root的初始密码会被保存在一个临时文件里,我们需要先把它找出来。这个文件会在 24 小时后自动删除,所以最好现在就记下来 。bashsudo cat /etc/gitlab/initial_root_password你会看到类似这样的输出,
Password后面那一串就是初始密码。bash# WARNING: This value is valid only in the following conditions # 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time) # 2. Password hasn't been changed manually, either via UI or via command line. # # If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password. Password: YOUR_INITIAL_ROOT_PASSWORD # NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours. -
配置并启动 GitLab
这是最关键的一步,我们需要修改配置文件,告诉 GitLab 使用什么地址对外提供服务。这个地址将是你最终通过浏览器访问 GitLab 的地址。
bashsudo vim /etc/gitlab/gitlab.rb找到
# external_url 'GENERATED_EXTERNAL_URL'这一行,修改为你 Ubuntu 服务器的局域网 IP 地址 和你想使用的端口(例如8080)。如果只写 IP 不写端口,默认是80端口。bashruby external_url 'http://127.0.0.1:23333'特别提醒: 这个
external_url是 GitLab 内部用来生成项目链接的地址。因为我们后面会用 SakuraFrp 做穿透,公网访问的地址会是另一个,所以这里先填写内网地址和端口,确保内网能正常访问即可 。保存文件后,运行以下命令使配置生效并启动所有组件。这个过程也需要几分钟。
bashsudo gitlab-ctl reconfigure -
内网验证
在你 Ubuntu 本机或同局域网的电脑浏览器里,输入你刚才设置的地址(如
http://127.0.0.1:23333),应该能看见 GitLab 的登录页面。使用用户名root和刚才获取的初始密码登录,然后系统会要求你立即修改密码。
🚇 第二步:安装与配置 SakuraFrp 内网穿透
SakuraFrp 的使用逻辑和教程中常见的 cpolar 类似 ,主要是通过创建隧道将内网端口映射到公网。
-
注册并获取访问密钥
首先,去 SakuraFrp 官网 (https://www.natfrp.com/) 注册一个账号。登录后,在用户中心找到你的访问密钥,这个密钥是用于将你的 Ubuntu 服务器连接到 SakuraFrp 网络的凭证。
-
在 Ubuntu 上安装 SakuraFrp 客户端
回到 Ubuntu 终端,执行官网提供的一键安装脚本。具体命令可以在 SakuraFrp 官网的"下载"页面找到,通常如下:
bashcurl -o frpc_linux_amd64.tar.gz https://nya.globalslb.net/natfrp/client/版本号/frpc_linux_amd64.tar.gz # 请去官网复制最新链接 tar -zxvf frpc_linux_amd64.tar.gz # 重命名并赋予执行权限 mv frpc_linux_amd64 frpc chmod +x frpc更详细和最新的安装方式,请务必参考 SakuraFrp 官方文档。
-
创建两条隧道
在 SakuraFrp 官网的控制台里,点击"隧道列表" -> "创建隧道"。为了既能用浏览器访问,又能用 Git 命令行拉取代码,我们需要创建两条隧道。
-
HTTP 隧道(用于 Web 访问)
配置项 值 说明 隧道名称 GitLab-Web 任意易记的名字 隧道类型 HTTP 用于网页访问 本地IP 127.0.0.1指向本机 本地端口 8080必须和你 GitLab 配置的 external_url端口一致绑定域名 选择一个可用的二级域名 SakuraFrp 会提供,如 your-name.natfrp.cloud -
TCP 隧道(用于 SSH 协议拉取代码)
配置项 值 说明 隧道名称 GitLab-SSH 任意易记的名字 隧道类型 TCP 用于 SSH 连接 本地IP 127.0.0.1指向本机 本地端口 22SSH 服务的默认端口 远程端口 随机或指定 由 SakuraFrp 分配的一个公网端口,记下它
-
-
在 Ubuntu 上启动隧道
回到 Ubuntu 终端,使用你的访问密钥 和刚才创建的隧道ID来启动客户端。你可以把两个隧道 ID 写在一起,同时启动。
bash
# 格式: ./frpc -f 秘钥 ./frpc -f 秘钥如果看到
[I] [proxy_manager] [以上隧道都启动成功]的提示,就说明连接成功了。
🧪 第三步:公网访问与代码拉取测试
现在,你的 GitLab 已经成功暴露在公网上了。
-
浏览器访问
打开浏览器,访问你在 HTTP 隧道中配置的域名(如
http://your-name.natfrp.cloud)。你应该能看到熟悉的 GitLab 登录界面。使用你的root账号和新密码登录,功能一切正常。 -
配置 SSH 密钥(推荐)
使用 SSH 协议拉取代码可以免去每次输入密码的麻烦,也更加安全 。
-
在你的本地电脑上(不是服务器),打开 Git Bash 或终端,生成 SSH 密钥(如果还没有的话):
bashssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 邮箱换成你的一路回车即可。
-
查看并复制公钥:
bashcat ~/.ssh/id_rsa.pub -
登录你的 GitLab 网页(通过公网域名),点击右上角头像 -> Preferences -> SSH Keys,将复制的内容粘贴到 "Key" 框中,并给个标题(如 "My Work Laptop"),点击 "Add key" 保存。
-
-
拉取代码测试
-
用http拉取(最常用)
bash
GIT_SSL_NO_VERIFY=true git clone https://frp地址:端口/fd4873/win10_menghuanxiyou.git
-
在 GitLab 上随便找一个项目,点击蓝色的 "Clone" 按钮,你会看到两个地址。我们主要关注 SSH 的那个。
-
默认显示的 SSH 地址 可能是:
git@192.168.1.100:root/my-project.git。这个地址在公网上是无法使用的! -
我们需要把它改成 SakuraFrp 提供的 SSH 隧道地址。格式为:
ssh://git@<你的TCP隧道域名或IP>:<远程端口>/<项目路径>.git。 -
例如,你的 TCP 隧道分配的地址是
xx.natfrp.com:12345,项目路径是root/my-project.git,那么最终的克隆命令就是:bash
git clone ssh://git@xx.natfrp.com:12345/root/my-project.git如果你已经配置好了 SSH 公钥,代码就会被顺利拉取下来,无需密码。
-
💡 重要提醒
-
配置文件是关键 :GitLab 的
external_url主要影响其内部生成的项目链接。我们通过 SakuraFrp 访问时,用的是不同的域名和端口,所以克隆代码时必须手动修改地址为隧道提供的地址。 -
端口开放 :确保 Ubuntu 的防火墙(如
ufw)没有阻挡 GitLab 使用的8080和22端口。如果之前开启过ufw,可以使用sudo ufw allow 8080和sudo ufw allow 22来放行 。