Après un long moment d'inactivité sur ce blog, je profite de la récente acquisition d'un serveur VPS pour poster quelques articles sur la mise en place d'un tel serveur, déjà pour que je me souvienne de ce que j'avais fait, mais aussi en espérant que ce soit utile à d'autres !

Donc pour ce premier article, je vais détailler la mise en place d'un serveur subversion (SVN), avec accès via Apache. Je partirai du principe que vous avez déjà un serveur Apache 2 fonctionnel.

Alors, pour commencer, il faut installer subversion lui-même, ainsi que le module pour apache :

sudo aptitude install subversion libapache2-svn

Ca va installer les différents programmes nécessaires à l'utilisation de subversion, ainsi que le module pour apache. Vous avez ensuite plusieurs choix : vous pouvez configurer une authentification uniquement via apache, ou permettre aussi de de connecter via SSH. Dans mon cas, je ne veux pas devoir créer un utilisateur sur mon serveur pour chaque accès SVN que je veux donner, je vais donc me limiter à l'authentification via apache.

Il va falloir ensuite créer un répertoire pour stocker les différents repositories subversion. J'ai choisi de le faire dans /home, car je crée en même temps un utilisateur pour subversion (et ainsi les repositories seront sauvegardés en même temps que tous les répertoires home) :

sudo useradd subversion
sudo mkdir /home/subversion

Profitons-en pour vite créer un repository de test :

sudo svnadmin create /home/subversion/test

Vu que le répertoire sera servi par apache, il faut que celui-ci puisse écrire dans le répertoire que nous venons de créer. Dans mon cas, j'utilise mpm-itk, un module d'apache qui permet d'exécuter les différents virtual hosts avec leur propre utilisateur. Ainsi, le répertoire doit simplement appartenir à l'utilisateur subversion :

sudo chown subversion:subversion /home/subversion

Cependant, pour la plupart des gens, il faudra nommer l'utilisateur d'apache comme propriétaire :

sudo chown www-data:www-data /home/subversion

Pour authentifier nos utilisateurs, apache va utiliser un fichier htpasswd, qu'il nous faut créer. La commande suivante crée ce fichier et y ajoute l'utilisateur test :

sudo htpasswd -c /etc/apache2/svn.passwd test

Le mot de passe pour cet utilisateur nous est alors demandé. Pour ajouter d'autres utilisateurs, répétez la commande, mais sans l'option -c (qui sert à créer le fichier) :

sudo htpasswd /etc/apache2/svn.passwd foo
sudo htpasswd /etc/apache2/svn.passwd bar

Nous allons maintenant configurer apache 2. Vérifions tout d'abord que le module dav_svn installé précédemment est bien activé :

sudo a2enmod dav_svn

Ensuite, créons le fichier pour le virtual host (/etc/apache2/sites-available/svn.domain.com) :

<VirtualHost *:80>
        ServerAdmin admin@localhost
        ServerName svn.domain.com

        <Location />
                DAV svn
                SVNParentPath /home/subversion
                AuthType Basic
                AuthName "Private Subversion Repository"
                AuthUserFile /etc/apache2/svn.passwd
                Require valid-user
        </Location>

        ErrorLog /home/subversion/logs/error.log
        CustomLog /home/subversion/logs/access.log combined

        <IfModule mpm_itk_module>
                AssignUserId subversion subversion
        </IfModule>
</VirtualHost>

Les directives intéressantes se trouvent dans la balise Location.

DAV svn

demande d'utiliser le module dav_svn installé à la place du module normal.

SVNParentPath /home/subversion

définit le répertoire dans lequel sont stockés les repositories. Finalement,

AuthUserFile /etc/apache2/svn.passwd

indique quel fichier utiliser pour l'authentification des utilisateurs. Voilà, c'est tout ! Il vous reste à activer ce virtual host :

sudo a2ensite svn.domain.com

et à redémarrer apache :

sudo apache2ctl graceful

Normalement, tout devrait fonctionner ! Pour vérifier, rendez-vous sur l'adresse de votre repository : http://svn.domain.com/test

Vous devriez avoir une invite vous demandant un nom d'utilisateur et un mot de passe, et une fois ceux-ci entrés, vous devriez voir l'index de votre repository !

Dans les prochains articles, je tenterai de vous expliquer comment définir des droits plus fins sur vos différents repositories, comment utiliser SSL pour accéder à vos repositories de manière sécurisée, et comment mettre en place websvn pour pouvoir parcourir votre code plus facilement et plus joliment qu'avec l'interface web rudimentaire que nous avons pour l'instant !

Sources :