Git è un sistema di controllo delle versioni gratuito e open source sviluppato da Linus Torvalds. È utilizzato da milioni di sviluppatori in tutto il mondo. GitHub offre anche un servizio di hosting di codice gratuito. Tuttavia, il servizio gratuito non consente l'hosting privato del codice. In questo caso, puoi ospitare il tuo server di hosting di codice con il server HTTP Git. Questo ti darà il pieno controllo sul server.
In questo tutorial, ti mostreremo come installare e configurare il server HTTP Git con Nginx su Ubuntu 20.04.
Prerequisiti
- Un server che esegue Ubuntu 20.04.
- Nome di dominio valido puntato con l'IP del tuo server.
- Una password di root è configurata sul server.
Per iniziare
Prima di iniziare, si consiglia di aggiornare i pacchetti del server all'ultima versione. Puoi aggiornarli con il seguente comando:
apt-get update -y
Una volta aggiornati tutti i pacchetti, puoi procedere al passaggio successivo.
Installa Nginx e Git
Successivamente, dovrai installare il server web Nginx, Git e altri pacchetti richiesti sul tuo sistema. Puoi installarli con 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 un repository Git all'interno della directory principale web di Nginx. Innanzitutto, crea una directory denominata git con il seguente comando:
mkdir /var/www/html/git
Quindi, cambia la directory in git e crea una nuova directory per il repository Git:
cd /var/www/html/git
mkdir gituser.git
Quindi, cambia in questa nuova directory e inizializza il repository Git con il comando:
git --bare init
Quindi, aggiorna Git Server con il comando:
git update-server-info
Quindi, imposta la proprietà e l'autorizzazione sulla directory git con il seguente comando:
chown -R www-data:www-data /var/www/html/git
chmod -R 755 /var/www/html/git
Quindi, crea un nuovo gituser per l'autenticazione con il seguente comando;
htpasswd -c /var/www/html/git/htpasswd gituser
Ti verrà chiesto di impostare una password come mostrato di seguito:
New password: Re-type new password: Adding password for user gituser
Ora puoi verificare la tua password usando il seguente comando:
cat /var/www/html/git/htpasswd
Dovresti ottenere il seguente output:
gituser:$apr1$iPKZDbFB$ziRRbGXzVMMHaPYOtL05m/
Configura Nginx per Git
Successivamente, dovrai configurare Nginx per servire il repository Git. Puoi creare un nuovo file di configurazione dell'host virtuale per Git con il seguente comando:
nano /etc/nginx/conf.d/git.conf
Aggiungi le seguenti righe:
server { listen 80; root /var/www/html/git; # 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/git/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/git; 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 con il seguente comando:
nginx -t
Dovresti ottenere il seguente output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Quindi, riavvia il servizio Nginx per applicare le modifiche:
systemctl restart nginx
Puoi anche verificare lo stato del servizio Nginx usando il seguente comando:
systemctl status nginx
Dovresti ottenere 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 Tue 2020-11-17 07:43:46 UTC; 4s ago Docs: man:nginx(8) Process: 3240 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 3256 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 3257 (nginx) Tasks: 3 (limit: 4691) Memory: 3.5M CGroup: /system.slice/nginx.service ??3257 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??3258 nginx: worker process ??3259 nginx: worker process Nov 17 07:43:46 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server... Nov 17 07:43:46 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.
Una volta terminato, puoi procedere al passaggio successivo.
Test del server HTTP Git
A questo punto, il server Git è installato e configurato. Ora è il momento di testarlo.
Sul computer client, installa il pacchetto Git con il seguente comando:
apt-get install git -y
Una volta installato, crea una directory denominata myapp con il seguente comando:
mkdir myapp
Quindi, passa alla nuova directory e inizializza Git con il seguente comando:
cd myapp
git init
Quindi, aggiungi il tuo repository Git remoto con il seguente comando:
git remote add origin http://[email protected]/gituser.git
Quindi, crea le directory app1 e app2 e crea anche file app1 e app2 con alcuni contenuti all'interno di quelle directory:
mkdir app1 app2
echo "This is my first application" > app1/app1
echo "This is my first application" > app2/app2
Quindi, aggiungi tutte le directory e i file al repository con il seguente comando:
git add .
Quindi, salva le modifiche con il seguente comando:
git commit -a -m "Add files and directories"
Dovresti ottenere il seguente output:
[master (root-commit) 4e90372] Add files and directories 2 files changed, 2 insertions(+) create mode 100644 app1/app1 create mode 100644 app2/app2
Quindi, invia queste modifiche al server Git remoto con il seguente comando:
git push origin master
Ti verrà chiesto di fornire una password per l'utente Git remoto come mostrato di seguito:
Password for 'http://[email protected]':
Fornisci la tua password e premi Invio. Dovresti ottenere il seguente output:
Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (5/5), 354 bytes | 0 bytes/s, done. Total 5 (delta 0), reused 0 (delta 0) To http://[email protected]/gituser.git * [new branch] master -> master
L'output sopra indica che i tuoi file e directory sono stati aggiunti al repository Git remoto. Se vuoi clonare questo repository sul tuo sistema locale, esegui il seguente comando:
git clone http://[email protected]/gituser.git
Dovresti ottenere il seguente output:
Cloning into 'gituser'... Password for 'http://[email protected]': remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (2/2), done. remote: Total 5 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (5/5), done. Checking connectivity... done.
Conclusione
Congratulazioni! hai installato e configurato correttamente il server HTTP Git sul server Ubuntu 20.04. Ora puoi implementare il server Git nel tuo ambiente di sviluppo accessibile dalla tua LAN.