创建 CA 证书,这里以 self signed 为例 这里创建的是自己签名的 CA 证书,实际上网上也有很多免费的 CA 证书,比如腾讯云的。之所以这里选择自己签名的,是因为大多数情况下这种方法够用(毕竟是自己的服务器,几乎只有自己用),不过,自己签名的 CA 证书在 git clone 的时候可能遇到问题,后面步骤会有解决方案。
我们假设把证书存储在了 /opt/sites_conf 目录中
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /opt/sites_conf/apache.key -out /opt/sites_conf/apache.crt
运行以后,填写方法大概如下:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:这里随便填
Organizational Unit Name (eg, section) []:这里随便填
Common Name (e.g. server FQDN or YOUR name) []:这里一定要填写个人服务器的域名,在本例中,就是 XXXX.YYYYY.CCCCC,如果不一致,后面的 ssl 验证会失败
Email Address []:随便填
Enable apache modules sudo a2enmod cgi alias env rewrite
Listen port 5000 sudo gedit /etc/apache2/ports.conf
在这个文件里面加入一行:
Listen 5000
然后保存退出
Config virtual machine cd /etc/apache2/sites-available
创建新的配置文件并且填入内容:
sudo gedit git_server.conf
填入如下内容
<VirtualHost *:5000>
ServerAdmin you@example.com
ServerName RukaCode
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
SSLEngine on
SSLCertificateFile /opt/sites_conf/apache.crt
SSLCertificateKeyFile /opt/sites_conf/apache.key
DocumentRoot /opt/git
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /opt/sites_conf/htpasswd
Require valid-user
Order deny,allow
Deny from env=AUTHREQUIRED
Satisfy any
</Files>
<Location />
AuthType Basic
AuthName "Git Repositories"
AuthUserFile /opt/sites_conf/htpasswd
Require valid-user
Order allow,deny
Allow from all
</Location>
ScriptAlias / /usr/lib/git-core/git-http-backend/
RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/ - [E=AUTHREQUIRED]
</VirtualHost>
这里的配置阻止了 invalid user 的 clone,并且也阻止了 http 的访问。如果不需要阻止 invalid user 的 clone(比如开源项目),那么可以将 <Location> 那一段去掉。此时 invalid user 可以 clone 但是不能 push。
接着,需要将此配置 link 到 enable 文件夹里面去
cd ../sites-enabled
sudo ln -s ../sites-available/git_server.conf .