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.
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.
# 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.
# 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.
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 :
touch /git/.ssh/authorized_keys
Sur le client, on crée une clé SSH puis on l'envoie au serveur :
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".
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)
# 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 :
Un article à retrouver sur P3ter.fr