een HTTP Git Server installeren met Nginx op Debian 11

Git is een open-source versiebeheersysteem dat door duizenden ontwikkelaars over de hele wereld gebruikt wordt. Het wordt gebruikt om je software wijzigingen op bronniveau bij te houden. Het stelt je in staat veranderingen bij te houden, terug te draaien naar vorige stadia en een alternatieve versie van bestanden en mappen te maken.

HTTP Git Server is een open-source project dat een Nginx webserver gebruikt om Git repositories over je Local Area Network (LAN) te serveren. Het is heel eenvoudig en gemakkelijk in te stellen. Iedereen kan hem beheren vanaf de command-line interface.

In deze handleiding leg ik uit hoe je een HTTP Git repository server met Nginx op Debian 11 kunt opzetten.

Vereisten

  • Een server met Debian 11.
  • Een geldige domeinnaam die wijst naar het IP van je server.
  • Een root wachtwoord is op je server ingesteld.

Installeer Nginx en andere afhankelijkheden

Eerst moet je de Nginx webserver installeren en andere vereiste pakketten om een HTTP Git server op te zetten. Je kunt ze allemaal installeren met het volgende commando:

apt-get install nginx git fcgiwrap apache2-utils unzip -y

Als alle pakketten geïnstalleerd zijn, kun je verder gaan met de volgende stap.

Maak een Git Repository

Vervolgens moet je een map maken om de Git repository in op te slaan. Laten we een directory met de naam myrepo aanmaken binnen de Nginx web root directory:

mkdir /var/www/html/myrepo

Verander vervolgens de directory in myrepo en maak een andere directory voor gebruikers:

cd /var/www/html/myrepo
mkdir user1.git

Navigeer vervolgens naar de gebruikersmap en initialiseer de Git repository met het volgende commando:

cd user1.git
git --bare init

Je krijgt de volgende uitvoer:

Initialized empty Git repository in /var/www/html/myrepo/user1.git/

Werk vervolgens de Git server informatie bij met het volgende commando:

git update-server-info

Verander vervolgens het eigendom van myrepo en stel de juiste toestemming in met het volgende commando:

chown -R www-data:www-data /var/www/html/myrepo
chmod -R 755 /var/www/html/myrepo

Maak vervolgens een gebruiker aan met de naam user1 en stel een wachtwoord in:

htpasswd -c /var/www/html/myrepo/htpasswd user1

Je kunt het wachtwoord instellen zoals hieronder:

New password: 
Re-type new password: 
Adding password for user user1

Je kunt het wachtwoord controleren met het volgende commando:

cat /var/www/html/myrepo/htpasswd

Voorbeeld uitvoer:

user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Nginx configureren om Git Repository te serveren

Vervolgens moet je een Nginx virtual host configuratiebestand maken om Git repository te serveren.

nano /etc/nginx/conf.d/git.conf

Voeg de volgende regels toe:

server {
        listen 80;

        root /var/www/html/myrepo;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name git.yourdomain.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/myrepo/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/myrepo;
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param PATH_INFO $1; 
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
}

}

Sla het bestand op en sluit het als je klaar bent, controleer Nginx dan op eventuele syntaxfouten:

nginx -t

Je krijgt de volgende uitvoer:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Herstart tenslotte de Nginx dienst om de veranderingen toe te passen:

systemctl restart nginx

Je kunt ook de Nginx status controleren met het volgende commando:

systemctl status nginx

Je krijgt de volgende uitvoer:

? 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 Sat 2021-12-11 08:00:04 UTC; 2s ago
       Docs: man:nginx(8)
    Process: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 144986 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 144987 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.5M
        CPU: 42ms
     CGroup: /system.slice/nginx.service
             ??144987 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??144988 nginx: worker process

Dec 11 08:00:04 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 11 08:00:04 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 11 08:00:04 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

Verbind met Git Repository vanaf de client

Op dit punt is de Git HTTP server met Nginx ingesteld. Nu is het tijd om hem vanaf de cliënt machine te verbinden en te testen.

Installeer eerst het Git pakket op de cliënt machine met het volgende commando:

apt-get install git -y

Maak vervolgens een directory voor je project met het volgende commando:

mkdir project

Navigeer vervolgens naar je project map en initialiseer de Git met het onderstaande commando:

cd project
git init

Configureer vervolgens Git met je e-mail en gebruikersnaam:

git config --global user.email "[email protected]"
git config --global user.name "user1"

Voeg vervolgens je Git HTTP server toe met het volgende commando:

git remote add origin http://[email protected]/user1.git

Maak vervolgens een directory met de naam dev01 en voeg er een bestand in toe:

mkdir dev01
echo "This is my first application" > dev01/file1

Voeg vervolgens je gemaakte directory en bestand toe aan de Git repository:

git add .

Daarna commit je de veranderingen met het volgende commando:

git commit -a -m "Add files and directories"

Je krijgt de volgende uitvoer:

[master (root-commit) 0299d83] Add files and directories
 1 file changed, 1 insertion(+)
 create mode 100644 dev01/file1

Upload vervolgens je bestand en map naar de HTTP Git server met het volgende commando:

git push origin master

Je wordt gevraagd je wachtwoord op te geven om toegang te krijgen tot de Git server:

Password for 'http://[email protected]': 

Zodra je verbonden bent, krijg je de volgende uitvoer:

Counting objects: 4, done.
Writing objects: 100% (4/4), 281 bytes | 281.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To http://git.yourdomain.com/user1.git
 * [new branch]      master -> master

Je kunt je repository ook direct van de Git server downloaden met het volgende commando:

git clone http://[email protected]/user1.git

Je krijgt de volgende uitvoer:

Cloning into 'user1'...
Password for 'http://[email protected]': 
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.

Conclusie

In de bovenstaande gids heb je geleerd hoe je een HTTP Git server kunt opzetten met Nginx op Debian 11. Je kunt deze opzet nu implementeren in je lokale ontwikkelomgeving en je project beheren en volgen met de commandoregel.