Mettre en place un repository GIT distant sur votre serveur

Que vous soyez seul ou plusieurs à développer un projet, il est toujours conseillé d’utiliser un outil de versioning. Nous allons voir dans cet article comment installer Git sur votre serveur distant et configurer un repository distant sur votre machine locale.

Installer Git sur votre serveur

Exécutez la commande suivante :
sudo apt-get install git

Une fois les paquets installés, nous allons pouvoir passer à la création d’un utilisateur Git dédié.

Créer un utilisateur Git et mettre en place un accès SSH

Créez dans un premier temps un compte utilisateur git :
sudo adduser git

Nous allons maintenant nous authentifier en tant qu’utilisateur git avec le mot de passe défini à l’étape précédente afin de mettre en place un dossier « .ssh » dans le répertoire utilisateur :
su git
cd
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

L’utilisateur Git est créé mais il n’est pour l’instant associé à aucune clé. Si vous avez suivi la procédure décrite dans l’article Configurer SSH pour s’authentifier par clé privée, vous avez déjà un utilisateur sur votre serveur ayant un accès SSH configuré. Nous allons récupérer la clé publique de notre utilisateur « user1 » et l’ajouter au fichier authorized_keys de l’utilisateur git.

Astuce : vous pouvez utiliser WinSCP sur Windows, ou CyberDuck sur OSX pour bénéficier d’une interface graphique pour réaliser vos transferts de fichier avec votre serveur.

Nous pouvons temporairement mettre la clé publique id_rsa.pub de « user1 » dans le répertoire /tmp.

En étant authentifié en tant qu’utilisateur « git » :
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

Créer un repository Git sur le serveur

Nous allons maintenant créer un répertoire « git » qui contiendra nos dépôts. L’emplacement de ce répertoire est libre, dans cet exemple, il sera créé dans /srv. Avec un utilisateur ayant les droits sudo, exécutez cette commande :
sudo mkdir /srv/git

Assignez l’utilisateur « git » comme propriétaire du répertoire :
sudo chown -R git git/

Pour la suite, authentifiez-vous en tant que « git » :
su git

Les commandes suivantes vont ensuite vous permettre de créer un dépôt git « nu » et sans répertoire de travail (paramètre –bare) :
mkdir monProjet.git
cd monProjet.git
git init --bare

Votre dépôt Git distant est maintenant créé.

Créer un dépôt Git local et configurer le dépôt distant

Sur votre machine de développement, nous allons maintenant initialiser un dépôt Git dans le dossier de votre projet. Vous pouvez réaliser cette opération en ligne de commande, mais pour plus de confort je vais utiliser SourceTree, une interface graphique Git gratuite (https://www.sourcetreeapp.com/).

Lancez SourceTree, puis Nouveau > Créer un dépôt local .

Indiquez le dossier de votre projet, puis le type (Git), et validez.

Vous verrez apparaître dans l’interface tous les fichiers composant votre projet, en attente de commit.

Dans la barre de menu supérieure, sélectionnez Dépôt > Ajouter un dépôt distant

Renseignez ensuite le nom de votre dépôt, ainsi que son url. Si vous avez suivi les étapes précédentes, elle devrait être de type : git@[IP de votre serveur]:/srv/git/[Répertoire de votre dépôt Git distant]

Vous pouvez ensuite sélectionner tous vos fichiers puis cliquer sur « Commiter » et haut à gauche. En commentaire, vous pouvez mettre « Initial commit » et cocher la case « Pousser immédiatement les commits vers [nom du repository Git]/master ». Vos fichiers seront donc commités dans la branche master de votre dépôt local, puis poussés vers le dépôt distant.

Bonus : un peu de sécurité avec git-shell

Actuellement l’utilisateur Git que nous avons créé dans cet article a la possibilité de se connecter au serveur et accéder à la ligne de commande comme n’importe quel utilisateur. Il est possible de restreindre son accès aux fonctions Git grâce à l’utilitaire « git-shell » (inclus avec Git).

Pour que l’utilisateur Git n’ait pas accès au shell standard, il suffit de faire en sorte qu’au login il soit directement associé à git-shell.

Voici la procédure à suivre :

  • Vérifier si git-shell est déjà présent dans le fichier /etc/shells :
    less /etc/shells
  • Si ce n’est pas le cas, récupérer le path de git-shell avec which puis ajoutez-le à /etc/shells :
    which git-shell
    sudo vi /etc/shells
  • Exécutez ensuite la commande suivante, elle permettra d’éditer le shell présenté à l’utilisateur au login :
    sudo chsh git -s $(which git-shell)

Si vous tentez ensuite de vous connecter en ssh avec l’utilisateur git, le message suivant s’affichera et le login sera rejeté :

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

Toutes les fonctions Git seront par contre accessibles normalement.

Partager sur :