Git是Linus Torvalds开发的免费开源版本控制系统。世界各地的数百万开发人员都在使用它。GitHub还提供免费的代码托管服务。但是,免费服务不允许私人托管代码。在这种情况下,您可以使用Git HTTP服务器托管自己的代码托管服务器。这样可以完全控制服务器。
在本教程中,我们将向您展示如何在Ubuntu 20.04上使用Nginx安装和配置Git HTTP服务器。
先决条件
- 运行Ubuntu 20.04的服务器。
- 指向您服务器IP的有效域名。
- 为服务器配置了root密码。
入门
开始之前,建议将您的服务器软件包更新为最新版本。您可以使用以下命令更新它们:
apt-get update -y
更新所有软件包后,即可继续进行下一步。
安装Nginx和Git
接下来,您需要将Nginx Web服务器,Git和其他必需的软件包安装到系统中。您可以使用以下命令安装它们:
apt-get install nginx git fcgiwrap apache2-utils unzip -y
一旦安装了所有软件包,就可以继续进行下一步。
创建一个Git仓库
接下来,您将需要在Nginx Web根目录内创建一个Git存储库。首先,使用以下命令创建一个名为git的目录:
mkdir /var/www/html/git
接下来,将目录更改为git并为Git存储库创建一个新目录:
cd /var/www/html/git
mkdir gituser.git
接下来,切换到这个新目录并使用以下命令初始化Git存储库:
git --bare init
接下来,使用以下命令更新Git Server:
git update-server-info
接下来,使用以下命令在git目录上设置所有权和权限:
chown -R www-data:www-data /var/www/html/git
chmod -R 755 /var/www/html/git
接下来,使用以下命令创建一个新的gituser进行身份验证;
htpasswd -c /var/www/html/git/htpasswd gituser
系统将要求您设置密码,如下所示:
New password: Re-type new password: Adding password for user gituser
现在,您可以使用以下命令来验证密码:
cat /var/www/html/git/htpasswd
您应该获得以下输出:
gituser:$apr1$iPKZDbFB$ziRRbGXzVMMHaPYOtL05m/
为Git配置Nginx
接下来,您将需要配置Nginx来为Git存储库提供服务。您可以使用以下命令为Git创建新的虚拟主机配置文件:
nano /etc/nginx/conf.d/git.conf
添加以下行:
server { listen 80; root /var/www/html/git; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name git.example.com; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location ~ (/.*) { client_max_body_size 0; auth_basic "Git Login"; auth_basic_user_file "/var/www/html/git/htpasswd"; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/www/html/git; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; fastcgi_pass unix:/var/run/fcgiwrap.socket; } }
完成后保存并关闭文件。然后,使用以下命令验证Nginx是否存在语法错误:
nginx -t
您应该获得以下输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
接下来,重新启动Nginx服务以应用更改:
systemctl restart nginx
您还可以使用以下命令来验证Nginx服务的状态:
systemctl status nginx
您应该获得以下输出:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-11-17 07:43:46 UTC; 4s ago Docs: man:nginx(8) Process: 3240 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 3256 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 3257 (nginx) Tasks: 3 (limit: 4691) Memory: 3.5M CGroup: /system.slice/nginx.service ??3257 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??3258 nginx: worker process ??3259 nginx: worker process Nov 17 07:43:46 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server... Nov 17 07:43:46 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.
完成后,您可以继续下一步。
测试HTTP Git服务器
至此,已经安装并配置了Git服务器。现在,该测试一下了。
在客户端计算机上,使用以下命令安装Git软件包:
apt-get install git -y
安装后,使用以下命令创建一个名为myapp的目录:
mkdir myapp
接下来,转到新目录并使用以下命令初始化Git:
cd myapp
git init
接下来,使用以下命令添加远程Git存储库:
git remote add origin http://gituser@git.example.com/gituser.git
接下来,创建app1和app2目录,还创建app1和app2文件,这些目录中包含一些内容:
mkdir app1 app2
echo "This is my first application" > app1/app1
echo "This is my first application" > app2/app2
接下来,使用以下命令将所有目录和文件添加到存储库:
git add .
接下来,使用以下命令提交更改:
git commit -a -m "Add files and directories"
您应该获得以下输出:
[master (root-commit) 4e90372] Add files and directories 2 files changed, 2 insertions(+) create mode 100644 app1/app1 create mode 100644 app2/app2
接下来,使用以下命令将这些更改推送到远程Git服务器:
git push origin master
系统将要求您为远程Git用户提供密码,如下所示:
Password for 'http://gituser@git.example.com':
提供密码,然后按Enter。您应该获得以下输出:
Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (5/5), 354 bytes | 0 bytes/s, done. Total 5 (delta 0), reused 0 (delta 0) To http://gituser@git.example.com/gituser.git * [new branch] master -> master
上面的输出表明您的文件和目录已添加到远程Git存储库。如果要将此存储库克隆到本地系统,请运行以下命令:
git clone http://gituser@git.example.com/gituser.git
您应该获得以下输出:
Cloning into 'gituser'... Password for 'http://gituser@git.example.com': remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (2/2), done. remote: Total 5 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (5/5), done. Checking connectivity... done.