Multiples proyectos con trac y svn usando HTTPS

Voy a explicar como montar el sistema de gestion de proyectos trac y subversion usando https para trabajar con subversion. Yo lo he montado en una debian usando apache2, asi que lo primero que necesitamos es instalar todo lo necesario

apt-get install trac subversion apache2 subversion libapache2-svn libapache2-mod-python2.3

Una vez descargado e instalado creamos el certificado necesario para usar tanto trac y subversion bajo https. Entra en el directorio /etc/apache2/ssl y ejecuta lo siguiente:

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Ahora ya tenemos listo los certificados, asi que ahora solo nos queda configurar el apache. Yo he creado un trac.dominio.ext y un svn.dominio.ext para hacer esto, pero esto va a gusto de cada uno. Yo como uso dos subdominios distintos, lo tengo en ficheros separados.

Primero editaremos el trac, asi que creamos el fichero /etc/apache2/sites-available/trac.domain.ext

NameVirtualHost *:443
<VirtualHost *:443>
#Activate SSL
SSLEngine on
 
SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
 
#VirtualHost Servername
ServerName trac.domain.ext
ServerAdmin [email protected]
 
DocumentRoot /opt/projects/trac
 
#Authentication
<Location />
AuthType Basic
AuthName "Trac"
AuthUserFile /opt/projects/.htpasswd
Require valid-user
 
#Trac
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /opt/projects/trac/
PythonOption TracUriRoot /
 
</Location>
</VirtualHost>

El fichero no necesita demasiada explicacion, simplemente le decimos que active el SSL, que pida autentificacion y cargamos el modulo del trac y le especificamos el path de donde estan todos nuestros proyectos.

Ahora vamos con el fichero /etc/apache2/sites-available/svn.domain.ext

NameVirtualHost *:443
<VirtualHost *:443>
#Activate SSL
SSLEngine on
 
SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
 
#VirtualHost Servername
ServerName svn.domain.ext
ServerAdmin [email protected]
 
DocumentRoot /opt/projects/svn
<Location />
DAV svn
 
#Authentication
AuthType Basic
AuthName "Subversion"
AuthUserFile /opt/projects/.htpasswd
Require valid-user
 
#Subversion
SVNParentPath /opt/projects/svn
SVNListParentPath on
SVNAutoVersioning On
</Location>
 
<LocationMatch "/.+">
#Subversion permission file
AuthzSVNAccessFile /opt/projects/svn/.htpasswd
</LocationMatch>
</VirtualHost>

Es importante separar el AuthzSVNAccessFile de ya que sino no listara todos los proyectos en http://svn.domain.ext/ por problemas de permisos.

Ahora que tenemos estos ficheros listos, hay que activar el modulo de ssl en el apache2 y los dos dominios.

vi /etc/apache2/ports.conf
<IfModule mod_ssl.c>
Listen 443
</IfModule>
cd /etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/dav.load .
ln -s /etc/apache2/mods-available/dav_svn.load .
ln -s /etc/apache2/mods-available/mod_python.load .
ln -s /etc/apache2/mods-available/ssl.conf .
ln -s /etc/apache2/mods-available/ssl.load .
 
cd /etc/apache2/sites-enabled
ln -s /etc/apache2/sites-available/svn.domain.ext 001-svn.domain.ext
ln -s /etc/apache2/sites-available/trac.domain.ext 001-trac.domain.ext

Ahora vamos a crear un proyecto de prueba

mkdir -p /opt/projects/svn
mkdir -p /opt/projects/trac
svnadmin create /opt/projects/svn/NewProject
trac-admin /opt/projects/trac/NewProject initenv
Project Name [My Project]> NewProject
Database connection string [sqlite:db/trac.db]>
Path to repository [/var/svn/test]> /opt/projects/svn/NewProject
Templates directory [/usr/share/trac/templates]>
Creating and Initializing Project
Configuring Project
trac.repository_dir
trac.database
trac.templates_dir
project.name
Installing default wiki pages
..............

Ahora creamos los ficheros de acceso de usuarios.

[Repositorio:/Path]
user = [ [r[w]]]