radicale: servidor de CalDAV

Hace ya unos meses que me persiguen para integrar el calendario de varias herramientas, como owncloud (nextcloud), egroupware, thunderbird y el móvil pero ninguno de los dos primeros las versiones que tengo instaladas permiten compartir el calendario públicamente para que las otras herramientas puedan acceder a él. Así que sólo nos queda o tirar de googlecalendar o montar nuestro propio sistema de CalDAV.

Primero de todo remarcar que vamos a tener los calendarios en 2 modos, sólo lectura y otros de escritura y lectura, el motivo es que algunos calendarios van a ser públicos y otros privados, los públicos no se van a poder modificar y los entregaremos en formato ics, los privados si :)

Vamos a ello

Aunque radicale está en los repositorios de debian, vamos a descargarnos la última versión de su página web.

root@radicale-dav:~# apt-get install apache2

Instalaremos python-setuptools y apache2-utils para crear passwords y usuarios a nuestros calendarios

root@radicale-dav:~# apt-get install python-setuptools apache2-utils

Ahora descargamos radicale y lo instalamos

root@radicale-dav:~# cd /var/www
root@radicale-dav:/var/www# wget -c --no-check-certificate https://pypi.python.org/packages/source/R/Radicale/Radicale-1.1.1.tar.gz
root@radicale-dav:/var/www# tar xvzf Radicale-1.1.1.tar.gz
root@radicale-dav:/var/www# mv Radicale-1.1.1 radicale

Ahora creamos un sitio donde vamos a almacenar el fichero de configuración

root@radicale-dav:/var/www/radicale# mkdir /etc/radicale
root@radicale-dav:/var/www/radicale# cp config /etc/radicale/

Y ahora lo modificamos y dejamos algunas líneas como indico

root@radicale-dav:/var/www/radicale# vi /etc/radicale/config
hosts = 127.0.0.1:5232
daemon = True
base_prefix = /
type = filesystem
filesystem_folder = /var/www/radicale_collections

Creamos el usuario que va a hacer funcionar radicale y creamos el directorio donde se van a guardar los calendarios de los usuarios

root@radicale-dav:/var/www# useradd radicale
root@radicale-dav:/var/www# mkdir /var/www/radicale_collections
root@radicale-dav:/var/www# chown radicale:radicale radicale_collections

Ahora vamos a configurar apache para que se conecte al radicale

< VirtualHost *:80 >
        ServerName calendars.capa8.net
        ServerAlias *.calendars.capa8.net

        ProxyRequests off
        < Proxy * >
                Order deny,allow
                Allow from all
        < /Proxy >

        ProxyPreserveHost On

        ProxyPass / http://localhost:5232/
        ProxyPassReverse / http://localhost:5232/

        < Location / >
                AuthType Basic
                AuthName "Radicale Login"
                AuthBasicProvider file
                AuthUserFile "/etc/radicale/radicale_passwords"
                Require valid-user
        < /Location >

        Alias "/public/" "/var/www/public_calendars/"
        Alias "/public" "/var/www/public_calendars/"
        < Location /public >
                ProxyPass "!"
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Satisfy Any
                Allow from all
        < /Location >
< /VirtualHost >

Aquí nos podemos currar, incluso es recomendable, ponerlo bajo https y meterle un certificado válido con letsencrypt :)

root@radicale-dav:~# wget --no-check-certificate https://dl.eff.org/certbot-auto
root@radicale-dav:~# chmod +x certbot-auto
root@radicale-dav:~# ./certbot-auto --apache certonly
root@radicale-dav:~# vi /etc/crontab
# renova certificat letsencrypt
0  21   * * *   root    /root/certbot-auto renew >> /var/log/le-renew.log

Después el fichero de apache tendría que ser así:

< VirtualHost *:80 >
        ServerName calendars.capa8.net
        ServerAlias *.calendars.capa8.net

        RedirectPermanent / https://calendars.capa8.net
< /VirtualHost >

< VirtualHost *:443 >
        # Capa8
        ServerAdmin info@capa8.net

        ServerName calendars.capa8.net
        ServerAlias *.calendars.capa8.net

        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/calendars.capa8.net/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/calendars.capa8.net/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf

        ProxyRequests off
        < Proxy * >
                Order deny,allow
                Allow from all
        < /Proxy >

        ProxyPreserveHost On

        ProxyPass / http://localhost:5232/
        ProxyPassReverse / http://localhost:5232/

        < Location / >
                AuthType Basic
                AuthName "Radicale Login"
                AuthBasicProvider file
                AuthUserFile "/etc/radicale/radicale_passwords"
                Require valid-user
        < /Location >

        Alias "/public/" "/var/www/public_calendars/"
        Alias "/public" "/var/www/public_calendars/"
        < Location /public >
                ProxyPass "!"
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Satisfy Any
                Allow from all
        < /Location >
< /VirtualHost >

Y habilitamos el site, el ssl y el proxy de apache

root@radicale-dav:/etc/apache2/sites-available# a2enmod proxy_http ssl
root@radicale-dav:/etc/apache2/sites-available# a2ensite radicale
root@radicale-dav:/etc/apache2/sites-available# service apache2 restart

Si nos fijamos hay un directorio public, donde guardaremos los ics publicos, así que creamos el directorio y un fichero para darnos cuenta que estamos ahí… yo he creado un fichero index.html y un .htaccess

root@radicale-dav:/var/www# mkdir public_calendars
root@radicale-dav:/var/www# cd public_calendars/
root@radicale-dav:/var/www/public_calendars# vi .htaccess
DirectoryIndex index.html
root@radicale-dav:/var/www/public_calendars# vi index.html
< html >
< head >
< title > calendaris publics < /title >
< /head >
< body >
< h1 > public calendars < /h1 >
< /body >
< /html >
root@radicale-dav:/var/www/public_calendars# cd ..
root@radicale-dav:/var/www# chown -R www-data:www-data public_calendars/

Ahora crearemos el fichero de passwords para los usuarios de radicale

root@radicale-dav:/etc/radicale# htpasswd -cd radicale_passwords usuario1
New password: 
Re-type new password: 
Warning: Password truncated to 8 characters by CRYPT algorithm.
Adding password for user usuario1

Si queremos crear mas usuarios será usar el comando así

root@radicale-dav:/etc/radicale# htpasswd radicale_passwords usuario2

Ahora vamos a indicar que el usuario radicale arranque radicale al iniciar el sistema

root@radicale-dav:~# vi /etc/rc.local
su -c '/var/www/radicale/radicale.py --config /etc/radicale/config' radicale

Es posible que sea necesario instalar sudo

root@radicale-dav:~# apt-get install sudo

Reiniciamos la maquina y comprobamos que podemos acceder al dominio configurado, en mi caso: https://calendars.capa8.net y nos pida un usuario y password.

A continuación probamos de acceder a https://calendars.capa8.net/public/ para ver si nos permite acceder sin usuario.

Ahora ya sólo nos quedará crear un script o un cron que copie los calendarios públicos que están en /var/www/radicale_collections a /var/www/public_calendars

root@radicale-dav:~# vi /etc/crontab
# publica calendaris
*/10 *  * * *   root cp /var/www/radicale_collections/usuario1 /var/www/public_calendars/

Ahora ya lo podemos configurar a nuestro cliente de calDAV poniendo la dirección:

https://calendars.capa8.net/usuario1/nombrecalendario

Listos! :)

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.