如果我们需要在多台机器之间同步我们的工作内容,把
Git 仓库放到服务端会方便很多。最简单的 Git
服务器是直接通过 SSH
访问存放在服务端文件系统某个目录下的裸仓库,不需要配置任何东西。这种方法虽然简单高效,但也有其局限性。如果你不希望公开
SSH 权限,或者存在网络访问限制的话,有时候通过
HTTPS 访问 Git 仓库有它的优势所在。HTTPS
访问不仅可以绕过某些网络限制,还能提供更高的安全性和灵活性,适用于更多的使用场景。以下是具体的步骤:
1 创建 Git 仓库根目录
首先,在 /srv
目录下创建 Git
仓库根目录。然后,修改目录权限,以便让 Apache2
运行所使用的 www-data
用户完全控制该目录:接下来,在仓库目录下创建一个测试用的裸仓库(例如名为
sandbox.git
):
sudo mkdir /srv/git
sudo chown www-data:www-data /srv/git
sudo -u www-data git init --bare --initial-branch=main /srv/git/sandbox.git
2 配置 DNS 启用 git 二级域名
登录域名提供商网站,为 git.
二级域名添加 A
记录和 AAAA 记录,指向服务器 IP 地址。
3 添加 Virtual Host
接下来,我们在服务器上为这个域名添加 Virtual
Host。到 /etc/apache2/sites-available
目录下创建新文件 005-git.conf
,内容如下:
<Directory "/srv/git">
Options +ExecCGI +Indexes +SymLinksIfOwnerMatch
AllowOverride None
Require all granted
</Directory>
<VirtualHost *:80>
ServerName git.yourserver.name
ServerAdmin root@yourserver.name
ErrorLog ${APACHE_LOG_DIR}/error-git.log
CustomLog ${APACHE_LOG_DIR}/access-git.log combined
ScriptAlias / /usr/lib/git-core/git-http-backend/
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require valid-user
</Files>
</VirtualHost>
4 创建 HTTP 用户名和密码
运行以下命令创建用户名和密码:
sudo -u www-data htpasswd -c /srv/git/.htpasswd 用户名
回车后会提问密码并要求重复密码,输入密码的时候屏幕上不会回显。
注意:只有第一次创建文件时需要使用 -c
参数,之后如果想添加用户,不要加
-c
,否则会清空已有文件。
5 启用新创建的虚拟站点
配置完毕之后我们重启 Apache2 服务器:
sudo a2ensite 005-git
sudo systemctl restart apache
6 测试
在本地机器上运行
Git
应该提示输入用户名密码。使用之前创建的用户名密码登录后,应该能正常签出代码。在签出的目录下进行一些修改,提交后测试
git push
是否正常工作。为了减少输入用户名密码的次数,建议运行
git config --global credential.helper cache
,这样输入过一次密码之后的
15 分钟内不需要再次输入密码。
7 添加 SSL 证书
如果你使用
Let’s
Encrypt 提供的 SSL 证书,运行
sudo certbot
,根据提示更新 SSL
证书。然后在本地机器上重新测试使用 HTTPS 签出代码:
8 完成
今后创建新的 git 仓库时,运行命令:
sudo -u www-data git init --bare --initial-branch=main /srv/git/仓库名.git