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