尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

gitblit-1.9.3 内网 Git 服务器搭建与避坑指南

gitblit-1.9.3 内网 Git 服务器搭建与避坑指南 简介Gitblit-1.9.3 是一款开源 Git 仓库管理工具的完整发行包面向需要自建代码托管服务的开发团队与运维人员尤其适合希望在内网或私有环境中实现版本控制、权限精细化管理的 Java 技术栈用户。压缩包共 321 个文件约 41.31MB以 75 个 jar 核心库、35 个 html 页面、24 个 js 与 23 个 css 前端资源为主辅以 groovy 脚本、cmd 启动命令、conf 配置模板及多语言 tmpl 文件覆盖服务安装、索引重建、权限配置等模块。已有 352 人学习下载。该版本在用户界面、性能与安全性上有所改进并修复了早期版本的若干缺陷支持仓库克隆、推送、拉取及用户组权限分配。解压后可按文档完成仓库存储位置、访问权限与邮件通知等配置快速搭建团队协作的 Git 服务环境。1. 从一台内网 Git 服务器说起gitblit-1.9.3 到底能解决什么很多团队都遇到过这种局面代码要管起来但服务器全在内网装 GitLab 太重跑个 Gitea 又担心 Java 环境不统一最后翻出一台老机器想找个「扔个 jar 包就能跑」的方案。gitblit-1.9.3 就是冲这个场景来的。它是一个纯 Java 实现的 Git 服务端单个 jar 包加一份配置文件就能启动自带 Web 界面、仓库管理、用户权限、HTTP 和 SSH 两种克隆方式不依赖数据库默认用文件系统存元数据。换句话说你不需要 Docker、不需要 MySQL、不需要反向代理就能先把仓库跑起来。它适合谁内网小团队、教学环境、需要快速搭一个只读或受控 Git 服务的运维同学以及那些不想为几十个仓库维护一整套 CI/CD 平台的人。1.9.3 是 1.9.x 系列里比较稳的一个版本社区里关于「gitblit 重启」的讨论大多集中在配置生效和端口占用上后面会专门讲。2. 把 gitblit-1.9.3 跑起来从解压到第一个仓库2.1 运行环境与目录结构先看清楚gitblit 对 Java 版本有要求1.9.3 建议用 JDK 8 或 JDK 11再高的版本在部分 Linux 发行版上会遇到模块化相关的启动报错。下载下来通常是一个压缩包解压后核心目录就三块data/放配置和仓库数据tools/放命令行工具根目录下是gitblit.jar。我一般会先确认java -version输出的是 1.8 或 11然后直接进data/改gitblit.properties。这个文件是主配置里面用include引入了defaults.properties所以改的时候优先改gitblit.properties不要动默认文件否则升级时会被覆盖。# 查看 Java 版本确认在 8 或 11 java -version # 解压后进入 data 目录 cd gitblit-1.9.3/data # 备份原始配置养成习惯 cp gitblit.properties gitblit.properties.bak上面三步里java -version是排错第一步很多「启动即退出」都是 JDK 版本不对。备份配置是为了后面改崩了能回滚gitblit 的配置项有几百个改错一个键名不会报错只会静默用默认值这是最容易翻车的地方。2.2 关键配置项与启动命令真正要改的其实就几项server.httpPort改端口git.repositoriesFolder指定仓库存储路径server.httpBindInterface如果是内网多网卡机器建议绑具体 IP。改完保存用根目录的启动脚本拉起。# 回到根目录 cd .. # Linux/macOS 启动前台运行方便看日志 ./gitblit.sh # Windows 用这个 # gitblit.cmd启动后终端会打印监听地址和端口浏览器访问http://服务器IP:端口默认管理员账号是admin密码也是admin第一次登录必须改。登录后在「版本库」里点「新建版本库」填名称、描述、是否裸库提交后就能看到克隆地址。这里有个细节新建仓库时如果勾了「限制访问」只有授权用户能克隆适合内部项目不勾就是公开可读适合放文档或公共依赖。2.3 用命令行验证克隆与推送Web 界面建完仓库别急着在页面上点来点去直接用命令行验证一遍能提前暴露权限和网络问题。# 克隆刚建的仓库注意替换 IP、端口和仓库名 git clone http://192.168.1.10:8080/r/demo.git # 进入目录做一次提交 cd demo echo first commit README.md git add README.md git commit -m init # 推送会提示输入 gitblit 的用户名密码 git push origin mastergit clone的 URL 里/r/是 gitblit 的固定路径前缀少写会 404。推送时如果提示 403八成是仓库权限没给当前用户写权限去 Web 后台「用户」里把该用户加到仓库的推送列表。如果提示连接超时先telnet IP 端口确认端口通不通再查防火墙。这一套走通说明服务端基本可用了。3. 用户、权限与 SSH把访问控制做扎实3.1 用户管理与团队授权模型gitblit 的权限模型分三层用户、团队、仓库。用户可以直接授权到仓库也可以先建团队再把团队授权到仓库后者在人多的时候省事。后台「用户」页新建用户时username是登录名也是克隆时的账号displayName只是显示用。密码策略可以在gitblit.properties里用realm.passwordStorage调整默认是 MD5内网够用但如果对外暴露建议换成更安全的存储方式。团队授权时有个容易忽略的点repository permissions里的RW是读写R是只读RW允许强制推送。给普通开发给RW就行RW只给仓库管理员否则有人push -f把历史冲掉恢复起来很麻烦。我一般会建一个dev团队给所有仓库RW再建一个admin团队给RW新仓库默认继承。3.2 SSH 方式配置与公钥上传HTTP 克隆每次要输密码团队大了体验差SSH 是更稳的选择。gitblit 内置了 SSH 服务默认端口 29418可以在gitblit.properties里改git.sshPort。启用前确认git.sshPort没有被注释掉然后重启服务。# 生成密钥对一路回车即可 ssh-keygen -t rsa -b 4096 -C your_emailexample.com # 查看公钥内容复制整段 cat ~/.ssh/id_rsa.pub复制出来的公钥粘贴到 Web 后台「用户」→ 当前用户→「SSH Keys」里保存。然后测试连接# 测试 SSH 是否通端口换成你配置的 ssh -T git192.168.1.10 -p 29418返回欢迎信息就说明通了。之后克隆用ssh://git192.168.1.10:29418/demo.git这种格式。注意 SSH 的 URL 路径和 HTTP 不一样HTTP 有/r/前缀SSH 没有写错会提示仓库不存在。这个差异坑过不少人记住「HTTP 带 rSSH 不带」就行。3.3 仓库分组与镜像配置仓库多了以后平铺在列表里很难找。gitblit 支持用「版本库组」做层级建组时填组名建仓库时父级选这个组URL 里就会多一层路径。另外如果你们有上游仓库需要同步可以在仓库设置里配「镜像」填上游地址和同步周期gitblit 会定时拉取。镜像方向要看清是「拉」不是「推」别配反了把本地覆盖掉。4. 避坑与排查gitblit 重启后那些糟心事4.1 重启后配置不生效现象改了gitblit.properties里的端口或路径重启服务后还是老样子。原因通常是改错了文件或者改的键被后面的include覆盖了。gitblit 的配置加载顺序是defaults.properties先gitblit.properties后后者优先级高但如果你把改动写进了defaults.properties重启后可能被其他 include 覆盖。解决只改gitblit.properties改完用grep 键名 gitblit.properties确认改动在文件里再重启。4.2 端口被占用导致启动失败现象执行启动脚本后进程秒退日志里能看到Address already in use。原因一般是 8080 或 29418 被别的服务占了或者上一次 gitblit 没退干净。解决netstat -tlnp | grep 端口找到占用进程要么停掉它要么在配置里换端口。换端口后记得防火墙也要放行新端口否则本机通了外部还是连不上。4.3 克隆提示 403 或仓库不存在现象git clone返回 403或者提示 repository not found。原因分两种一是 URL 写错HTTP 少了/r/或 SSH 多了/r/二是权限没给当前用户不在仓库的授权列表里。解决先核对 URL 格式HTTP 是http://IP:端口/r/仓库名.gitSSH 是ssh://gitIP:端口/仓库名.git。URL 没问题就去后台看仓库的「权限」页确认当前用户或所在团队有至少R权限。4.4 大仓库推送中断现象推一个几百 MB 的仓库传到一半断掉重试还是断。原因通常是 HTTP 传输超时或内存不足。解决在gitblit.properties里调大git.http.maxRequestSize和server.httpRequestTimeout同时给 JVM 加内存参数比如启动脚本里-Xmx1024m。如果还是不行改用 SSH 推送SSH 对大仓库更稳。另外git config http.postBuffer在客户端调大也有帮助。4.5 重启后 SSH 密钥失效现象之前配好的 SSH 克隆重启服务后提示权限拒绝。原因多半是data/目录下的 SSH 主机密钥文件被清理了或者配置里git.sshKeysFolder指向的路径变了。解决确认data/下有ssh_host_rsa_key之类的文件没有的话重启时会重新生成但客户端会报主机密钥变更需要清掉known_hosts里对应条目再连。用户公钥存在data/sshkeys/下别手动删这个目录。5. 进阶技巧用命令行工具和钩子把 gitblit 管起来gitblit 自带一套命令行工具在tools/目录下很多人装完就忘了。比如批量建仓库与其在页面上一个个点不如用GitBlitManager配合脚本。常见做法是写一个 properties 文件描述仓库然后调工具导入。另外 gitblit 支持服务端钩子在仓库的hooks目录下放pre-receive或post-receive脚本可以做提交校验、自动通知、触发构建。钩子脚本用 shell 写接收标准输入里的 old/new/ref 信息注意脚本要有执行权限否则静默不生效。验证配置是否真的生效我习惯用「改一项、重启、验一项」的节奏不要一次改十项再重启出了问题根本定位不到是哪项。重启后先看日志开头有没有报错再访问 Web 确认端口最后用命令行克隆一次。这套流程走下来基本能覆盖 90% 的配置问题。从那以后我每次动 gitblit 配置都强制先备份gitblit.properties和data/目录再改单项、重启、验证绝不批量操作。希望帮到你。本文还有配套的精品资源点击获取
返回列表