0.1 环境背景

互联完公司的产品项目,离不开多名工程师的协同开发,以及离不开Git仓库。

Git在线仓库众多,但是对于大点的需求,大概率要付费,最大的风险还是源码不在自己手上。

随着互联网的安全监管越来越多,越来越全,**************************

总之内,如果是个大公司,项目源码在自己手上是最安全的;

如果是小公司,搭建一个内部的Git仓库是非常方便的,降低成本。偶尔Git仓库需要外网,只需要映射到公网即可。

那我们这次就来学习,搭建一个私有Git仓库,并接入公网访问。

0.2 思路分析

私有Git仓库,需要多账号管理、多账号管理、权限管理、数据存储等等,一个Git仓库该有的功能,都应该有。

另外,还得顾忌部署简单、丰富可拓展的特点,这里直接选择开源的Gitea项目,可以直接使用,还可以二次开发。

本地仓库部署好之后,还需要从公网访问本地的Git仓库。

对比其他的服务,Git所需的网络特点:

  • 不连续,只有pull和push的时候需要同步;
  • 网速要求高,速度越快传输越快;
  • 只有外网有需求时,才需要联网,不需要长年连接网络;

针对以上特点,推荐使用内网云(neiwangyun.net) - 基于SSH协议的内网穿透服务服务,优势有:

  • 按月付费,最低一个月5元,成本低,需要时再开;
  • 无客户端,每台电脑都会有ssh命令,包括win7、win10、win11;
  • Gitea有两个端口,配合内网云的服务,可选ssh服务和http服务;
    • 只转发ssh,则外网可用ssh同步,但是无法访问网页,保障网页信息和仓库的安全;
    • 同时转发ssh和http,则外网有内网一样的体验;
  • 单条隧道同时支持http、https、IP端口三种连接方式,即一条隧道包含:

    • 一个二级域名【免费】;
    • 一个开放的端口号【免费】;
    • 一个SSL安全证书【免费】;
    • 同时支持http和https协议【免费】;
    • 一个固定速度的网络带宽【收费】;

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.7container_name: gitearestart: alwaysnetworks:- giteavolumes:- /root/gitea-data:/data- /etc/timezone:/etc/timezone:ro- /etc/localtime:/etc/localtime:roports:- "3000:3000"- "10022:22"

内网云隧道:两条隧道,请根据需要自行购买1条或2条,或者使用免费隧道测试。

免费隧道:ssh -R 80:127.0.0.1:8000 sh@sh3.neiwangyun.net

付费隧道:

  1. Gitea-Web是给Gitea的web界面准备的隧道,方便浏览器访问web界面,以及输入账号密码的pull和push功能
  2. Gitea-SSH是给Gitea的ssh准备的隧道,ssh方便使用秘钥实现免密的pull和push功能

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部署,端口对应情况是:

  • 宿主主机是3000的web端口,对应Docker中的3000端口;
  • 宿主主机是10022的ssh端口,对应Docker中的22端口;

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

详细介绍:

  1. Domain和SSH_Domain是两个值,可以是两个不同的值;
  2. HTTP_PORT对应的是我们的docker-compose.yml文件中的3000端口,不用修改
  3. ROOT_URL是根路由,默认写Web的URL就可以了。
  4. SSH_PORT是SSH的显示端口,默认是22,这里应该对应docker-compose.yml中的 10022
  5. SSH_LISTEN_PORT是监听端口,这里不能修改

其他的未备注信息的字段,使用默认的配置即可,不改动。

重点说明:更改了配置文件,一定要重启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拷贝,基础步骤:

  1. 确认你要使用的电脑,先生成ssh秘钥对,将公钥放到gitea网站上
  2. 启动Gitea-SSH隧道的命令,这次的端口是Gitea-SSH隧道的28716
  3. 复制ssh的网址,到电脑终端中,git clone ssh网址,并回车

先生成一个SSH密钥对,命令式 ssh-keygen -t rsa -C "这里任意",然后一路回车,就可以。

生成完成之后,生成的文件,就在你的用户主目录下的.ssh文件夹中,如下图:

生成的秘钥是一对,id_rsa和id_rsa.pub,pub后缀的文件就是公钥。

cat id_rsa.pub意思是显示这个文件的内容,把这个内容,复制,粘贴到Gitea里面,如下图示:

如上图示,三步搞定。

搞定之后,启动隧道,注意这次的隧道,是转发的服务器端口是10022端口,公网端口则是28716端口,如下:

隧道启动了,现在可以测试拷贝了,首先进到仓库,点击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

以上就是两个文件内容,也就是我们用的那两个隧道命令,以及拓展了一些信息。

注意,根据这个模板做你自己的进程文件,你需要更换以下内容:

  1. 第一行的[program:servername],servername自己改,这个不能和其他文件的名称重复。
  2. 第二行的命令,改成你的端口,你的账号,你的命令。
  3. 倒数第二行,gitea-web_err.log,gitea-web这个自己改掉即可,不要重复,不然日志很乱。
  4. 倒数第一行,gitea-web_out.log,gitea-web这个自己改掉即可,不要重复,不然日志很乱。

内容准备好了,新建文件,把内容写进去。

