Ubunt20.04搭建GitLab服务器,并借助cpolar实现公网访问

1.安装依赖
bash 复制代码
sudo apt update
sudo apt install curl openssh-server ca-certificates postfix

上述几个包的作用如下:

  • curl:命令行工具,用于发送 HTTP 请求。

  • openssh-server:提供远程 SSH 登录服务端功能。

  • ca-certificates:存储受信任的根证书列表。

  • postfix:轻量级邮件服务器,用于发送系统邮件。

安装后会出现如下界面:

这个界面是在安装postfix(邮件服务器)时,系统弹出的配置界面,要求选择一种邮件系统类型。每个选项代表一种不同的邮件发送/接收方式,下面是每个选项的简单解释:

  • No configuration:不更改当前配置,适合已配置好或暂不使用邮件功能。

  • Internet Site:服务器直接通过 SMTP 收发邮件,需公网和域名支持。

  • Internet with smarthost:接收本地或外部邮件,发送通过外部邮件中继(如 Gmail)。

  • Satellite system:所有邮件统一转发到指定服务器发送,本机不接收邮件。

  • Local only:邮件仅限本机用户间收发,适用于系统日志和任务通知。

我们的目的是搭建GitLab服务器,选择Internet site即可。ok确定之后可以设置服务器的名字,输入自己想要的名字即可。

2.安装GitLab

执行命令:

bash 复制代码
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

