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.