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! :)