Introduction
Le besoin est simple : avoir un serveur subversion (svn) pour gérer le versionning et le travail collaboratif sur les sources d’un site web ou d’un programme.
Ce tuto doit vous permettre de créer une machine virtuelle avec un serveur svn accessible via une url (ex : http://svn.jbnet.lan) dans votre réseau local.
Il ne couvre les aspects de la gestion de projets avec un logiciel de gestion de versions.
Uniquement sa mise en place technique.
Ce tuto fait parti d’un ensemble qui conduit à créer une infrastructure de serveurs web avec différents rôles : “[Tuto – Infrastructure Web – Debian 8] – Présentation et objectifs”.
Vous devez avoir préparé et cloné la machine gabarit pour continuer.
Voir “[Tuto – Infrastructure Web – Debian 8] – La machine gabarit” puis “[Tuto – Infrastructure Web – Debian 8] – Cloner et préparer la machine gabarit“.
Vous devez avoir des connaissances sur l’utilisation de Linux via une connexion SSH ainsi qu’une certaine aisance avec les commandes d’un shell Linux.
Comptez env. 1h de configuration en partant d’une VM fraichement clonée et paramétrée sur votre réseau.
… là encore, je suis large !
Modifications et mises à jour du document
20/09/2015 : Publication initiale
Avertissement
Cette machine est construite pour vous permettre de créer un serveur svn sur un réseau local.
Il ne faut en aucun cas lui donner un accès public à partir d’internet.
Par conséquent, vous êtes seul responsable si vous vous contentez de suivre ce tutoriel pour une mise en ligne d’un serveur web sur internet avec un accès public.
Vous voilà averti, passons aux choses sérieuses.
Installation
Il faut ajouter subversion et ses outils avec les modules mod_dav_svn et mod_authz_svn fournis par la librairie libapache2-svn :
1 |
command apt-get install subversion libapache2-svn subversion-tools |
J’active les modules Apache2 :
1 2 3 |
command a2enmod authz_svn command a2enmod dav command a2enmod dav_svn |
Création du site web
Dans l’exemple, je vais créer un site web http://svn.jbnet.lan qui sera le point d’entrée de mon serveur svn.
Le site sera hébergé dans le répertoire /home/svn-adm/svn.
Créer un utilisateur svn-adm :
1 |
command adduser svn-adm |
Je positionne des variables avec les paramètres du site :
1 2 3 |
myuser="svn-adm" mywebsite="svn" mydomain="jbnet.lan" |
La création d’un hébergement avec la machine gabarit possédant le rôle de serveur web est décrite dans le paragraphe “Créer un hébergement web” du chapitre “[Tuto – Infrastructure Web – Debian 8] – Un serveur LAMP“.
Pour faire vite, voici les commandes à copier/coller dans votre terminal avec une connexion ssh sur le serveur web :
Configuration Apache2 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
command mkdir -p /home/${myuser}/${mywebsite}/conf command mkdir -p /home/${myuser}/${mywebsite}/html command mkdir -p /home/${myuser}/${mywebsite}/log command mkdir -p /home/${myuser}/${mywebsite}/tmp command echo "<?php phpinfo(); ?>" > /home/${myuser}/${mywebsite}/html/phpinfo.php command cp /etc/apache2/sites-available/000-default.conf /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#ServerName/a \ ServerName ${mywebsite}.${mydomain}" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sServerAdmin/a AssignUserID ${myuser} ${myuser}" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sDocumentRoot/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sDocumentRoot/a DocumentRoot \/home\/${myuser}\/${mywebsite}\/html" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/^DocumentRoot/a \<Directory \/home\/${myuser}\/${mywebsite}\/html\> \\ Options -Indexes +FollowSymLinks -MultiViews +ExecCGI -Includes \\ AllowOverride All \\ Require all granted \\ \</Directory\>" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sErrorLog/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sCustomLog/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sErrorLog/a ErrorLog \/home\/${myuser}\/${mywebsite}\/log\/apache-error.log" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sCustomLog/a CustomLog \/home\/${myuser}\/${mywebsite}\/log\/apache-access.log combined" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "s/\/usr\/lib\/cgi-bin\/php5-fcgi/\/usr\/lib\/cgi-bin\/php5-fcgi-${mywebsite}/g" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "s/php5-fpm.sock/php5-fpm-${mywebsite}.sock/g" /home/${myuser}/${mywebsite}/conf/apache.conf ln -s /home/${myuser}/${mywebsite}/conf/apache.conf /etc/apache2/sites-enabled/${mywebsite}.conf |
Configuration PHP5-FPM :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
command cp /etc/php5/fpm/pool.d/www.conf /home/${myuser}/${mywebsite}/conf/php.conf command sed -i -e "s/^\[www\]/\[${mywebsite}\]/" /home/${myuser}/${mywebsite}/conf/php.conf command sed -i \ -e "s/^[#]*\(user = \).*/\1${myuser}/" \ -e "s/^[#]*\(group = \).*/\1${myuser}/" \ /home/${myuser}/${mywebsite}/conf/php.conf command sed -i \ -e "s/php5-fpm.sock/php5-fpm-${mywebsite}.sock/" \ /home/${myuser}/${mywebsite}/conf/php.conf command sed -i \ -e "s/^[#]*\(listen.owner = \).*/\1${myuser}/" \ -e "s/^[#]*\(listen.group = \).*/\1${myuser}/" \ /home/${myuser}/${mywebsite}/conf/php.conf command echo "php_flag[display_errors] = on php_admin_value[error_log] = /home/${myuser}/${mywebsite}/log/php-error.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 256M php_admin_value[sys_get_temp_dir] = /home/${myuser}/${mywebsite}/tmp php_admin_value[session.save_path] = /home/${myuser}/${mywebsite}/tmp php_admin_value[upload_max_filesize] = 20M php_admin_value[post_max_size] = 20M" >> /home/${myuser}/${mywebsite}/conf/php.conf ln -s /home/${myuser}/${mywebsite}/conf/php.conf /etc/php5/fpm/pool.d/${mywebsite}.conf |
Et pour finir, on modifie le propriétaire des fichiers et on redémarre les services apache2 et php5-fpm :
1 2 3 |
command chown -R ${myuser}:${myuser} /home/${myuser}/${mywebsite} command service apache2 restart command service php5-fpm restart |
A partir de là, si vous avez créer une VM autonome (voir « [Tuto – Infrastructure Web – Debian 8] – Un serveur LAMP« ), vous devez ajouter l’adresse ip de cette dernière et l’url svn.jbnet.lan dans votre fichier hosts pour y avoir accès.
Si vous avez créer une infrastructure web avec un serveur proxy et nginx en mode reverse proxy, vous devez créer la configuration nginx.
Sur le serveur proxy, créez le fichier /etc/nginx/sites-available/svn.jbnet.lan.
Adaptez les paramètres en fonction de votre configuration.
1 2 3 4 5 6 7 8 9 10 11 12 |
server { listen 80; server_name svn.jbnet.lan; #access_log /var/log/nginx/svn.jbnet.lan.access.log; error_log /var/log/nginx/svn.jbnet.lan.error.log; location / { proxy_pass http://192.168.8.150/; expires off; # include include.d/proxy.conf; } } |
Puis créez un lien symbolique dans le répertoire /etc/nginx/sites-enabled :
1 2 |
command cd /etc/nginx/sites-enabled command ln -s ../sites-available/svn.jbnet.lan |
Relancez nginx pour la prise en compte :
1 |
command service nginx restart |
Dans votre fichier hosts, il faut ajouter l’ip du proxy associé à l’url du site svn.jbnet.lan.
Testez en utilisant l’url « http://svn.jbnet.lan/phpinfo.php » dans votre navigateur.
Création du premier dépôt
Un dépôt contient des projets. Je vais donc créer un dépôt pour mes projets en lien avec JBNet.fr.
Vous pouvez créer autant de dépôts que vous voulez pour séparer et organiser vos projets.
Créez les répertoires qui reçoivent les dépôts et les fichiers contenant la liste des utilisateurs autorisés :
1 2 |
command mkdir /home/${myuser}/svn.repo command mkdir /home/${myuser}/svn.passwd |
Je vais ajouter une variable qui contient le nom du dépôt et une seconde pour l’utilisateur :
1 2 |
myrepo="jbnet.fr" myrepouser="jerome" |
Créez et configurez le nouveau dépôt avec un accès par mot de passe :
1 2 |
command svnadmin create --fs-type fsfs /home/${myuser}/svn.repo/${myrepo} command htpasswd -c /home/${myuser}/svn.passwd/${myrepo}.passwd ${myrepouser} |
La dernière commande demande de saisir le mot de passe de l’utilisateur.
Pour ajouter de nouveaux utilisateurs, il faut utiliser la même commande, mais sans le « -c ».
Sinon, le fichier ${myrepo}.passwd est écrasé.
1 2 |
myrepouser2="jbnet-user" command htpasswd /home/${myuser}/svn.passwd/${myrepo}.passwd ${myrepouser2} |
Configuration Apache
A chaque dépôt créé, il faut modifier le fichier /home/${myuser}/${mywebsite}/conf/apache.conf en ajoutant ces lignes.
Remplacez les valeurs ${myrepo} et ${myuser} par vos valeurs.
1 2 3 4 5 6 7 8 9 |
<Location /${myrepo}> DAV svn SVNPath /home/${myuser}/svn.repo/${myrepo} AuthType Basic AuthName "Subversion Repository" AuthUserFile /home/${myuser}/svn.passwd/${myrepo}.passwd Require valid-user #SSLRequireSSL </Location> |
Je modifie les droits de la configuration que je viens de créer avec root :
1 |
command chown -R ${myuser}:${myuser} /home/${myuser}/* |
Pour la prise en compte du site, il faut relancer les services Apache2 et PHP5-FPM :
1 2 |
command service apache2 restart command service php5-fpm restart |
Le dépôt est accessible via l’url : http://svn.jbnet.lan/jbnet.fr en utilisant les paramètres de connexion configurés plus haut.
Il ne vous reste plus qu’à configurer votre logiciel de développement (comme NetBeans) pour utiliser votre svn fraichement installé.