君不见长松卧壑困风霜,时来屹立扶明堂。这篇文章主要讲述保姆级教程,自建公网可访问的Git私有仓库相关的知识,希望能为你提供帮助。
0.1 环境背景
互联完公司的产品项目,离不开多名工程师的协同开发,以及离不开Git仓库。
Git在线仓库众多,但是对于大点的需求,大概率要付费,最大的风险还是源码不在自己手上。
随着互联网的安全监管越来越多,越来越全,??**************************?
?
总之内,如果是个大公司,项目源码在自己手上是最安全的;
如果是小公司,搭建一个内部的Git仓库是非常方便的,降低成本。偶尔Git仓库需要外网,只需要映射到公网即可。
那我们这次就来学习,搭建一个私有Git仓库,并接入公网访问。
0.2 思路分析
私有Git仓库,需要多账号管理、多账号管理、权限管理、数据存储等等,一个Git仓库该有的功能,都应该有。
另外,还得顾忌部署简单、丰富可拓展的特点,这里直接选择开源的Gitea项目,可以直接使用,还可以二次开发。
本地仓库部署好之后,还需要从公网访问本地的Git仓库。
对比其他的服务,Git所需的网络特点:
针对以上特点,推荐使用内网云(neiwangyun.net) - 基于SSH协议的内网穿透服务服务,优势有:
0.3 物料准备
服务器系统:Debian 11【只要是Linux/Macos都行,虚拟机中的Linux系统也行】
预装环境:Docker、Docker-Compose、Supervisor【进程管理工具】
Gitea程序:docker-compose.yml
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.16.7
container_name: gitea
restart: always
networks:
- gitea
volumes:
- /root/gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "10022:22"
内网云隧道:两条隧道,请根据需要自行购买1条或2条,或者使用免费隧道测试。
免费隧道:ssh -R 80:127.0.0.1:8000 sh@sh3.neiwangyun.net
付费隧道:
1. 搭建本地Gitea仓库
首先在本地的Debian系统中,搭建Gitea仓库。
上面有个docker-compose.yml文件,具体的使用方式,是将这个文件放到一个空文件夹中,例如gitea-docker文件夹
准备就绪之后,使用docker-compose命令,??docker-compose up?
?,可以直接生成Docker镜像,以及直接运行Docker容器,如下图:
启动之后,就可以访问IP:Port,我这里是 192.168.100.33:3000,就可以看到Gitea的部署页面了
此时的终端是docker-compose运行状态,可以选择ctrl+c,先停止运行,则Gitea关闭。
因为??docker-compose up?
?会新建镜像,并运行容器,所以现在可以启动容器即可,就可以重新运行Gitea容器。
PS:??docker start 3b7?
?中的3b7,是上一行的Container ID,也叫做容器ID,可以简写,可以写全,都行。
2. Git仓库环境配
Gitea配置信息的设置,第一步就是URL。
因为Gitea是Docker访问,所以在本地,使用IP:3000的形式,可以直接访问。
那在配置的时候,为了方便起见,直接将服务器域名和基础URL都设置成Gitea-Web的网址就行了。
服务器域名,直接是一个二级域名,直接填。基础URL这个,包含http协议的,你写https可以,写https也行。
URL填好之后,看到下面的可选设置,其中管理员账号设置,这个很有必要。
打开管理员账号设置,填上用户名、管理员密码、确认密码以及一个电子邮件地址。
这个电子邮件地址不需要邮件验证码确认,能记住即可。
填完之后,点击立即安装,需要点时间等待。
等待结束,如果页面刷新不出来,别怕,网址填IP:PORT,例如我的 192.168.100.33:3000,多刷两遍。
3. Gitea接入公网访问
前面在Gitea的配置界面,已经把公网URL写进了配置文件,但是还不能直接访问,因为还没把端口接入公网。
首先打开内网云的控制台,控制台左侧的内容栏,找到可用隧道并点击,也就是上面的第三个图。
看到Gitea-Web的卡片,操作那里有个查看,点击查看按钮,弹出一个新的界面。
图中框中的部分,一个是域名,也就是写进Gitea配置信息的;另一个就是Gitea所在主机接入公网的命令。
复制命令,将里面的8000改成3000,因为Gitea的web界面是3000端口。
命令改好之后,到Gitea所在的主机上,打开终端Terminal,粘贴命令并运行,如下图:
终端中展示出了username、http、https,说明接入公网成功,可以使用浏览器打开公网的域名了,如下:
如果有报错,或者正常运行但是打不开,请联系内网云的客服,内网云提供7*24小时的手把手技术支持。
4. Git仓库配置更改
在进入web和ssh端口测试,以及端口公网测试的时候,先来说一下Gitea配置完成之后的配置信息修改。
Gitea是Docker形式部署,所以Gitea端口有Docker一套,宿主主机一套。
当前我的Gitea-Docker部署,端口对应情况是:
Docker中的端口通常是不能改的,宿主主机的端口,在Docker启动后也是不能改的。
内置的配置无法改动,这是正常运行的配置;但是显示界面的内容是可以改动的,我们需要自定义。
例如域名:??http://xayxfmsh3.neiwangyun.net???;
现在来打开Gitea的配置文件,文件位置在docker-compose.yml写明了,在??/root/gitea-data:/data?
?这里。
具体路径是:??/root/gitea-data/gitea/conf/?
??,文件名是??app.ini?
?。
打开app.ini,开始备注特定的字段,并修改成我们需要的内容。
APP_NAME = 内网云-Gitea
RUN_MODE = prod
RUN_USER = git
[repository]
ROOT = /data/git/repositories
[repository.local]
LOCAL_COPY_PATH = /data/gitea/tmp/local-repo
[repository.upload]
TEMP_PATH = /data/gitea/uploads
[server]
APP_DATA_PATH= /data/gitea
DOMAIN= xayxfmsh3.neiwangyun.net# WEB的域名
SSH_DOMAIN= xayxfmsh3.neiwangyun.net# SSH的域名
HTTP_PORT= 3000#不建议修改
ROOT_URL= http://xayxfmsh3.neiwangyun.net/# 根路由
DISABLE_SSH= false
SSH_PORT= 10022# SSH的端口,可以修改,这里应该对应docker-compose.yml中的 10022
SSH_LISTEN_PORT= 22# SSH的监听端口,不要修改
LFS_START_SERVER = true
LFS_CONTENT_PATH = /data/git/lfs
LFS_JWT_SECRET= DANys3I8hRddYjaMYd1ky7aiZ-8uxE1f1OxtKM2tagY
OFFLINE_MODE= false
详细介绍:
其他的未备注信息的字段,使用默认的配置即可,不改动。
重点说明:更改了配置文件,一定要重启Gitea这个Docker,一定要重启。
配置信息就介绍到此,当然这个app.ini中的这几个字段,只是我截取的一部分,下面还有很多可配置字段信息。
5. HTTP和SSh的仓库同步测试
URL配置好了,SSH的10022端口也配置好了,现在开始测试了。
预处理:新建一个仓库,里面有文件即可。
使用本地IP:PORT,即192.168.100.33:3000,仓库名称随意,里面选择包含一个.gitignore文件,如下图:
配置完成之后,点击生成仓库,然后自动跳转到新仓库地址。
第一个是HTTP形式的仓库同步,这个用的是URL,也就是上图中的Gitea-Web隧道。
开始测试前,把Gitea-Web的隧道重启一次,就是在终端中,断开之前的链接,然后再次运行,确保隧道在运行中。
然后访问http或者http是的网址,检测下能否打开网页。
正常访问没问题,然后进入仓库,拷贝http的url,测试使用git clone命令,拷贝到本地。
因为我之前运行过git clone拷贝http链接,所以这次并未提示我输入账号密码。
正常情况下,输入账号密码是常规流程,而且很多系统或Git工具中,git会保留账号密码。
当前HTTP的git拷贝测试,没问题。接下来是SSH的拷贝测试。
6. SSH链接的Git clone拷贝测试
要使用SSH的Git clone拷贝,基础步骤:
先生成一个SSH密钥对,命令式
??ssh-keygen -t rsa -C "这里任意"?
?,然后一路回车,就可以。
生成完成之后,生成的文件,就在你的用户主目录下的.ssh文件夹中,如下图:
生成的秘钥是一对,id_rsa和id_rsa.pub,pub后缀的文件就是公钥。
??cat id_rsa.pub?
?意思是显示这个文件的内容,把这个内容,复制,粘贴到Gitea里面,如下图示:
如上图示,三步搞定。
搞定之后,启动隧道,注意这次的隧道,是转发的服务器端口是10022端口,公网端口则是28716端口,如下:
【保姆级教程,自建公网可访问的Git私有仓库】
隧道启动了,现在可以测试拷贝了,首先进到仓库,点击SSH的按钮,就会显示SSH的链接,然后复制:
回到你的电脑上,打开终端,写命令??git clone ssh-link?
?:
完成,SSH链接的公网clone测试顺利。
7. 持久化内网穿透服务
目前,Docker运行的Gitea很稳定,Gitea-Web和Gitea-SSH都是终端里面运行的,如果断开连接,则公网服务也就断了。
要想持久化,就需要借助其他工具,保持持久连接,在网络出现波动的时候,即使断了也可以自动重连。
这里推荐SuperVisor工具,简单易用。
首先在Docker所在的宿主主机进行安装,安装命令??apt install supervisor?
?,如下图:
图中显示,已安装并正常启动。
然后进到配置文件,文件位置
??/etc/supervisor?
?。
这里有一个配置文件??/etc/supervisor/supervisord.conf?
?,可以给配置文件加点内容,这样我们就可以通过web进行supervisor的管理。
打开supervisord.conf文件,往内容的底部,添加一段内容:
[inet_http_server]
port=0.0.0.0:9001
username=neiwangyun
password=neiwangyun
记住账号密码,然后重启服务,命令??service supervisor restart?
?。
如果没有报错,就打开浏览器,访问宿主主机的IP:9001,这个端口是固定的,如下图:
当前supervisor进程管理内,没有可管理的服务,因为还没添加。
现在进到??/etc/supervisor/conf.d?
?目录内,这里是存放服务的地方,我们需要新建两个文件,内容如下:
[program:gitea-web]
command=ssh -R 80:127.0.0.1:3000 buladou041@sh3.neiwangyun.net
autostart=true
autorestart=true
numprocs=1
killasgroup=true
stopasgroup=true
stderr_logfile=/etc/supervisor/conf.d/gitea-web_err.log
stdout_logfile=/etc/supervisor/conf.d/gitea-web_out.log
[program:gitea-ssh]
command=ssh -R 80:127.0.0.1:10022 buladou042@sh3.neiwangyun.net
autostart=true
autorestart=true
numprocs=1
killasgroup=true
stopasgroup=true
stderr_logfile=/etc/supervisor/conf.d/gitea-ssh_err.log
stdout_logfile=/etc/supervisor/conf.d/gitea-ssh_out.log
以上就是两个文件内容,也就是我们用的那两个隧道命令,以及拓展了一些信息。
注意,根据这个模板做你自己的进程文件,你需要更换以下内容:
内容准备好了,新建文件,把内容写进去。
文件名称没有特定要求,但有一点,一定要用??.conf?
?做文件后缀。
如下图:
断开之前终端里面的隧道命令,然后重启supervisor服务,再打开IP:9001的网页,如下图:
图中,running表示正常运行;如果是红色,那就是有异常了。
有问题,找内网云的客服,提供7*24小时的手把手售后服务。
到此,Gitea的本地搭建,以及公网映射服务,都搞定了,不是区域网络出问题,99%是可以使用的,稳得一批。
使用 IP:PORT 形式可以访问,URL:PORT 形式也可以自由访问。
推荐阅读
- windows提示无法验证数字签名,无法正常进入操作系统
- nginx 虚拟主机 安装Discuz论坛
- OLEDB和ODBC的区别(优缺点)
- nginx 域名重定向
- C#ShowCursor光标的显示与隐藏
- DirectX 3D 之C#开发
- AOP面向切面的编程使用Interceptor内置的容器进行属性注入
- oracle池式连接请求超时问题排查步骤
- 大中型企业如何构建自己的监控体系