Installazione
Installo sul server il pacchetto git e creo il relativo utente con homedirectory nella cartella /var/git/ poi attribuisco una password:
apt install git
useradd -m git -d /var/git -s /bin/bash
passwd gitCreazione repository
Sul server
Dopo essermi loggato tramite ssh:
su -l git
git config --global init.defaultBranch main # necessario per chiamare 'main' il branch
git init --bare 'repo-name'.gitContinuo copiando le chiavi SSH in modo da potermi connettere senza digitazione della password:
mkdir /var/git/.ssh # Create the required directory.
cp ~/.ssh/authorized_keys /var/git/.ssh/ # Copy over the authorized key.
chown git:git -R /var/git/.ssh # Make the created directory and contents to be owned by the git user.Sul computer locale
cd 'path-to-repo'
git init
git remote add origin git@massimo-fontana.net:'repo-name'.git
git add .
git commit -m "First commit"
git push origin mainCgit
Installazione componenti
apt install cgit
apt install fcgiwrap
apt install python3-markdownIl pacchetto python3-mardown serve a mostrare correttamente il file README.md all’interno di una repository nella sezione about.
Impostazione pagina webserver
Creo il file /etc/nginx/sites-available/git inserendo il seguente codice:
server {
listen 80 ;
listen [::]:80 ;
server_name git.massimo-fontana.net ;
root /usr/share/cgit;
try_files $uri @cgit ;
location ~ /.+/(info/refs|git-upload-pack) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param PATH_INFO $uri;
fastcgi_param GIT_HTTP_EXPORT_ALL 1;
fastcgi_param GIT_PROJECT_ROOT /var/git;
fastcgi_param HOME /var/git;
fastcgi_pass unix:/run/fcgiwrap.socket;
}
location @cgit {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
fastcgi_param HTTP_HOST $server_name;
fastcgi_pass unix:/run/fcgiwrap.socket;
}
}Attivo il webserver ed aggiungo la protezione ssl:
ln -s /etc/nginx/sites-available/git /etc/nginx/sites-enabled/
systemctl reload nginx.service
certbot --nginx
systemctl reload nginx.serviceConfigurazione Cgit
Faccio la copia di backup del file /etc/cgitrc e lo sostituisco con il seguente contenuto:
# cgit config
# see cgitrc(5) for details
css=/cgit.css
logo=/cgit.png
virtual-root=/
clone-prefix=https://git.massimo-fontana.net
# Title and description shown on top of each page
root-title=MyGit server
root-desc=Max's git repositories, powered by Cgit
# About page
about-filter=/usr/lib/cgit/filters/about-formatting.sh
readme=:README.md
# If you do not want that webcrawler (like google) index your site
robots=noindex, nofollow
# The location where git repos are stored on the server
scan-path=/var/git/Per determinare come proprietazio dei repository il sottoscritto imposto il nome dell’utente git:
usermod -c "Max" gitInfine, per poter visualizzare nella repository a quando risale l’aggiornamento del file, devo inserire il seguente file all’interno di ogni repository creata con il nome di /var/git/repo-name/hooks/post-receive e con il seguente contenuto:
#!/bin/sh
agefile="$(git rev-parse --git-dir)"/info/web/last-modified
mkdir -p "$(dirname "$agefile")" &&
git for-each-ref \
--sort=-authordate --count=1 \
--format='%(authordate:iso8601)' \
>"$agefile"Attribuendo il necessario permesso di esecuzione:
chmod +x /var/git/repo-name/hooks/post-receive