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 :