Installer un serveur git sur un Raspberry Pi

Qui dit logiciel libre dit partage libre du code source. Pour cela il existe plusieurs plateformes en ligne, la plus célèbre étant Github. Joli paradoxe quand on sait que Github est un logiciel propriétaire, qui héberge lui même des logiciels libres. Dans cette article nous nous intéresserons à une alternative libres à Github, qui permet d'héberger son propre front web dédié à git.


Mise à jour 25/01/2018 : Le projet Gitphp ne semble plus maintenu par son créateur Xiphux. Le site web n'est plus disponible et les sources ont été supprimées de Github. En revanche, des forks sont disponibles (par exemple : ici).


Parmi ces alternatives il existe Framagit, qui est une instance du logiciel libre GitLab. Mais pour cet article j'ai installé un serveur git et un front web sur un Raspberry Pi, qui tourne sous l'OS Raspbian. Je n'ai pas fait le test, mais la procédure décrite ci-dessous devrait aussi fonctionner sous Debian et Ubuntu.

J'utiliserai Gitphp en tant que front web. Celui-ci n'a pas les fonctionnalités ni l'ergonomie d'un GitLab ou d'un GitHub, mais a l'avantage d'être très léger, ce qui est un prérequis important pour un Raspberry Pi. Néanmoins il est tout à fait adapté à une utilisation personnelle ou bien au sein d'une école ou d'une association.


Installation de NGINX

Avant toute chose, il faut commencer par installer un serveur web. Je recommande NGINX pour ses performances et sa légèreté. Pour simplifier l'installation de NGINX et de PHP-FPM, j'ai adapté pour le Raspberry Pi un script de Nicolas HENNION. Pour en connaître d'avantage sur ce script je vous invite à lire cet article. Si vous êtes sous Debian, récupérez le script orginal de Nicolas sur son Github. Si vous êtes sous Ubuntu, j'ai adapté un autre fork spécialement pour cette distribution.

wget --no-check-certificate https://raw.github.com/P3ter/RaspberryPi/master/nginxautoinstall-raspbian.sh
chmod a+x nginxautoinstall.sh
sudo ./nginxautoinstall.sh
sudo chmod 770 /var/www

Prérequis

Une fois notre serveur web installé, nous devons installer git, créer un utilisateur, créer les répertoires qui vont accueillir les projets git et le client web, et enfin affecter l'ensemble des droits nécessaires au fonctionnement de l'ensemble.

sudo apt-get install git-core

# création d’un user git et du répertoire qui contiendra les projets Git
sudo adduser git
mkdir /git
chown git:git /git

# on change le répertoire par défaut de l'utilisateur git
usermod -d /git git

# création du répertoire qui accueillera le client web
sudo mkdir /var/www/gitphp
sudo chown www-data:www-data /var/www/git
sudo chmod 770 /var/www/git

Ensuite, il est nécessaire de paramétrer php-fpm, comme indiqué ci-dessous.

sudo vim /etc/php5/fpm/pool.d/www.conf
 # remplacer
 listen = /var/run/php5-fpm.sock
 # par
 listen = 127.0.0.1:9000

Installation et configuration

Rentrons dans le vif du sujet. Ci-dessous j'ai décrit l'ensemble des commandes permettant d'installer et de configurer la partie serveur et la partie front. Toutes les commandes sont à réaliser sur le serveur.

# installation du front (disponible ici : https://github.com/xiphux/gitphp/releases)
cd /var/www/gitphp
sudo wget https://github.com/xiphux/gitphp/releases/download/0.2.9.1/gitphp-0.2.9.1.tar.gz
sudo tar zxvf gitphp-0.2.9.1.tar.gz
sudo mv gitphp-0.2.9.1/* .
cd config
sudo cp gitphp.conf.php.example gitphp.conf.php
sudo vim gitphp.conf.php

# dans le fichier gitphp.conf.php décomenter et modifier la ligne ci-dessous
$gitphp_conf['projectroot'] = '/git/';

# affectation des droits et redémarrage sur serveur web
sudo chown -R www-data:www-data /var/www/
sudo chmod -R 770 /var/www/
sudo service nginx restart

# création d'un projet git
su - git
cd /git
mkdir nom-projet.git
cd nom-projet.git
git --bare init

Configuration SSH

Avant de commencer à pouvoir utiliser notre serveur git, il faut configurer SSH sur le serveur et sur l'ordinateur qui servira à vos développements (le client git). Ce paramètrage vous permettra d'envoyer vos modifications au serveur en vous authentifiant par échanges de clés, ce qui permet d'éviter la saisie systématique d'un mot de passe utilisateur.

Sur le serveur, on crée le fichier qui contiendra les clé SSH des clients autorisés à se connecter :

su - git
touch /git/.ssh/authorized_keys

Sur le client, on crée une clé SSH puis on l'envoie au serveur :

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/ma_cle.pub git@mon_serveur

Ajout d'un dépôt git sur le client

Le serveur et le client web sont maintenant prêt. Les commandes ci-dessous sont à réaliser sur le client git. Elles permettent de créer un répertoire de travail qui pourra interagir avec le serveur git, ainsi qu'une branche "dev".

mkdir nom-projet
cd nom-projet
git init
git remote add origin git@mon_serveur:nom-projet.git
git add *
git commit -a
git push origin master

# création d'une branche
git branch dev
git commit -a
git push origin dev

Modification du prompt

Afin de rendre l'utilisation de git plus simple, il est possible de modifier le prompt dans le but d'afficher la branche git sur laquelle on développe. Pour cela il faut éditer le fichier .bashrc se trouvant à la racine du répertoire par défaut de l'utilisateur et ajouter la variable $(__git_ps1)

vim /home/nom_utilisateur/.bashrc

# modification du paramètre PS1 sans la gestion des couleurs :
PS1='${debian_chroot:+($debian_chroot)}\\u@\\h:\\w$(__git_ps1)\\$ '

# modification du paramètre PS1 avec la gestion des couleurs :
PS1='${debian_chroot:+($debian_chroot)}\\[\\033[01;32m\\]\\u@\\h\\[\\033[00m\\] \\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\[\\033[    0;31m\\]$(__git_ps1)\\[\\033[00m\\] \\[\\033[01;34m\\]\\$\\[\\033[00m\\] '

# quitter l'éditeur de texte et appliquer les changements :
. /home/nom_utilisateur/.bashrc

Thèmes

Il est possible d'avoir un rendu plus moderne du client web en installant un "thème", qui en réalité est une simple feuille de style CSS.

Le thème que j'utilise est disponible ici :https://github.com/gitawego/gitphp-theme

Pour l'appliquer, il suffit de télécharger sur votre serveur web, le fichier gitweb.css et de la placer dans /var/www/gitphp/css. Ensuite il faut éditer le fichier /var/www/gitphp/config/gitphp.conf.php en ajoutant la ligne ci-dessous : 

$gitphp_conf['stylesheet'] = 'gitweb.css';

 


Un article à retrouver sur P3ter.fr

Vus : 1514
Publié par P3ter : 34