CentOS - Installatie van Subversion (SVN) op een subdomein met Plesk
Stap 1. Aanmaken subdomein in Plesk

Het aanmaken van een subdomein (svn.davidvandertuijn.nl) is vrij eenvoudig in het Plesk Control Panel:

Add New Subdomain


Stap 2. Installeren van Subversion
yum install subversion

Stap 3. Installeren van mod_dav_svn

Het WebDAV-protocol maakt het mogelijk om op afstand documenten aan te maken, te veranderen en te verplaatsen op de server.

yum install mod_dav_svn

Stap 4. Het Apache configuratie bestand
# nano /etc/httpd/conf/httpd.conf

Controleer of de volgende modules zijn toegevoegd:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

Stap 5. Het Virtual Host configuratie bestand
# nano /var/www/vhosts/svn.davidvandertuijn.nl/conf/vhost.conf
<Location />
        DAV svn
        SVNParentPath /var/www/vhosts/davidvandertuijn.nl/subdomains/svn
        AuthzSVNAccessFile /var/www/vhosts/svn.davidvandertuijn.nl/svn-acl-conf
        <LimitExcept GET PROPFIND OPTIONS REPORT>
                SSLRequireSSL
                AuthType Basic
                AuthName "Subversion"
                AuthUserFile "/var/www/vhosts/svn.davidvandertuijn.nl/.htpasswd"
                Require valid-user
        </LimitExcept>
</Location>

Opmerking:

SVNPath: Een repository.

SVNParentPath : Meerdere repositories.

Configuratie toepassen:

# /usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=svn.davidvandertuijn.nl

Herstart de webserver:

# service httpd restart

Stap 6. Authenticatie

Creer een .htpasswd bestand:

# htpasswd -cm /var/www/vhosts/svn.davidvandertuijn.nl/.htpasswd davidvandertuijn

Stap 7. Access Control List
# nano /var/www/vhosts/svn.davidvandertuijn.nl/svn-acl-conf

Een gebruiker toevoegen:

[reponame:repopath]
user = access

Standaard heeft een gebruiker geen toegang, access kan zijn lezen (r) of lezen en schrijven (rw).

[test:/]
davidvandertuijn =  r

Om voor alle gebruikers lezen privileges te geven voor elke repository:

[/]
* = r

Een groep toevoegen:

[groups]
beheerder = davidvandertuijn

[test:/]
@beheerder = rw
Stap 8. Een repository toevoegen
# svnadmin create /var/www/vhosts/davidvandertuijn.nl/subdomains/svn/test
chown -R apache.apache test

Authenticatie / Authorizatie toevoegen:

# nano /var/www/vhosts/davidvandertuijn.nl/subdomains/svn/test/conf/svnserve.conf
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

Je zal de bestanden passwd en authz moeten wijzigen, dit wijst zich vanzelf.

Stap 9. Testen

Controleren of een HTTP verzoek wordt geweigerd:

403 Forbidden

Controleren of een HTTPS verzoek wordt geaccepteerd

Zelfondertekend rootcertificaat

Een zelfondertekend rootcertificaat kan niet worden gevalideerd maar dat is geen probleem, het belangrijkste is dat de data over SSL wordt verstuurd.

Controleren of de Authenticatie werkt.

Basic Authentication

Controleren of de Subversion Revision wordt getoond.

test - Revision 0: /

Directory Index

Indien er een Directory Index wordt getoond zou het kunnen dat de Virtual Host configuratie niet geaccepteerd wordt, mijn work-arround is om de deze te plaatsen in '/etc/httpd/conf.d/subversion.conf'.

# nano /var/www/vhosts/svn.davidvandertuijn.nl/conf/vhost.conf
<Directory /var/www/vhosts/davidvandertuijn.nl/subdomains/svn>
        DAV svn
        SVNParentPath /var/www/vhosts/davidvandertuijn.nl/subdomains/svn
        AuthzSVNAccessFile /var/www/vhosts/svn.davidvandertuijn.nl/svn-acl-conf
        <LimitExcept GET PROPFIND OPTIONS REPORT>
                SSLRequireSSL
                AuthType Basic
                AuthName "Subversion"
                AuthUserFile "/var/www/vhosts/svn.davidvandertuijn.nl/.htpasswd"
                Require valid-user
        </LimitExcept>
</Directory>

Controleren of een Subversion project kan worden uitgechecked en ge-commit.

cd /var/www/vhosts/davidvandertuijn.nl/subdomains/dev

# svn checkout svn://svn.davidvandertuijn.nl/test
Checked out revision 0.

# svn add index.php
A index.php

# svn commit . -m "Dit is een test commit"
Adding index.php
Transmitting file data .
Committed revision 1.

Overige opmerkingen

Let op: Er is een verschil tussen het path /var/www/vhosts/davidvandertuijn.nl/subdomains/svn en /var/www/vhosts/svn.davidvandertuijn.nl

De authenticatie / autorisatie verloopt nog niet helemaal soepel, ik zal dit artikel daar later nog op bijwerken.


Meer informatie:

HowTos/Subversion - CentOS Wiki

mod_dav: a DAV module for Apache

WebDAV - Wikipedia