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.
Prerequisiti
- Un server che esegue Debian 11.
- Un nome di dominio valido puntato all'IP del tuo server.
- Sul tuo server è configurata una password di root.
Installa 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 principale 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 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/
Quindi, aggiorna le informazioni sul server Git con il seguente comando:
git update-server-info
Quindi, cambia la proprietà di myrepo e imposta l'autorizzazione appropriata 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 utente1 e imposta una password:
htpasswd -c /var/www/html/myrepo/htpasswd user1
Puoi 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
Configura 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 al termine, 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.
Connetti al repository Git dal client
A questo punto, il server HTTP Git è configurato con Nginx. Ora è il momento di collegarlo dal computer 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 HTTP Git 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, salva 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
Successivamente, carica il file e la directory sul server HTTP Git utilizzando il comando seguente:
git push origin master
Ti verrà chiesto di fornire la tua password per accedere al server Git:
Password for 'http://[email protected]':
Una volta connesso, otterrai il seguente output:
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
Puoi anche scaricare il tuo repository direttamente dal server Git usando il seguente comando:
git clone http://[email protected]domain.com/user1.git
Otterrai il seguente output:
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.
Conclusione
Nella guida sopra, 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 usando la riga di comando.