从零开始用VPS搭建自己的Git仓库:一份踩坑后的实操笔记
GitHub私有仓库要收费,Gitee对仓库大小和成员数有限制,加上公司内网需要隔离……折腾一圈下来,我还是决定在自己VPS上搭一个Git仓库。用了一年后,稳定性、速度都远超预期,最关键的是完全自主可控。如果你也有类似需求,这篇教程就是为你写的,全程无废话,全是实操过的经验。
为什么选VPS而不是NAS或PC?
因为VPS有公网IP,随时能访问,不需要做内网穿透。我目前用的沐雨云服务器,2核2G配置,跑Git仓库绰绰有余,CPU常年占用不到5%,高峰也就10%出头。他们家的线路很稳,从家里远程push代码几乎没延误过。如果你只是个人或小团队用,1核1G内存的入门款完全够,系统选Debian 12或Ubuntu 22.04 LTS都行。
沐雨云服务器官网:https://www.muyuyun.cn
一、基础环境准备
登录VPS后,先更新系统并安装Git:
apt update && apt upgrade -y
apt install git -y
创建专门的Git用户(不要用root直接操作,避免权限风险):
adduser git
把客户端的SSH公钥加入git用户,这样才能免密push。将你本机的~/.ssh/id_rsa.pub内容追加到服务器/home/git/.ssh/authorized_keys,记得修改权限:
chown -R git:git /home/git/.ssh
chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys
二、搭建裸仓库(核心步骤)
在你想要的目录下初始化一个裸仓库(裸仓库只存放文件版本,不包含工作区,所以叫bare):
sudo -u git mkdir /home/git/repos
sudo -u git git init --bare /home/git/repos/myproject.git
此时本地电脑就可以通过git clone git@你的VPS_IP:/home/git/repos/myproject.git拉取代码了。但如果你直接push,会看到warning: 您并未提供一个提交信息之类的提示——那是因为裸仓库没有工作区,需要配置post-receive钩子来部署代码。
三、配置自动部署(实用的逼格操作)
很多教程到上面就完了,但实际用起来,我们往往希望push代码后,服务器上的网站/服务能自动更新。这就要用到post-receive钩子。
在服务器上建立一个供部署用的工作目录(例如/var/www/myproject),然后创建钩子文件:
sudo -u git mkdir -p /var/www/myproject
sudo -u git vim /home/git/repos/myproject.git/hooks/post-receive
写入以下内容:
#!/bin/bash
GIT_WORK_TREE=/var/www/myproject git checkout -f
保存并赋予执行权限:
sudo -u git chmod +x /home/git/repos/myproject.git/hooks/post-receive
注意:/var/www/myproject的所有权必须属于git用户,否则会报权限错误。另外,服务器上的web服务(如nginx)如果要读取这些文件,记得给好属主和组。
四、常见踩坑提醒(这些坑我真的全部踩过)
-
SSH连不上
大概率是authorized_keys权限不对。~/.ssh目录权限必须是700,authorized_keys必须是600,否则SSH服务会直接拒绝你。另外,git用户的shell如果是/usr/sbin/nologin,会导致clone失败,建议改成/bin/bash。 -
push后工作区没有文件
这是把裸仓库当普通仓库用导致的。裸仓库没有工作区,必须通过hooks来checkout。如果你只是想存代码,那无所谓;但如果你想部署网站,没有post-receive钩子,pull再快也是白搭。 -
目录权限混乱
我曾经把工作目录放在/var/www下,但web服务用户是www-data,导致网站读取不了文件。正确做法是把工作目录属组设为www-data,或者用ACL控制:sudo chown -R git:www-data /var/www/myproject sudo chmod -R 2775 /var/www/myproject -
裸仓库目录不要加执行权限
Git的钩子文件需要有执行权限,但仓库本身的目录不要给777,否则过安全扫描时会有风险。给775,属主git即可。
五、进阶建议
如果你嫌裸仓库+hooks太原始,想用Web界面管理项目、看提交记录、管理多个成员,可以装一个Gitea(轻量级)或GitLab(重量级)。个人推荐Gitea,二进制的,安装只要一条命令:
wget -O gitea https://dl.gitea.com/gitea/1.21.0/gitea-1.21.0-linux-amd64
chmod +x gitea
./gitea web
但说实话,如果只是自己备份代码,裸仓库+git push已经足够干净。
最后提醒一点:定期备份裸仓库目录。我直接写了个cron脚本,每三天把/home/git/repos打包存到OSS,省心又安全。
以上就是我搭建VPS Git仓库的全部实操记录。从选服务器(沐雨云)到配置钩子,每一步都亲自验证过,希望能帮你少走弯路。如果有问题,欢迎在评论区留言交流。




这一切,似未曾拥有