Mise en place d’un serveur GIT via HTTP sous Debian

Mise en place d’un serveur GIT via HTTP

L’objet de cette article est de mettre en place un serveur GIT et d’y accéder via le protocole HTTP

Configuration de GIT

La mise en place sous Debian, est assez simple, sur le serveur, il suffit d’installer git et d’apache :

apt-get install git apache2

Nous allons placer les repositories GIT dans le répertoire /var/www/git :

mkdir /var/www/git

Initialisation du premier repository git

Nous allons créer un repository de test : myproject !, pour cela, il faut créer le répertoire et initialiser le repository :

cd /var/www/git
mkdir myproject.git
cd myproject.git
git --bare init

Il faut maintenant donner les droits à Apache sur les répertoires :

cd /var/www/git/myproject.git
chown -R www-data.www-data .

Mettre a jour le serveur GIT :

cd /var/www/git/myproject.git
git update-server-info

Git est opérationnel, il faut maintenant configurer Apache pour y accéder via HTTP

Configuration d’Apache

Pour Apache, il faut activer les modules dav et dav_fs :

a2enmod dav dav_fs
/etc/init.d/apache restart

Une fois les modules activés, nous allons configurer le repository GIT, pour cela, créer un fichier : /etc/apache2/conf.d/git.conf et ajouter la configuration suivante :

<Location /git/myproject.git>
    DAV on
    AuthType Basic
    AuthName "Git MyProject"
    AuthUserFile /etc/apache2/passwd.git
    Require valid-user
</Location>

Il faut créer le fichier /etc/apache2/passwd.git :

htpasswd -c /etc/apache2/passwd.git myUser

Redémarrer Apache, et le serveur est en place !

Configuration du client :

Sur le client, il faut un projet déjà sous GIT :

cd /home/myUser/myprojects/myproject
git init
git add --all
git commit -m "Initial import"

Maintenant il faut envoyer les données au serveur :

cd /home/myUser/myprojects/myproject
git config remote.origin.url http://myUser@<server_ip_or_name>/myproject.git/

Et voilà ! maintenant il suffit d’utiliser les commandes git pull origin, git fetch origin ou encore git push origin

Ressources

Pour écrire cet article, je me suis largement inspiré du fichier setup-git-server-over-http.txt

Apache HTTPS Named Virtualhost

Dans mon précédent article, j’ai décris comment mettre en place le HTTPS sous Apache.

Là, je vais décrire comment mettre en place des hôtes virtuels nommés (named virtual host) en https.

Attention !

Même si la documentation d’apache (ici) précise qu’il est possible de faire des vhosts en https à partir de la version 2.2.12, il faut que le navigateur intègre une fonctionnalité SNI lors des requêtes SSL :

Donc, si vos sites https (les différents vhosts) sont à destination du grand public, il faudra prévoir une adresse IP par site https.

Création des vhosts

En fait la création des vhosts n’est pas très compliqué, on va créer les sites :

  • www.mondomaine.com
  • www.mondomaine.net

Je ne détaillerais pas la création des certificats car je l’ai déjà fait dans l’article précédent : Mise en place d’un serveur HTTPS sous Debian.

Sous Debian, il faut activer les vhosts sur le port 443, pour cela, il faut éditer le fichier : /etc/apache2/ports.conf, et le modifier comme ceci :

<NameVirtualHost *:80>
Listen 80
 
<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
    NameVirtualHost *:443
</IfModule>

Vous remarquerez d’ailleurs, qu’il y a un commentaire, qui précise que les vhosts https ne sont pas supportés, en fait si, mais il faut que la version d’Apache soit supérieure à 2.2.12

Les vHosts

Voici les deux vhosts :

<VirtualHost *:443>
        ServerName www.mondomaine.com
        ServerAdmin admin@mondomaine.com
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile ssl/www.mondomaine.com.crt
        SSLCertificateKeyFile ssl/private.key
 
        DocumentRoot /var/www/com
        <Directory /var/www/com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        LogLevel debug
        ErrorLog /var/log/apache2/error.mondomaine.com.log
        CustomLog /var/log/apache2/access.mondomaine.com.log  combined
</VirtualHost>

Et :

<VirtualHost *:443>
        ServerName www.mondomaine.net
        ServerAdmin admin@mondomaine.net
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile ssl/www.mondomaine.net.crt
        SSLCertificateKeyFile ssl/private.key
 
        DocumentRoot /var/www/net
        <Directory /var/www/net>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        LogLevel debug
        ErrorLog /var/log/apache2/error.mondomaine.net.log
        CustomLog /var/log/apache2/access.mondomaine.net.log  combined
</VirtualHost>

Voilà, c’est tout … un petit redémarrage d’Apache, et un test (Attention : utilisé Chrome ou FF 3 si vous êtes sous Windows XP, et oui rappelez vous du problème de SNI : http://en.wikipedia.org/wiki/Server_Name_Indication.

Le prochain article portera sur l’authentification par certificat.