Subversion Logo
In diesem Beitrag schreibe ich darüber, wie man Subversion (SVN) von A bis Z auf seinem Server einrichtet. Das Tutorial geht quasi von Nichts bis zum ersten externen Subversion (SVN) Checkout. Zudem wird auch Dropbox in den Beitrag miteinbezogen. Der Beitrag kann 1:1 ausprobiert werden.
Inhalt
Was ist Subversion (SVN)?
Eigener Subversion (SVN) Server vs. Dropbox
Die Umgebung
Die Konfiguration des Subversion (SVN) Servers
Erstes Repository anlegen
Die Konfiguration des externen Zugangs
Die Konfiguration des Clients
Der erste externe Checkout
Subversion (SVN) kombiniert mit Dropbox
Schlusswort
Quellen
Subversion (SVN) ist ein Versionsverwaltungssystem für Dateien und Ordner. Für jede Änderung an einer Datei oder an einem Ordner gibt es eine neue Version. Ältere Versionen von Dateien und Ordner können wenn nötig wiederhergestellt werden.
Ich habe mir aus folgenden Gründen einen Subversion (SVN) Server konfiguriert
- Daten sind über HTTPS von praktisch überall erreichbar
- Daten müssen nicht mehr mit USB von PC zu PC kopiert werden weil sie zentral auf dem Server liegen
- Versionsverwaltungssystem. Schluss mit “Ach, auf welchem PC liegt nun die aktuellste Version der Datei?”
- Backup. Auf jedem Client liegt quasi ein Backup der Daten
Über die Pros und Contras gibt es sicher unterschiedliche Ansichten. Ich freue mich auf die Diskussion in den Kommentaren .
Dropbox Pro
- Benötigt keinen eigenen Server
- Wahrscheinlich höhere Verfügbarkeit als eigener Server
- Dateien und Ordner werden ohne weiteres Skrippten automatisch synchronisiert
- Sehr einfache Bedienung für einen Benutzer
Dropbox Contra
- Speicherplatz nur 2GB (bis zu 10GB gratis)
- Daten sind extern gehostet
- Versionen älter 30 Tage können nicht mehr wiederhergestellt werden
Eigener Subversion (SVN) Server Pro
- Mehr Speicherplatz (hängt natürlich vom Server ab)
- Daten sind nicht extern gehostet
- Keine Zeitlimitierung der Versionen
- Man kann selbst ausprobieren und konfigurieren (grösserer Lerneffekt)
- Grösserer Funktionsumfang als Dropbox (erweiterbar)
Eigener Subversion (SVN) Server Contra
- Ein eigener Server wird benötigt der 24h * 7d läuft
- Ausfälle sind wahrscheinlicher
- Ein gewisses Know How muss vorhanden sein
Zusammenfassend hat der eigene Subversion (SVN) Server mehr Ressourcen und Dropbox dafür eine höhere Verfügbarkeit, jedoch sind die Daten mit Dropbox extern gehostet. Mit Subversion (SVN) und Dropbox in Kombination kann man das Maximum erreichen.
Dies ist die Umgebung in diesem Beitrag. Eure Umgebung muss nicht exakt die gleiche sein. Bei Unsicherheiten fragt einfach in den Kommentaren oder schreibt mir.
Externer Zugang
- DynDNS Adresse wie zum Beispiel root1024.dyndns.info
Router
- pfSense
- DNS Forwarding konfigurierbar
- DynDNS konfigurierbar
Server
- Aktuelles Debian
- Apache Webserver
- Subversion
Client
- Windows 7
- Tortoise SVN Client
Apache / Subversion installieren und für die Adresse konfigurieren
Apache / Subversion installieren
aptitude install subversion apache2 libapache2-svn
Neue Seite von der Default Seite kopieren
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/root1024.dyndns.info
Verzeichnis für die neue Seite erstellen
mkdir /var/www/root1024.dyndns.info
touch /var/www/root1024.dyndns.info/index.html
chown -R www-data:www-data /var/www/root1024.dyndns.info/
In /etc/apache2/sites-available/root1024.dyndns.info werden die Werte ServerName und DocumentRoot angepasst
ServerName root1024.dyndns.info # Deine Adresse
DocumentRoot /var/www/root1024.dyndns.info/ # Pfad zum Verzeichnis der Seite
Die Seite aktivieren
a2ensite /etc/apache2/sites-available/root1024.dyndns.info
und apache neustarten
/etc/init.d/apache2 restart
Nachdem wir im DNS Server einen Eintrag von root1024.dyndns.info –> SVN Server IP eingerichtet haben, ist die Webseite jetzt über http://root1024.dyndns.info erreichbar.
Apache um SSL erweitern
Das SSl Modul von Apache aktivieren
a2enmod ssl
Neue Seite von der SSL-Default Seite kopieren
cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/root1024.dyndns.info-ssl
Das SSL Zertifikat erstellen
mkdir /etc/apache2/ssl
openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
ln -sf /etc/apache2/ssl/apache.pem /etc/apache2/ssl/`/usr/bin/openssl x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0
chmod 600 /etc/apache2/ssl/apache.pem
In /etc/apache2/sites-available/root1024.dyndns.info-ssl werden die Werte ServerName, DocumentRoot und SSLCertificateFile angepasst. Die Zeile SSLCertificateKeyFile wird auskommentiert oder entfernt.
ServerName root1024.dyndns.info
DocumentRoot /var/www/root1024.dyndns.info
SSLCertificateFile /etc/apache2/ssl/apache.pem
# SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Ohne Kommentare sieht die Datei so aus
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName root1024.dyndns.info
DocumentRoot /var/www/root1024.dyndns.info/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/root1024.dyndns.info/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/ssl_access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
Die Seite aktivieren
a2ensite /etc/apache2/sites-available/root1024.dyndns.info-ssl
und apache neustarten
/etc/init.d/apache2 restart
Die Webseite ist jetzt unter https://root1024.dyndns.info erreichbar.
Ein neues Repository wird mit
mkdir -p /var/local/subversion/projekt
chown -R www-data:www-data /var/local/subversion/projekt
svnadmin create --fs-type fsfs /var/local/subversion/projekt
angelegt. In den Dateien /etc/apache2/sites-available/root1024.dyndns.info und /etc/apache2/sites-available/root1024.dyndns.info-ssl muss noch der Block
<Location /projekt> # Teil der URL https://root1024.dyndns.info/projekt
DAV svn
AuthType Basic # oder Digest
AuthName "Projekt" # Bereichsname bei der Authentifizierung
AuthUserFile /etc/apache2/subversion.passwd # Pfad zur Datei mit Benutzern und Passwörtern
SVNPath /var/local/subversion/projekt # Pfad zum Repository
Require valid-user # Nur gültige Benutzer haben Zugriff auf das Repository
</Location>
hinzugefügt werden. Der erste Benutzer für Subversion (SVN) wird mit
htpasswd -c /etc/apache2/subversion.passwd Benutzer
erstellt. Jeder weitere Benutzer mit
htpasswd /etc/apache2/subversion.passwd Benutzer
Stefan hat mich noch auf AuthType Digest hingewiesen. Mit dieser Einstellung wird bei der Authentifizierung über HTTP das Passwort nicht im Klartext, sondern verschlüsselt gesendet. So kann das Passwort nicht gesnifft werden. Die übertragenen Daten sind jedoch immer noch unverschlüsselt, weshalb man SSL (HTTPS) nutzen sollte! Mit SSL (HTTPS) werden die Authentifizierung und die übertragenen Daten verschlüsselt, somit reicht wenn über SSL (HTTPS) AuthType Basic.
DynDNS
Um den Router aus dem Internet zu erreichen verwendet ihr entweder direkt eure öffentliche IP oder ihr richtet bei DynDNS einen Account und eine Adresse ein. Zweites ist empfohlen, wenn ihr eine dynamische öffentliche IP habt. Der Router leitet später die richtigen Anfragen an den Subversion (SVN) Server weiter.
Nachdem ihr einen Account bei DynDNS erstellt und eine Adresse (Hostname) eingerichtet habt, ist euer Router über die Adresse erreichbar. Dies kann einfach mit nslookup geprüft werden.
nslookup root1024.dyndns.info
Server: Router
Address: 192.168.0.1
Nicht autorisierende Antwort:
Name: root1024.dyndns.info
Address: 88.198.47.75
Falls die öffentliche IP wechselt muss der Router DynDNS die neue öffentliche IP mitteilen. Dies muss noch am Router konfiguriert werden. Bei pfSense befindet sich die Konfiguration unter “Services –> Dynamic DNS”. Auf dieser Seite den Bereich “Dynamic DNS client” aktivieren und die Daten ausfüllen mit Adresse (Hostname) wie zum Beispiel root1024.dyndns.info, User und Passwort.
Nun könnt ihr euren Router vom Internet her über die Adresse (Hostname) immer erreichen, auch wenn die öffentliche IP wechselt.
Firewall Regel
Damit der Router alle Anfragen auf Port 443 an den Subversion (SVN) Server weitergibt, muss im Router noch eine Firewall Regel konfiguriert werden. In pfSense geschieht dies unter “Firewall –> NAT”. In pfSense kann die NAT Regel wie folgt konfiguriert werden:
Firewall Regel
DNS Forwarding
Mit einem älteren Router habe ich das Problem gehabt, dass die Anfrage an die Adresse zum Provider ging und vom Provider an meinen Subversion (SVN) Server. Die Geschwindigkeit war aus unerklärlichen Gründen kleiner als 1KB/s. Der Router hat nicht gemerkt, dass die Adresse auf eine IP im internen Netzwerk zeigt. Solltet ihr ähnliche Probleme haben, leitet die Adresse wie zum Beispiel root1024.dyndns.info an eurem DNS Server gleich an die IP des Subversion (SVN) Servers weiter.
Jetzt ist der Subversion (SVN) Server vom Internet via HTTPS (Port 443) und vom internen Netzwerk via HTTPS (Port 443) und HTTP (Port 80) über die Adresse verfügbar.
Auf dem Windows Client muss nur ein SVN Client wie zum Beispiel TortoiseSVN (download 32 Bit | download 64 Bit) installiert werden. Die Installation von TortoiseSVN benötigt einen Neustart des Computers.
Das Repository sollte von extern über einen Browser erreichbar sein. Funktioniert dies ist der erste externe Checkout mit TortoiseSVN schnell erledigt.
Checkout
Die SVN Daten können in Dropbox ausgelagert werden für den Fall, dass der eigene Subversion (SVN) Server einmal nicht erreichbar sein sollte. Die Daten können einfach mit rsync oder robocopy synchronisiert werden. Die .svn Ordner können in cmd einfach mit
FOR /F "delims=" %var IN ('dir C:\Users\Benutzer\Desktop\projekt /b /s /a:H .svn') DO rmdir /S /Q %a
und unter Linux mit
find /tmp/projekt/ -name .svn -exec rm -r {} \;
gelöscht werden.
Alles in Allem bin ich mit meinem privaten Subversion (SVN) Server, den ich schon seit ca. 2 Jahren nutze, sehr zufrieden. Ich hoffe der Beitrag hilft euch weiter bei der Installation und Konfiguration von einem Subversion (SVN) Server. Ich muss noch betonen, dass man mit einem eigenen Subversion (SVN) Server sehr viel mehr Möglichkeiten hat als in diesem Beitrag aufgezeigt werden.
Bei Fragen einfach einen Kommentar schreiben oder das Kontaktformular benutzen. Freue mich wie immer über Kritik und Lob.
Ubuntuusers Subversion
Ubuntuusers Apache SSL