Come installare HTTP Git Server con Nginx su Debian 11

17 dic 2021 5 min di lettura
Come installare HTTP Git Server con Nginx su Debian 11
Indice dei contenuti

Introduzione

Git è un sistema di controllo della versione open source utilizzato da migliaia di sviluppatori in tutto il mondo. Viene utilizzato per tenere traccia delle modifiche al software a livello di origine. Ti consente di tenere traccia delle modifiche, ripristinare le fasi precedenti e creare una versione alternativa di file e directory.

HTTP Git Server è un progetto open source che utilizza un server web Nginx per servire i repository Git sulla tua rete locale (LAN). È molto semplice e facile da configurare. Chiunque può gestirlo dall'interfaccia della riga di comando.

In questo tutorial, spiegherò come configurare un server di repository Git HTTP con Nginx su Debian 11.

Se desideri installare un HTTP Git Server su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh root@IP_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh nome_utente@IP_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh nome_utente@IP_DEL_SERVER -p PORTA

Prerequisiti

  • Un server che esegue Debian 11.
  • Un nome di dominio valido puntato con l'IP del tuo server.
  • Una password di root è configurata sul tuo server.

Installare Nginx e altre dipendenze

Innanzitutto, dovrai installare il server web Nginx e altri pacchetti richiesti per configurare un server HTTP Git. Puoi installarli tutti usando il seguente comando:

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

Una volta installati tutti i pacchetti, puoi procedere al passaggio successivo.

Crea un repository Git

Successivamente, dovrai creare una directory per archiviare il repository Git. Creiamo una directory chiamata myrepo all'interno della directory radice web di Nginx:

mkdir /var/www/html/myrepo

Quindi, cambia la directory in myrepo e crea un'altra directory per gli utenti:

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

Quindi, vai alla directory dell'utente e inizializza il repository Git usando il seguente comando:

cd user1.git 
git --bare init

Otterrai il seguente output:

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

Successivamente, aggiorna le informazioni del server Git con il seguente comando:

git update-server-info

Successivamente, cambia la proprietà di myrepo e imposta i permessi appropriati con il seguente comando:

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

Quindi, crea un utente chiamato user1 e imposta una password:

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

È possibile impostare la password come mostrato di seguito:

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

Puoi controllare la tua password usando il seguente comando:

cat /var/www/html/myrepo/htpasswd

Esempio di output:

user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Configurare Nginx per servire il repository Git

Successivamente, dovrai creare un file di configurazione dell'host virtuale Nginx per servire il repository Git.

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

Aggiungi le seguenti righe:

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

}

Salva e chiudi il file quando hai finito, quindi verifica Nginx per eventuali errori di sintassi:

nginx -t

Otterrai il seguente output:

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

Infine, riavvia il servizio Nginx per applicare le modifiche:

systemctl restart nginx

Puoi anche controllare lo stato di Nginx usando il seguente comando:

systemctl status nginx

Otterrai il seguente output:

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

Connettersi al repository Git dal client

A questo punto, il server Git HTTP è configurato con Nginx. Ora è il momento di connetterlo dalla macchina client e testarlo.

Innanzitutto, installa il pacchetto Git sul computer client utilizzando il seguente comando:

apt-get install git -y

Quindi, crea una directory per il tuo progetto con il seguente comando:

mkdir project

Quindi, vai alla directory del tuo progetto e inizializza Git usando il comando seguente:

cd project
git init

Quindi, configura Git usando la tua email e il tuo nome utente:

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

Quindi, aggiungi il tuo server Git HTTP usando il seguente comando:

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

Quindi, crea una directory chiamata dev01 e aggiungi un file al suo interno:

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

Quindi, aggiungi la directory e il file creati al repository Git:

git add .

Quindi, conferma le modifiche con il seguente comando:

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

Otterrai il seguente output:

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

Quindi, carica il tuo file e la tua directory sul server HTTP Git usando il seguente comando:

git push origin master

Ti verrà chiesto di fornire la tua password per accedere al server Git:

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

Una volta connesso, otterrai il seguente output:

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

Puoi anche scaricare il tuo repository direttamente dal server Git utilizzando il seguente comando:

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.

Otterrai il seguente output:

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

Conclusione

In questo tutorial hai imparato come configurare un server HTTP Git con Nginx su Debian 11. Ora puoi implementare questa configurazione nel tuo ambiente di sviluppo locale e gestire e tenere traccia del tuo progetto utilizzando la riga di comando.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.