Subversion auf dem Webserver

      Kommentare deaktiviert für Subversion auf dem Webserver

Subversion ist eine Arbeitserleichterung, die ich nicht mehr missen möchte. Es hat aber auch seine Tücken. Wenn man damit ein Projekt entwickelt werden durch Subversion „.svn“ Verzeichnisse angelegt, und das in rauen Mengen. Dadurch, dass ich auf einem Ubuntu-System entwickle, sehe ich diese Verzeichnisse gar nicht, da diese standardmäßig ausgeblendet werden. Wenn man dann seine Änderungen auf den Webserver spielen will, kann man das mit FTP machen, was sehr umständlich ist, oder durch einen SSH geschützen Tunnel per SVN. Wenn man ein
svn export macht, ist das auch OK, nur leider dauert das dann sehr lang. Wenn man dies bei einem Produktivsystem macht, läuft man Gefahr, dass die Internetseite nicht erreichbar ist. Also hat man ja noch die Möglichkeit mit einem svn update zu arbeiten. Es vergleicht die Dateien und schreibt nur die Veränderungen an den Dateien aus der letzte Revision. Im Prinzip ist das das Beste was einem passieren kann. Es gibt nur einen großen Haken! Die .svn Verzeichnisse sind standardmäßig im Internet erreichbar. Normalerweise ist das nicht sooo schlimm, da über das Internet nur das „web“ Verzeichnis und nicht etwas das „lib“ oder sonstige delikate Verzeichnisse erreichbar sind. Abhilfe kann man eigentlich recht einfach schaffen, indem man einfach die Verzeichnisse „.svn“ im Apache direkt sperrt. Das geht über z.B. die apache.conf (/etc/apache2/apache2.conf)

<Directory ~  '*\.svn'>
Order Allow,Deny
Deny from All
</Directory>

Update 25.2.2010 :

In den Kommentaren zu Nils seinem Artikel habe ich eine interessante Alternative zu o.g. vorgehen gefunden.

Man kann eine kleines Shellscript schreiben, in dem erst „svn export“ auf ein temporäres Verzeichnis gemacht wird und dann ein Symlink vom webroot auf dieses Verzeichnis gelegt wird.

Der Vorteil dabei: Man hat keine .svn Verzeichnisse auf dem Produktivsystem und die Ausfallzeiten sind fast null.

#/bin/sh
svn export svn://SVNSERVER /var/www/ROOT_DIR_TEMP
chown www-data /var/www/ROOT_DIR_TEMP
chmod 755 /var/www/ROOT_DIR_TEMP
mount --bind /var/www/ROOT_DIR_TEMP /var/www/ROOT_DIR

Man könnte natürlich das ganze noch mit ein oder zwei Variablen flexibler gestalten, damit das TEMP Verzeichnis nicht überschrieben wird. Aber ich denke so in etwa dürfte es funktionieren.