技术教程 · 2020年12月11日 0

如何在Ubuntu 20.04上使用Nginx安装HTTP Git服务器

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.