文件名称没有特定要求,但有一点,一定要用.conf做文件后缀。

如下图:

断开之前终端里面的隧道命令,然后重启supervisor服务,再打开IP:9001的网页,如下图:

图中,running表示正常运行;如果是红色,那就是有异常了。

有问题,找内网云的客服,提供7*24小时的手把手售后服务。

到此,Gitea的本地搭建,以及公网映射服务,都搞定了,不是区域网络出问题,99%是可以使用的,稳得一批。

使用 IP:PORT 形式可以访问,URL:PORT 形式也可以自由访问。

保姆级教程,自建公网可访问的Git私有仓库相关推荐

  1. 保姆级教程——如何访问内网NAS

    在讲解如何访问NAS之前,我先来说下为什么需要访问内网NAS. 首先处于成本考虑,很多NAS系统都是部署在企业内网的,离开公司就无法访问,现在是高效率办公的时代,可能随时随地都需要用到NAS内部的文件 ...

  2. SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)

    保姆级教程,逻辑删除及字段自动填充设置,特别要说明的是本次用的是MySQL数据库,如果使用Oracle数据库是,数据库配置需要改变,数据库表一定要大写,否则无法生成代码. 数据库表 CREATE TA ...

  3. 从购买服务器到网站搭建成功保姆级教程~超详细

    ??从购买服务器到网站搭建成功保姆级教程~真的超详细,各位看官细品 ??前言 ??预备知识 ??什么是云服务器? ??什么是域名? ??什么是SSL证书? ??服务器选配 ??阿里云[官网链接](ht ...

  4. 天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

    天才少年稚晖君 | [保姆级教程]个人深度学习工作站配置指南 来源:https://zhuanlan.zhihu.com/p/336429888 0. 前言 工作原因一直想配置一台自己的深度学习工作站 ...

  5. ❤️周末爆肝两天❤️,万字长文,手把手教你配置CSDN主页的独特域名(保姆级教程,建议收藏)

    ❤️ 感受下效果图 ❤️ 目录 一.前言 二.先解决有没有的问题 1. 前置条件 2. 购买云服务器 3. 购买DNS域名 4. 配置Apache2服务 5. 配置云服务器的端口映射 6. 配置ngi ...

  6. Frp内网穿透保姆级教程 windows内网穿透

    Frp内网穿透保姆级教程 windows内网穿透 准备工作 一台具有公网ip的云服务器(我的是ubuntu) frp程序 流程 将frps放到具有公网ip的服务器上 将frpc放到需要内网穿透机器上, ...

  7. win系统的阿里云服务器部署IDEASpringBoot项目保姆级教程

    win系统的阿里云服务器部署SpringBoot项目保姆级教程 前言 配置阿里云服务器 配置环境 环境配置中的坑 还有别的坑的话,私信我我补充......毕竟配置是最基本的,还想咋样... jar包导 ...

  8. 快速上手Springboot项目(登录注册保姆级教程)

    本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...

  9. 保姆级教程:手把手教你搭建个人网站

    保姆级教程:手把手教你搭建个人网站 前言 准备与搭建 1.Git管理工具的下载与安装 2.nodejs环境安装 3.hexo博客框架下载 npm换国内源 使用npm下载hexo博客框架 初始化mybl ...

最新文章

  1. MySQL中对varchar类型排序问题的解决
  2. Spring整合Hibernate图文步骤
  3. 腐烂国度2巨霸版计算机学知识,《腐烂国度2巨霸版》新手攻略 新手入门玩法技巧大全...
  4. Matlab 矩阵计算例子
  5. [转]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]
  6. WebStorm 9 配置 Live Edit 功能与浏览器实现同步
  7. python 命令行 模块_深入浅析Python 命令行模块 Click
  8. [引]符号的英文说法
  9. linux-shell-变量参数
  10. 由入门C语言题目浅析gets()函数的用法
  11. github octotree工具 gitee
  12. 可以在树莓派上使用的交互式抠图软件
  13. Jedis的hget方法简单用法
  14. 大数据技术架构_大数据架构流程图
  15. python模拟登陆微博_超详细的Python实现微博模拟登陆,小白都能懂
  16. 前端裁图-如何使用ps软件将矩形图片裁剪成圆角矩形
  17. 微信小程序 -- 数据库数据excel文件批量导入
  18. xp设置系统时间同步服务器,xp设置时间同步服务器
  19. python数字华容道
  20. 哪个服务器便宜又稳定,便宜又稳定的云服务器

热门文章

  1. 【React】入门实例
  2. 高纬度矩阵运算--NumPy
  3. php代码审计命令执行,PHP代码审计笔记--命令执行漏洞
  4. 阿里云-印刷文字识别-营业执照识别
  5. 客流分析江湖争端再起,新旧势力谁更胜一筹?...
  6. django-mysql 中的金钱计算事务处理
  7. Rust图片类型识别
  8. 用于地址解析的协议是服务器,用于解析域名的协议是什么?
  9. html 占用空间 滚动轴_html – 缩放子级上的溢出滚动:X和Y轴上的不同行为
  10. 服务器 exe文件,服务器无故生成exe文件,套路有点深