如何搭建git服务器:基于Linux裸机最简手动部署方式
之前公司小团队不想用GitHub、Gitee这类公共代码托管平台,内网开发数据要绝对自留,折腾了整整一下午如何搭建git服务器,踩了一堆莫名其妙的操作失误,最后磨出了一套能用、不花哨、纯手动的内网部署方法,全程不用任何自动化脚本,普通云服务器或者本地Linux机器都能跑通。
最先上手的第一步,就是在服务器终端安装git依赖。当时直接敲了系统通用的安装命令,apt install git,没加任何参数,安装过程看着顺利,进度条跑完也没报错。
安装完随手输了git --version,能弹出版本号,就默认安装成功了。现在回头看,这一步其实没任何问题,大部分人卡壳根本不是栽在安装上,是后续权限和目录配置瞎操作搞崩的。
很多人会习惯性用root用户搭建整套服务,我最开始也是这么做的。全程root权限新建目录、初始化仓库、配置权限,等到本地电脑push代码的时候,反复提示权限拒绝、无法写入远程仓库。试了五六次推送,每次都是同样的报错,刷新重试、重启ssh都没用。
后来才反应过来,git服务严禁用root用户直接管理代码仓库,权限层级太高,本地客户端的普通ssh连接会被系统自动拦截,直接屏蔽所有读写操作。
立刻新建了一个专属的git系统用户,专门用来托管所有代码文件,不分配登录终端权限,只保留ssh连接权限,这一步是整套搭建流程里最关键的转折点,之前所有的报错全是因为忽略了这点。
新建用户之后,在服务器根目录之外,单独创建了一个固定的仓库存储文件夹,路径设置得简单纯粹,没有嵌套多层目录,也没有用中文、特殊字符命名,避免路径识别异常。进入文件夹后,执行git init --bare初始化裸仓库,裸仓库不会生成工作区文件,只保留版本控制核心数据,专门适配服务器托管场景,不会出现文件冲突。
初始化完成的瞬间,仓库就已经具备托管能力了。接下来就是配置ssh密钥互通,本地电脑生成ssh公钥,复制全部密钥内容,粘贴到服务器git用户的authorized_keys文件里。
这里犯了一个很细碎的错误,粘贴密钥的时候,末尾多带了一个空格。当时完全没察觉,密钥配置完之后,本地依旧无法连接服务器,一直提示认证失败。
逐行核对文件内容,删掉多余的空格和换行符,保存文件后重新修改权限,把密钥文件和对应目录的权限改成600和700,系统才认可了合法连接。很多搭建失败的人,都是死在这种肉眼难查的格式细节上。
打通连接之后,本地新建测试项目,初始化本地git,绑定远程服务器仓库地址,第一次推送代码的时候,又碰到了新问题。系统提示仓库分支名称不统一,服务器默认初始化分支是master,本地新版本git默认是main,名称对不上导致推送失败。
没有去修改服务器配置全局分支,最简单的处理方式,就是本地推送时指定对应分支,直接一次性推送成功,不用改动系统默认配置,省去了后续适配的麻烦。
整套流程跑通之后,测试了多次拉取、推送、分支创建、代码合并,所有基础功能都能正常使用,内网所有团队成员导入服务器密钥后,都能独立读写仓库,互不干扰。
没有配置复杂的网页可视化后台,单纯的命令行git服务器完全满足小团队需求,轻量化、不占服务器资源,也不用额外安装第三方托管工具。
最后在服务器后台设置了开机自启相关的基础守护配置,确认所有仓库目录权限归属git专属用户,彻底杜绝了权限报错的隐患,目前一直稳定运行,没有出现过任何代码丢失、连接中断的情况。
