大麦云服 大麦云服 立即咨询
返回列表

Azure 开户代办 Azure微软云服务器搭建私有Git库

微软云Azure / 2026-05-11 14:15:36

下载.png

前言:Git 库也需要“房产证”

如果你做过团队协作,肯定遇到过这种场景:代码在本地开发机上是天选之子,一旦要给别人同步,就开始“靠微信发压缩包”“靠聊天记录存 patch”。久而久之,你会发现:不是大家不努力,是 Git 仓库这事儿没搭好。于是你想:既然都上云了,那就顺手在 Azure 上搭一套私有 Git 库,让代码走流程、走权限、走审计——大家都省心。

本文目标很明确:你将得到一个在 Azure 上运行的私有 Git 服务端(基于 SSH),支持团队成员用 Git 在外网安全访问,并能稳定推送/拉取。我们会尽量保持“可复用、可落地”,不搞玄学,尽量让你照着做就能跑。

总体方案:用“裸仓库 + SSH”当私有 Git 服务

关于私有 Git,常见路线有很多,比如用 GitLab、Gitea、纯 Web 方案、甚至直接用托管服务。可是在“快速、安全、可控”的平衡点上,裸仓库(bare repository)+ SSH 是最轻量、最省资源、也最容易入手的方式。

本方案特点:

  • 轻量:不用搭复杂的 Web 服务,资源占用小。
  • 安全:使用 SSH Key 验证,不用把密码到处飘。
  • 通用:任何支持 Git+SSH 的客户端都能访问。
  • 易维护:仓库结构简单,权限清晰。

你要做的事情基本是:买(或创建)一台 Azure 云服务器 → 配置系统基础环境 → 创建一个专用用户和裸仓库 → 开放 SSH 访问 → 本地 push 进来。

第一步:在 Azure 创建云服务器

1. 选哪种系统更合适?

我建议你用 Linux(Ubuntu 常见且文档多)。如果你团队对运维比较熟,Debian 也没问题。核心要求:

  • 系统支持 apt(或等价包管理器)
  • SSH 服务能正常运行
  • 你能配置防火墙/网络规则

2. 规格怎么选?

搭私有 Git,通常不需要很夸张的规格。建议起步:

  • CPU:1-2 核
  • 内存:2GB 起
  • 磁盘:至少 30GB(团队仓库大了再加)

如果你还准备上 CI/CD 或者以后再上 GitLab,那就另说;但单纯 Git 裸仓库,这个配置很够用。

3. 网络与端口:别把家门口开成自助餐

你只需要开放一个关键端口:22(SSH)

在 Azure 门户中,确保网络安全组(NSG)或防火墙规则允许:

  • 入站:TCP 22(建议限制来源 IP 到你的办公网/固定出口)
  • 出站:一般默认即可

如果你只是学习/小范围内网访问,可以放宽;但真要生产,建议至少限制来源 IP。安全这东西,永远不是“看心情”,是“看事故发生没有”。

第二步:登录服务器并安装 Git

1. 登录

你会拿到服务器的公网 IP 和管理员账号。常见方式是 SSH:

ssh <用户名>@<公网IP>

如果你不想用密码登录,建议用 Azure 里配置好的 SSH Key。

2. 更新系统并安装 Git

进入服务器后,先更新包列表:

sudo apt update

安装 Git:

sudo apt install -y git

检查版本:

git --version

如果版本能正常输出,你已经成功跨过第一座“把时间浪费在版本号上的大山”。

第三步:创建专用 Git 用户与目录结构

为了让权限不乱,你最好不要用 root 来管理仓库。我们创建一个专用用户,例如 git

1. 创建 git 用户

sudo adduser --disabled-password --gecos "" git

按照提示设置用户信息即可。关键是不用设置密码(或确保只能通过 SSH Key)。

2. 创建仓库根目录

sudo mkdir -p /var/git
sudo chown git:git /var/git

接下来,所有仓库都放在:

/var/git/<repoName>.git

