Installation von HTTP Git Server mit Nginx unter Debian 11

Git ist ein Open-Source-Versionskontrollsystem, das von Tausenden von Entwicklern auf der ganzen Welt genutzt wird. Es wird verwendet, um Änderungen an deiner Software auf der Quellcode-Ebene zu verfolgen. Mit Git kannst du Änderungen nachverfolgen, zu einem früheren Stand zurückkehren und eine alternative Version von Dateien und Verzeichnissen erstellen.

HTTP Git Server ist ein Open-Source-Projekt, das einen Nginx-Webserver verwendet, um Git-Repositories über dein lokales Netzwerk (LAN) bereitzustellen. Er ist sehr einfach und leicht einzurichten. Jeder kann ihn über die Befehlszeilenschnittstelle verwalten.

In dieser Anleitung erkläre ich dir, wie du einen HTTP-Git-Repository-Server mit Nginx unter Debian 11 einrichtest.

Voraussetzungen

  • Ein Server, auf dem Debian 11 läuft.
  • Ein gültiger Domainname, der auf die IP deines Servers zeigt.
  • Ein Root-Passwort ist auf deinem Server eingerichtet.

Nginx und andere Abhängigkeiten installieren

Zuerst musst du den Nginx-Webserver und andere erforderliche Pakete installieren, um einen HTTP-Git-Server einzurichten. Du kannst sie alle mit dem folgenden Befehl installieren:

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

Sobald alle Pakete installiert sind, kannst du mit dem nächsten Schritt fortfahren.

Ein Git-Repository erstellen

Als Nächstes musst du ein Verzeichnis erstellen, in dem das Git-Repository gespeichert wird. Legen wir ein Verzeichnis namens myrepo innerhalb des Nginx-Web-Root-Verzeichnisses an:

mkdir /var/www/html/myrepo

Als Nächstes änderst du das Verzeichnis in myrepo und erstellst ein weiteres Verzeichnis für die Benutzer:

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

Als Nächstes navigierst du zum Benutzerverzeichnis und initialisierst das Git-Repository mit dem folgenden Befehl:

cd user1.git
git --bare init

Du erhältst die folgende Ausgabe:

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

Als Nächstes aktualisierst du die Git-Serverinformationen mit folgendem Befehl:

git update-server-info

Ändere als Nächstes die Eigentümerschaft von myrepo und setze die entsprechenden Rechte mit dem folgenden Befehl:

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

Als Nächstes erstellst du einen Benutzer namens user1 und legst ein Passwort fest:

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

Du kannst das Passwort wie unten gezeigt festlegen:

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

Du kannst dein Passwort mit folgendem Befehl überprüfen:

cat /var/www/html/myrepo/htpasswd

Beispielhafte Ausgabe:

user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Nginx für die Bereitstellung des Git-Repositorys konfigurieren

Als Nächstes musst du eine Konfigurationsdatei für den virtuellen Nginx-Host erstellen, um das Git-Repository zu bedienen.

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

Füge die folgenden Zeilen hinzu:

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;
}

}

Speichere und schließe die Datei, wenn du fertig bist, und überprüfe Nginx auf Syntaxfehler:

nginx -t

Du wirst die folgende Ausgabe erhalten:

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

Starte abschließend den Nginx-Dienst neu, um die Änderungen zu übernehmen:

systemctl restart nginx

Du kannst den Nginx-Status auch mit dem folgenden Befehl überprüfen:

systemctl status nginx

Du erhältst die folgende Ausgabe:

? 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.

Vom Client aus mit dem Git-Repository verbinden

Jetzt ist der Git-HTTP-Server mit Nginx eingerichtet. Nun ist es an der Zeit, ihn vom Client-Rechner aus zu verbinden und zu testen.

Installiere zunächst das Git-Paket auf dem Client-Rechner mit dem folgenden Befehl:

apt-get install git -y

Als Nächstes erstellst du mit dem folgenden Befehl ein Verzeichnis für dein Projekt:

mkdir project

Navigiere dann zu deinem Projektverzeichnis und initialisiere Git mit dem folgenden Befehl:

cd project
git init

Als Nächstes konfigurierst du Git mit deiner E-Mail und deinem Benutzernamen:

git config --global user.email "user1@yourdomain.com"
git config --global user.name "user1"

Als Nächstes fügst du deinen Git-HTTP-Server mit dem folgenden Befehl hinzu:

git remote add origin http://user1@git.yourdomain.com/user1.git

Als Nächstes erstellst du ein Verzeichnis namens dev01 und fügst darin eine Datei hinzu:

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

Als Nächstes fügst du das erstellte Verzeichnis und die Datei zum Git-Repository hinzu:

git add .

Als Nächstes übergibst du die Änderungen mit dem folgenden Befehl:

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

Du erhältst die folgende Ausgabe:

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

Als Nächstes lädst du deine Datei und das Verzeichnis mit folgendem Befehl auf den HTTP-Git-Server hoch:

git push origin master

Du wirst aufgefordert, dein Passwort einzugeben, um auf den Git-Server zuzugreifen:

Password for 'http://user1@git.yourdomain.com': 

Sobald du verbunden bist, erhältst du die folgende Ausgabe:

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

Du kannst dein Repository auch direkt vom Git-Server herunterladen, indem du folgenden Befehl verwendest:

git clone http://user1@git.yourdomain.com/user1.git

Du erhältst die folgende Ausgabe:

Cloning into 'user1'...
Password for 'http://user1@git.yourdomain.com': 
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.

Fazit

In der obigen Anleitung hast du gelernt, wie du einen HTTP-Git-Server mit Nginx unter Debian 11 einrichtest. Jetzt kannst du diese Einrichtung in deiner lokalen Entwicklungsumgebung umsetzen und dein Projekt über die Kommandozeile verwalten und verfolgen.

Das könnte dich auch interessieren …