私有Git仓库存储建站脚本与中转配置完全指南
私有Git仓库存储建站脚本与中转配置,本质是在自己的服务器上搭建一个只能由你控制的Git服务,然后将网站部署脚本、配置文件等敏感代码提交到这个仓库,再通过SSH隧道或代理服务器(中转)实现从本地开发机或内网机器拉取更新。
这样做的好处是脚本不经过第三方平台,保密性强,且避免因公有仓库服务商故障导致的部署中断。
以下适合使用云服务器存放Git仓库,再通过SSH跳板机或反向代理穿透内网的场景。
什么时候需要私有仓库和中转配置
当你需要在多台服务器(包括无公网IP的内网机器)上统一管理建站脚本,或者不想让脚本出现在GitHub等公共平台时,私有仓库是最直接的选择。
而中转配置主要解决网络可达性问题:比如你的Git仓库在阿里云,而目标服务器在腾讯云内网且只能通过跳板机连接,就需要配置SSH代理访问Git仓库。
前置准备
- 一台公网服务器(用作Git仓库),系统推荐Ubuntu 20.04+/CentOS 7+。
- 本地电脑或中转服务器上安装Git(
sudo apt install git或yum install git)。 - 需要中转的服务器上配置好SSH密钥并允许通过跳板机连接。
- 关闭服务端防火墙或放行对应端口(默认SSH 22,如使用Gitea则3000端口)。
操作步骤:搭建私有Git仓库并配置中转
1. 在公网服务器上创建裸仓库
裸仓库没有工作区,只保存版本历史,专门用来push/pull。
登录服务器:
mkdir -p /data/git-repos && cd /data/git-repos
git init --bare web-scripts.git
这一步会创建一个空仓库,路径记好。
2. 配置SSH密钥认证(无密码登录)
为了安全,推荐使用密钥登录。
首先在本地或中转服务器生成密钥(如果已有则跳过):
ssh-keygen -t rsa -b 4096 -C "deploy"
将公钥(~/.ssh/id_rsa.pub)追加到Git仓库服务器的 ~/.ssh/authorized_keys 文件:
cat id_rsa.pub >> ~/.ssh/authorized_keys
并确保 .ssh 权限为700,authorized_keys 权限为600。
3. 推送建站脚本到私有仓库
在本地的网站项目文件夹内初始化Git并添加远程地址(注意替换为服务器的公网IP):
git init
git add .
git commit -m "初始提交"
git remote add origin ssh://root@你的服务器IP:/data/git-repos/web-scripts.git
git push origin master
推送成功后,你的建站脚本就安全存储在了私有仓库中。
4. 配置SSH中转访问
场景:你需要从内网服务器拉取脚本,该服务器只能通过跳板机连接公网。
在目标服务器上编辑SSH配置文件 ~/.ssh/config:
Host jump
HostName 跳板机IP
User root
IdentityFile ~/.ssh/id_rsa
Host git-server
HostName 你的服务器IP
User root
ProxyJump jump
然后直接克隆:
git clone git-server:/data/git-repos/web-scripts.git
SSH会自动通过跳板机中转连接Git仓库。
如果使用Gitea等Web管理工具,中转配置相同,端口需改为3000(在config里加Port)。
5. (可选)配置自动部署
私有仓库搭配Webhook可实现push后自动拉取脚本并重启服务。
在服务器上写一个简单的脚本 /usr/local/bin/deploy.sh:
#!/bin/bash
cd /var/www/html
git pull origin master
exit 0
然后通过Gitea的Webhook或系统定时任务触发执行。
避坑指南
- SSH权限拒绝:检查authorized_keys是否写错了换行或权限。可用
ssh -v root@服务器调试。 - 中转连接超时:跳板机的SSH配置中加上
ServerAliveInterval 60防止断开。 - 仓库权限:建议为Git仓库单独创建一个系统用户(例如git),避免直接用root。
- HTTPS中转:如果公司防火墙只允许HTTPS,可以配置Nginx反向代理Git仓库的HTTP端口(如Gitea),但SSH更稳定。
效果验证
在任何一台配置好中转的机器上执行 git pull,如果能正常拉取最新脚本,说明私有仓库和中转配置全部成功。
进一步验证:在本地修改一个文件并push,再在目标服务器pull,看到变化即正常。
常见问题
Q1:为什么我用git clone时报Permission denied (publickey)?
A:公钥未正确添加或权限不对。重新检查服务器上authorized_keys文件,确保包含你的公钥且~/.ssh目录权限为700。
Q2:内网服务器没有公网IP,还能用私有Git仓库吗?
A:可以。通过SSH隧道或搭建frp内网穿透,将仓库端口映射到公网,中转服务器只需安装frp客户端即可。
Q3:中转配置中ProxyJump命令找不到?
A:较早的OpenSSH版本不支持ProxyJump,可以改用-J参数或使用nc命令实现:ProxyCommand ssh jump nc %h %p。
Q4:私有仓库的脚本如何自动部署到多台服务器?
A:每台目标服务器配置相同的中转SSH并执行git pull,或者使用Ansible等工具批量拉取。另外Gitea支持Webhook触发的post-receive钩子。