meta données pour cette page
Héberger ses dépôts Git avec Cgit
L'application cgit est un front-end écrit en C accessible via navigateur web. Il apporte l'avantage d'avoir un dépôt lisible dont son accès est rapide et s'utilise sans base de donnée vu qu'il se contente de lire les références inclus directement dans les dépôts.
Pré-requis
Voici la liste des paquets que nous allons avoir besoin :
apt install apache2-utils fcgiwrap git-core nginx cgit
Configuration de cgit
Commençons par copier les fichier sources :
mkdir -vp /var/www/html/cgit/ mv /usr/share/cgit/* /var/www/html/cgit/
Nous pouvons maintenant configurer Cgit avec par exemple les paramètres suivants :
nano /etc/cgitrc
- cgitrc
# see cgitrc(5) for details # définition du design css=/cgit.css logo=/cgit.png virtual-root=/ scan-path=/var/www/html/cgit/ root-title=My Git repositories root-desc=Git repositories navigation root-readme=/var/www/html/cgit/cgit-about.md # Configuration d'options de base enable-index-links=1 enable-commit-graph=1 enable-log-filecount=1 enable-log-linecount=1 side-by-side-diffs=1 # Je ne souhaite pas que les robots puissent indexer ce dépôt robots=noindex, nofollow # Ici, je veux indiquer une URL pour cloner le dépôt clone-url=http://git.domaine.com/$CGIT_REPO_URL #clone-url=http://$HTTP_HOST/$CGIT_REPO_URL clone-prefix=http://git.domaine.com #clone-url=http://$HTTP_HOST/git/$CGIT_REPO_URL # cgit peut générer des archives à télécharger suivant vos tags snapshots=tar.gz tar.bz2 zip # Coloration syntaxique des page A propos et du visualisateur de fichiers source-filter=/usr/lib/cgit/filters/syntax-highlighting.py about-filter=/usr/lib/cgit/filters/about-formatting.sh # La taille des binaires affichés dans le visualisateur est limitée à 200 Ko max-blob-size=200 # Gestion des mimetypes mimetype-file=/etc/mime.types mimetype.git=image/git mimetype.html=text/html mimetype.jpg=image/jpeg mimetype.jpeg=image/jpeg mimetype.pdf=application/pdf mimetype.png=image/png mimetype.svg=image/svg+xml # Les fichiers readme par défaut auront les noms qui suivent readme=:README.md readme=:readme.md # Les dépôts git peuvent implémenter leurs propres filtres enable-filter-overrides=1 enable-index-links=1
Configuration pour Nginx
L'emplacement des dépôts et l'accès à ces derniers seront définit dans la configuration Nginx mais avant, nous copions le fichier binaire permettant la mise en forme du site :
mv /usr/lib/cgit/cgit.cgi /var/www/html/cgit.cgi
Nous définissons ensuite la configuration de Nginx :
nano /etc/nginx/sites-enabled/git.domaine.com
- git.domaine.com
server { listen 80; server_name git.domaine.com; root /var/www/html/cgit; try_files $uri @cgit; # Si un client utilise les commandes git alors : location ~ ^.*/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ { satisfy any; # On autorise les accès au dépôts aux utilisateur définit dans le fichier htpasswd : auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswd; # On définit les paramètres pour interagir avec les dépôts : fastcgi_pass unix:/run/fcgiwrap.socket; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param PATH_INFO $uri; fastcgi_param GIT_PROJECT_ROOT /var/www/html/cgit/; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param REMOTE_USER $remote_user; include fastcgi_params; } # Liste de paramètres pour interagir avec le script cgi : location @cgit { include fastcgi_params; index cgit.cgi; # fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi; 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; } # Enregistrement des accès : access_log /var/log/nginx/access.git.domaine.com.log; error_log /var/log/nginx/error.domaine.com.log; }
Nous définissons les accès à l'utilisateur présent sur la machine hôte :
adduser toto htpasswd -c /etc/nginx/htpasswd toto
Définir un dépôt git
Il suffit de quelques simple commandes pour rendre le tout fonctionnel :
git init /var/www/html/mon-depot
Pour éviter l'erreur indiquant qu'il n'est pas possible de pousser les références, il faut alors se rendre dans le dépôt et executer la commande suivante :
cd /var/www/html/mon-depot/ git config receive.denyCurrentBranch ignore
Pour en savoir plus, je vous invite à lire cette page : https://stackoverflow.com/questions/3221859/cannot-push-into-git-repository
Création automatique
Voici un script qui demande le nom du dépôt ainsi qu'une description pour le futur projet.
#!/bin/bash if [ "$USER" == "www-data" ]; then echo "Quel sera le nom du dépôt : " read rep echo "Courte description du depot : " read des mkdir /mnt/www/cgit/$rep.git cd /mnt/www/cgit/$rep.git git --bare init echo "[receive]" >> config echo " denyCurrentBranch = ignore" >> config echo $des > description echo "Pour info: l'utilisateur permettant de cloner le depot est fusing." echo "pour cloner ce nouveau dépot : git clone http://git.bruno-tatu.com/$rep.git" echo "Puis faire un push pour qu'il puisse apparaitre dans le dépot en ligne." else echo "Uniquement l'utilisateur www-data peut creer des depots." fi
L’exécuter ainsi :
sudo -u www-data ./creer_nouveau_depot.sh