该命令会静默下载 GitLab 官方提供的安装脚本,并执行脚本为系统添加 GitLab 社区版的 APT 安装源并导入公钥。然后去GitLab 官方(https://packages.gitlab.com/gitlab/gitlab-ce)找到最新版本的gitlab-ce安装包,我这里使用的是ubuntu 20.04,所以对应的是ubuntu/focal(focal是ubuntu 20.04的别名),使用的是x86的主机,所示对应的包是gitlab-ce_17.11.5-ce.0_amd64.deb。复制右下角的wget命令在ubuntu终端下载安装包。

我的安装命令为:

bash 复制代码
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/focal/gitlab-ce_17.11.5-ce.0_amd64.deb/download.deb

再用以下命令解压:

bash 复制代码
sudo dpkg -i gitlab-ce_17.11.5-ce.0_amd64.deb

解压过程有点耗时,解压成功后界面如下:

3.配置ip和端口号

使用ifconfig命令查看本机的ip地址:

我这里是192.168.160.130,运行sudo vim /etc/gitlab/gitlab.rb来修改GitLab的ip和端口号,ip地址就是本机地址,端口号可以使用一个合适的空闲端口号,可以使用以下命令来查看端口号是否空闲:

bash 复制代码
sudo lsof -i :端口号

如果执行上述命令后没有输出就说明对应的端口号是空闲的,我这里选择的端口号是8077,如下图:

保存退出后依次执行以下命令:

复制代码
`# 停止gitlab服务 
sudo gitlab-ctl stop ​

# 配置gitlab服务 
sudo gitlab-ctl reconfigure ​

# 重启所有gitlab组件 
sudo gitlab-ctl restart ​

# 启动所有gitlab组件 
sudo gitlab-ctl start

# 启用开机自启动
sudo systemctl enable gitlab-runsvdir.service
`
4.设置GitLab管理员账户

管理员账户的用户名默认为root,设置的密码不能太短,否则会失败。在终端依次执行以下命令(打开控制台可能有些耗时比较慢):

复制代码
`#切换工作目录,gitlab-rails可执行程序在目录/opt/gitlab/bin/ 下
cd /opt/gitlab/bin/ ​

#打开控制台
sudo gitlab-rails console -e production ​
 
#查询用户账号信息并赋值给u
u=User.where(id:1).first​

#设置root的密码,密码太短会失败
u.password='myserver123'

#确认密码
u.password_confirmation='myserver123'

#保存信息(注意有个感叹号)
u.save!

#退出
exit`

执行结果如下图:

完成上述步骤之后,在同一个局域网内已经可以通过ip地址和端口号访问GitLab服务器了(我这里的地址是http://192.168.160.130:8077),如下图所示:

输入账户名root和刚刚设置的密码即可成功登录:

5.利用cpolar实现内网穿透

首先到cpolar官网(cpolar - secure introspectable tunnels to localhost)注册一个账号,注册界面如下:

注册成功之后登录,在验证栏可以看到一个token,我的token如下图:

打开终端,输入以下命令安装cpolar-client:

bash 复制代码
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

然后用以下命令查看版本号,如果成功显示版本号说明cpolar-client安装成功:

bash 复制代码
cpolar version

使用以下命令认证token,将刚才在官网验证栏获取的token粘贴到命令中的对应位置即可:

bash 复制代码
cpolar authtoken 验证栏的token

而后依次执行以下命令:

复制代码
`#向系统添加服务
sudo systemctl enable cpolar

#启动服务
sudo systemctl start cpolar

#查看服务状态
sudo systemctl status cpolar`

结果如下说明服务已成功开启:

成功启动 cpolar 服务后,可以在浏览器上访问 ubuntu局域网 ip 地址+9200 端口(在我这里就是http://192.168.160.130:9200 ),登录 cpolar web UI 管理界面,并依次点击隧道管理->创建隧道。如下图:

然后根据需要设置隧道名称,协议选中http,本地地址就是刚才在/etc/gitlab/gitlab.rb文件中设置的端口号(我这里是8077),域名选中随机域名,地区选中China VIP,然后创建即可。创建成功后可以在状态->在线隧道列表中看见相应的表项:

再次运行sudo vim /etc/gitlab/gitlab.rb命令,修改GitLab服务器的ip配置,添加以下内容(注意:这里所添加的具体配置信息要与上面在cpolar中的状态->在线隧道列表中显示的一致):

复制代码
`# 设置GitLab的外部访问URL(用于页面、HTTP克隆)
external_url 'http://5c5c3a3d.r10.vip.cpolar.cn'

# 设置GitLab的SSH访问地址(用于SSH克隆)
gitlab_rails['gitlab_ssh_host'] = '5.tcp.cpolar.top'
gitlab_rails['gitlab_shell_ssh_port'] = 12919

# 设置监听端口号,不添加这两句会导致8077端口未被监听而无法访问GitLab服务器
nginx['listen_port'] = 8077
nginx['listen_https'] = false
`

如下图所示:

保存退出后,依次执行以下命令,重新配置并重新启动GitLab服务器:

复制代码
`# 重新配置GitLab服务
sudo gitlab-ctl reconfigure ​

# 重启所有GitLab组件
sudo gitlab-ctl restart`

此时就可以在公网通过cpolar提供的公网域名访问我们的GitLab服务器了,例如我的cpolar公网域名如下图:


在浏览器上输入Sign in · GitLab,即可访问GitLab,如下图:

可以在Preferences选项卡中将语言修改成中文:

保存后重新刷新下即可。此时创建项目后可以看到,git clone的地址也相应的变成了公网地址,在其他网段的主机是可以clone我们GitLab服务器上的代码的。但是cpolar的公网域名在没开会员的情况下会定期改变,这点比较烦人。

相关推荐
段帅龙呀2 小时前
Redis构建缓存服务器
服务器·redis·缓存
乌鸦不像写字台2 小时前
【docker部署】在服务器上使用docker
服务器·docker·容器
牧以南歌〆3 小时前
在Ubuntu主机中修改ARM Linux开发板的根文件系统
linux·arm开发·驱动开发·ubuntu
Antonio9154 小时前
【音视频】HLS简介与服务器搭建
运维·服务器·音视频
夜月yeyue5 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
kfepiza5 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
无妄-20245 小时前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享
R.X. NLOS5 小时前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code
cuijiecheng20186 小时前
Ubuntu下布署mediasoup-demo
linux·运维·ubuntu
独行soc8 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网