第四步:配置 SSH 访问(重点中的重点)

我们要确保:客户端用自己的 SSH Key 访问服务器时,能把操作限制在特定目录。

1. 确保 SSH 服务已启用

一般系统默认是开启的。你可以确认:

sudo systemctl status ssh

如果没有启动:

sudo systemctl enable --now ssh

2. 生成 SSH Key(在客户端)

Azure 开户代办 每个团队成员在自己的电脑上生成密钥对(如果还没有):

ssh-keygen -t ed25519 -C "[email protected]"

一路回车即可,生成后你会得到:

  • 私钥:~/.ssh/id_ed25519
  • 公钥:~/.ssh/id_ed25519.pub

3. 把公钥添加到服务器

把每个人的公钥内容追加到服务器的:

/home/git/.ssh/authorized_keys

先创建目录并设置权限:

sudo -u git mkdir -p /home/git/.ssh
sudo chmod 700 /home/git/.ssh

然后追加公钥。假设你把公钥内容复制好了:

sudo sh -c 'cat >> /home/git/.ssh/authorized_keys'

粘贴公钥后保存即可。

最后设置权限:

sudo chmod 600 /home/git/.ssh/authorized_keys

4. 追加一个“防止别人乱写”的约束(可选但很香)

更严格的做法是为每个公钥配置命令限制,但这会增加管理复杂度。对于入门私有仓库,通常只要:

  • 使用专用 git 用户
  • 仓库根目录权限正确
  • SSH Key 不泄露

就足够了。

如果你以后想进一步加强,我也建议你加上按用户映射权限(比如限制只能对某些仓库写入)。后文我会讲到权限策略。

第五步:创建裸仓库并初始化(让 Git “有地方放代码”)

现在我们可以在服务器端创建一个私有仓库。比如你要建一个名为 myapp 的仓库。

1. 创建裸仓库

cd /var/git
sudo -u git git init --bare myapp.git

裸仓库创建完成后,你会看到目录 /var/git/myapp.git。

2. 设置仓库所有权(确认权限没问题)

sudo chown -R git:git /var/git/myapp.git

3. 设置默认分支(可选但推荐)

有些情况下,你希望仓库默认分支是 main:

cd /var/git/myapp.git
sudo -u git git symbolic-ref HEAD refs/heads/main

当然,最终分支名还是以你首次 push 的分支为准,但提前设置能减少一些“为什么拉下来是 master”的烦躁。

第六步:在本地添加远程并首次推送

到这一步,你已经有服务器仓库了。接下来,在本地项目目录里添加 remote 并推送。

1. 本地准备一个仓库

如果你已有项目 Git 初始化过,可以跳过。

git init

Azure 开户代办 把代码提交起来:

git add .
git commit -m "init"

Azure 开户代办 2. 添加远程地址

远程地址格式(SSH)通常是:

git@<公网IP或域名>:/var/git/myapp.git

在本地执行:

git remote add origin git@<公网IP或域名>:/var/git/myapp.git

检查 remote:

git remote -v

3. 推送到服务器

首次推送建议显式指定分支:

git push -u origin main

如果你的分支叫 master,就用 master。

推送成功后,你的私有 Git 库就算搭起来了。此时你可以:

  • 团队成员 clone:
    git clone git@<公网IP或域名>:/var/git/myapp.git
  • 本地继续推送:
    git push

第七步:权限与多人协作策略(不然就会变成“谁都能写谁都不改”)

裸仓库配 SSH 时,默认所有能登录 git 用户的人,只要仓库权限允许,就能推送。你可能希望做到:

  • 某些成员只读
  • 某些成员可以写入
  • 不同仓库分不同角色

下面给你几种常用策略。

策略 A:用不同 Unix 用户分别映射权限(推荐进阶版)

思路是:为每个开发者创建一个系统用户(或至少为写入组创建用户),然后每个用户的 SSH Key 绑定到对应账号。再把对应仓库目录的所有权和权限设置好。

