HTTP Git Server mit Nginx und SSL unter Ubuntu 22.04 installieren

Git ist ein Open-Source-Versionskontrollsystem, mit dem du Änderungen an deiner Software auf Quellcode-Ebene verfolgen kannst. Es wird von Tausenden von Entwicklern auf der ganzen Welt genutzt, um ihre Codeänderungen zu verfolgen und zu verwalten, zu früheren Versionen zurückzukehren und eine alternative Version von Dateien und Verzeichnissen zu erstellen.

HTTP Git Server ist ein Open-Source-Projekt, mit dem du die Git-Repositories über dein lokales Netzwerk (LAN) gemeinsam nutzen kannst. Er ist sehr einfach und leicht einzurichten und hilft Entwicklern dabei, ihn über die Kommandozeile zu verwalten.

In diesem Lernprogramm wird die Einrichtung eines HTTP-Git-Repository-Servers mit Nginx unter Ubuntu 22.04 erklärt.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 22.04 läuft.
  • Ein gültiger Domainname ist auf die IP deines Servers verweist.
  • Ein Root-Passwort ist auf deinem Server konfiguriert.

Nginx Webserver installieren

In diesem Beitrag werden wir den Nginx-Server verwenden, um das Git-Repository bereitzustellen. Daher musst du den Nginx-Webserver und andere erforderliche Pakete auf deinem Server installieren. Du kannst alle Pakete mit dem folgenden Befehl installieren:

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

Nachdem du alle Pakete installiert hast, kannst du ein Git-Repository erstellen.

Ein Git-Repository erstellen

Lege zunächst ein Verzeichnis für das Git-Repository im Nginx-Web-Root an:

mkdir /var/www/html/gitrepo

Als Nächstes navigierst du zum Git-Repository und erstellst ein weiteres Verzeichnis für den Benutzer:

cd /var/www/html/gitrepo
mkdir hitesh.git

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

cd hitesh.git
git --bare init

Du erhältst die folgende Ausgabe:

Initialized empty Git repository in /var/www/html/gitrepo/hitesh.git/

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

git update-server-info

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

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

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

htpasswd -c /var/www/html/gitrepo/htpasswd hitesh

Du kannst das Passwort wie unten gezeigt festlegen:

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

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

cat /var/www/html/gitrepo/htpasswd

Beispielhafte Ausgabe:

hitesh:$vcr2$AdyCEkaA$Fsq5nDbLhBDdafCQGBUsr2

Nginx für die Bereitstellung des Git-Repositorys konfigurieren

Als Nächstes erstellst du eine Konfigurationsdatei für den virtuellen Nginx-Host, um das Git-Repository über das Internet bereitzustellen.

nano /etc/nginx/conf.d/gitrepo.conf

Füge die folgenden Konfigurationen hinzu:

server {
        listen 80;

        root /var/www/html/gitrepo;

        # 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/gitrepo/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/gitrepo;
    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 mit folgendem Befehl auf Syntaxfehler:

nginx -t

Du erhältst die folgende Ausgabe:

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 2022-11-05 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

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

Git HTTP Server mit Let’s Encrypt sichern

Bevor du beginnst, musst du den Certbot-Client in deinem System installieren, um Let’s Encrypt SSL zu installieren und zu verwalten. Du kannst ihn mit dem folgenden Befehl installieren:

apt-get install certbot python3-certbot-nginx -y

Sobald der Certbot-Client installiert ist, führe den folgenden Befehl aus, um Let’s Encrypt SSL für deine Website herunterzuladen und zu installieren:

certbot --nginx -d git.example.com

Gib deine E-Mail-Adresse an und akzeptiere die Nutzungsbedingungen wie unten gezeigt:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): hitjethva@gmail.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for git.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/git.conf

Wähle aus, ob der HTTP-Verkehr auf HTTPS umgeleitet werden soll oder nicht:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Gib 2 ein und drücke die Eingabetaste, um den Vorgang zu starten. Sobald die Installation abgeschlossen ist, solltest du die folgende Ausgabe sehen:

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/git.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://git.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=git.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/git.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/git.example.com/privkey.pem
   Your cert will expire on 2023-02-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Jetzt ist dein Git-HTTP-Server mit Let’s Encrypt SSL gesichert.

Vom Client aus mit dem Git-Repository verbinden

Jetzt ist der Git-HTTP-Server mit Nginx und Let’s Encrypt SSL eingerichtet. Jetzt 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 "hitesh@example.com"
git config --global user.name "hitesh"

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

git remote add origin https://hitesh@git.example.com/hitesh.git

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

mkdir data
echo "This is my first application" > data/app

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 data/app

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 'https://hitesh@git.example.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 https://git.example.com/hitesh.git
 * [new branch]      master -> master

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

git clone https://hitesh@git.example.com/hitesh.git

Du erhältst die folgende Ausgabe:

Cloning into 'hitesh'...
Password for 'https://hitesh@git.example.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

Glückwunsch! Du hast erfolgreich einen HTTP-Git-Server mit Nginx auf Ubuntu 22.04 eingerichtet. Über die Kommandozeile kannst du nun den Git-HTTP-Server in deiner lokalen Entwicklungsumgebung nutzen, um dein Projekt zu verwalten und zu verfolgen.

Das könnte dich auch interessieren …