局域网内搭建Git服务器,最稳妥的方案是选用Gitea或GitLab CE,部署在公司内网一台Linux机器上,通过SSH或HTTP协议让团队成员协作,整个过程约半小时即可完成。
公司内网搭建git服务器完整步骤
许多团队第一次在内网搭Git服务器,往往会在”用哪个软件”上卡住,其实决策路径很清晰:先看你需要什么,需要轻量、启动快、资源占用低,选Gitea;需要完整的CI/CD流水线、代码评审和项目看板,选GitLab CE,两者都支持局域网git服务器怎么设置的核心诉求:内网访问、多用户权限控制、仓库管理。
硬件和系统准备
- 系统:Ubuntu 22.04 LTS或Debian 12,这两款系统社区资料多,遇到报错容易搜到解决方案
- 配置:Gitea建议2核4G内存起步,GitLab CE建议4核8G,这能满足约20人以内团队的使用
- 网络:给服务器配置固定IP地址,避免路由器重启后IP变动导致同事的remote地址失效
Gitea极简安装流程
# 下载二进制文件
wget -O /usr/local/bin/gitea https://dl.gitea.com/gitea/1.21.0/gitea-1.21.0-linux-amd64
chmod +x /usr/local/bin/gitea
# 创建专用用户和目录结构
useradd --system --shell /bin/bash --comment 'Git Version Control' --create-home git
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea
# 启动并访问
sudo -u git /usr/local/bin/gitea web --config /etc/gitea/app.ini
安装完成后,浏览器打开 http://服务器IP:3000,按页面引导填写数据库类型(选择SQLite3最简单)、应用名称、服务器域名和端口,点击安装即完成,实际使用中,行业共识认为Gitea的安装门槛在Git服务中是最低一档。
使用Docker部署GitLab
如果你更倾向容器化部署:
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:16.9.0-ce.0
container_name: gitlab
restart: always
hostname: '192.168.1.100'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.1.100'
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- /srv/gitlab/config:/etc/gitlab
- /srv/gitlab/logs:/var/log/gitlab
- /srv/gitlab/data:/var/opt/gitlab
保存为 docker-compose.yml,执行 docker-compose up -d,首次启动需要等待3-5分钟,期间容器会初始化数据库和后端服务,访问 http://192.168.1.100,默认账号是 root,首次登录会要求你设置密码。
局域网git服务器用哪种协议更合适
不少人纠结该用SSH还是HTTP协议,这直接影响日常使用体验。
| 对比维度 | SSH协议 | HTTP/HTTPS协议 |
|---|---|---|
| 认证方式 | 密钥对,免密推送 | 用户名密码或Token |
| 端口要求 | 22端口,部分防火墙需开放 | 80/443端口,通常已放行 |
| 安全性 | 高,私钥本地保存 | 依赖HTTPS加密(内网可用HTTP) |
| 首次配置成本 | 需生成并分发公钥 | 零配置,浏览器直接操作 |
| 适合场景 | 开发者主力使用 | 临时访问、跨部门协作 |
实操建议:先做一件事用 ssh-keygen -t rsa -b 4096 -C "你的邮箱" 生成密钥对,然后把 ~/.ssh/id_rsa.pub 内容粘贴到Gitea或GitLab后台的SSH密钥设置中,这一步完成后,克隆仓库就能用 git clone git@192.168.1.100:username/repo.git 这样的地址直接拉代码。
日常开发中,SSH协议免去每次推送输密码的麻烦,效率优势很明显,HTTP协议适合偶尔需要从浏览器上传文件或做代码审查的同事。
git服务器怎么设置中文乱码问题的解法
内网Git服务器频繁遇到中文乱码,集中在三个位置:文件名显示乱码、提交信息乱码、Web界面乱码。
文件名和提交信息乱码
# 在客户端全局配置 git config --global core.quotepath false git config --global i18n.commitencoding utf-8 git config --global i18n.logoutputencoding utf-8 # Windows用户还要加这两行 git config --global gui.encoding utf-8 git config --global svn.pathnameencoding utf-8
core.quotepath false 解决文件名为中文时显示成八进制转义序列的问题,配完之后,git status再也不会出现 "\346\265\213\350\257\225" 这样的乱码。
Web界面乱码
在Gitea的 app.ini 中:
[i18n] LANGS = zh-CN [webhook] ALLOWED_HOST_LIST = private
GitLab CE则在Admin Area → Preferences → Localization中切换简体中文,若页面仍乱码,检查服务器系统locale:
locale # 如果LANG不是utf-8,执行 export LANG=zh_CN.UTF-8
仓库权限与分支保护细则
权限设计是局域网服务器上线前必须想清楚的事,否则后期调整很麻烦。
角色划分建议
- Owner:唯一管理员,拥有全部权限,负责添加成员、删除仓库、调整设置
- Developer:可推送代码、创建分支、发起合并请求,但不能修改仓库级设置
- Reporter:只读权限,适合产品、测试、设计查看代码
- Guest:可创建Issue和评论,适合管理层旁观进度
Gitea和GitLab CE都支持在”仓库设置 → 协作与访问”中按项目指派角色,对于有多个业务线的团队,创建对应Group并在Group下设仓库,比给每个仓库单独加人要省事得多。
分支保护配置
在”分支”设置中,对 main 或 master 分支开启保护:
- 允许合并:仅限Maintainer角色
- 推送权限:拒绝直接push,要求通过Merge Request合并
- 强制线性历史:勾选后避免出现交叉合并记录
这条规则能有效避免同事直接push到主分支导致代码冲突的问题,日常开发拉分支、提Merge Request、代码评审后合入,形成良性协作闭环。
局域网git服务器初始备份方案
服务器放在机房,硬盘总会老化,Git仓库的备份策略可以很轻量:
# 每日凌晨2点执行增量备份 0 2 tar czf /backup/git_backup_$(date +\%Y\%m\%d).tar.gz /var/lib/gitea/data # 保留最近7天备份 0 3 find /backup -name ".tar.gz" -mtime +7 -delete
更稳妥的做法是用 git clone --bare 在另一台机器上做镜像仓库:
git clone --bare git@192.168.1.100:team/project.git /backup/project.git cd /backup/project.git git remote add backup /backup/project.git git push --mirror backup
这样即使主服务器硬盘损坏,从备份机器上 git clone --bare 就能快速恢复服务,数据损失控制在24小时以内。
局域网git服务器使用频率最高的命令行操作
部署完服务器后,团队日常用到的命令也就这几条:
git clone git@192.168.1.100:team/project.git首次拉取代码git checkout -b feature/login新建功能分支git add .git commit -m "描述改动"提交到本地git push origin feature/login推送到服务器git pull --rebase拉取最新代码并变基到当前分支
注意:多人协作时,推代码前先 git pull --rebase 再push,能避免产生无谓的合并commit,如果push时提示非fast-forward,说明远端有更新,不要用 git push --force 覆盖,那是破坏协作的典型操作。
常见问题排障手册
同事clone仓库提示”Permission denied (publickey)”
检查该同事的公钥是否已添加,服务器上没有对应的authorized_keys条目,SSH就会拒绝连接,让同事重新执行 cat ~/.ssh/id_rsa.pub,把输出完整复制到后台SSH密钥管理中。
网页能打开但git push超时
多半是防火墙阻止了22端口,执行 sudo ufw allow 22/tcp 放行SSH端口,如果公司网络策略比较严格,可以在 /etc/ssh/sshd_config 中改端口后重启sshd服务。
push时报错”rejected – non-fast-forward”
当前本地分支落后于远端分支,执行 git fetch origin 再 git rebase origin/main 解决冲突后重新push,别用force推送,会覆盖同事的提交。
忘记GitLab root密码
sudo gitlab-rake "gitlab:password:reset[root]"
按提示输入新密码,一分钟内重置完成。
Q&A:局域网git服务器怎么设置的一些高频疑惑
问:办公室没有外网,能不能装Git服务器?
可以,Gitea和GitLab CE都是本地部署方案,不依赖外网连接,安装包提前下载好,局域网内分发安装即可,后续升级时需要下载新版本安装包,但日常使用完全离线运行。
问:一个Git服务器建议最多支持多少用户?
Gitea在4核8G配置下能支撑50人左右团队使用;GitLab CE官方建议内存至少8G,50人以内规模运行流畅,超过这个规模,需要增加内存或拆分多个服务实例。
问:能不能用Windows作为服务器系统?
可以,但不太推荐,Windows上的Git服务器安装包容易获取,Gitea提供了Windows版exe,GitLab CE不支持Windows原生安装(需借助虚拟机或Docker for Windows),生产环境用Linux稳定性更佳,也方便用crontab写定时备份,比Windows计划任务简洁。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/773875.html