这套方案比“全部用 git 用户”更稳,也更容易审计。但管理成本略高。

策略 B:用组权限控制写入(折中)

你可以给仓库设置 group,比如:

  • 把需要写入的用户加入某个组,如 git-writers
  • 仓库目录设置 group 并控制写权限

注意:Git push 是否成功还取决于仓库是否具备必要写入能力。你要确保写入路径权限没问题。

策略 C:简单粗暴(适合小团队临时用)

如果你只有 2-3 个人,且都很靠谱,直接让所有人能写可能也能接受。但要在心里默念:“能不能写,不重要;重要的是别手滑 force push。”

第八步:常见坑位排查(省你 3 小时“怀疑人生”)

坑 1:连接不上服务器(timeout)

  • 检查 Azure NSG 是否放行 TCP 22
  • 检查服务器本地防火墙(如果有启用 UFW 等)
  • 检查你是否用对了 IP(有时是内网/公网混淆)

坑 2:权限问题(Permission denied (publickey))

  • 确认客户端公钥是否正确加入 authorized_keys
  • 确认 /home/git/.ssh 权限是 700,authorized_keys 是 600
  • 确认 ssh 用的用户名是 git(或你实际配置的用户)

Azure 开户代办 坑 3:push 报错(无法写入仓库)

  • Azure 开户代办 检查仓库目录所有权是不是 git
  • 检查仓库目录权限:至少要让 git 用户有写权限
  • 检查磁盘是否满了(磁盘满会导致写入失败)

磁盘检查:

df -h

坑 4:clone 成功,但看不到某些分支

  • 确认你 push 的分支名称
  • 确认你首次 push 用的是 main/master(和你设置的 HEAD 不一定一致)
  • 如果历史重写过,可能需要重新 fetch

第九步:安全加固建议(把“能用”升级成“敢用”)

搭完能用只是第一关,接下来是把它做成“抗揍”的服务。

1. 强制 SSH Key,不要开密码登录

编辑 SSH 配置(一般在 /etc/ssh/sshd_config),将:

PasswordAuthentication no

同时确保:

PubkeyAuthentication yes

修改后重启 SSH:

sudo systemctl restart ssh

2. 限制来源 IP(强烈建议)

在 Azure NSG 或防火墙层面,只允许办公网/固定出口访问 22。这样你就不会成为“公开可爆破靶场”。

3. 做定期备份

仓库在 /var/git。你需要定期备份目录。

  • 可以用 tar 打包
  • 可以配合对象存储(Azure Blob)
  • 至少保留最近几次快照

备份脚本示例思路(这里给你方向,别照抄就上生产):定期对 /var/git 做压缩归档并上传到安全位置。

4. 监控磁盘与 CPU

Git 服务是稳定型选手,但仓库增长不可预测。你需要关注磁盘空间和负载。

Azure 开户代办 基本查看:

top
df -h

第十步:升级玩法(当你想再进一步)

当团队规模上来,你可能会想要更多功能:

  • Web 界面
  • 权限管理更细
  • Issues / Pull Requests
  • CI/CD

这时你可以考虑:

  • 引入 Gitea(轻量 Web Git 服务)
  • 上 GitLab(功能强但更重)

但在你还没走到那一步之前,这套裸仓库方案完全能满足“私有、安全、快速落地”的需求。

结语:你搭的不是服务器,是团队的代码秩序

Azure 上搭私有 Git 库这件事,表面上看是命令行和权限设置,实际上它解决的是团队协作的秩序问题:代码归档、权限边界、推送流程、备份意识。你会发现,当仓库安定下来,沟通也会少很多“那个文件你发我一下”的戏码。

最后送你一句“运维人常说但不常写”的话:能拉就证明网络通了,能推就证明权限对了,能备份就证明你成熟了。

希望你照着这篇文章做完,Git 服务端顺利上线。你要是愿意,我也可以根据你的具体情况(系统版本、团队人数、仓库数量、是否要只读/可写权限)把权限策略继续细化到可以直接照做的程度。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系