Własny serwer usługi CalDav oraz CardDav może w bardzo łatwy sposób pomóc stworzyć nam platformę synchronizacji kalendarzy i kontaktów pomiędzy urządzeniami takimi jak smartphone oraz usługami typu webmail.
Pobierzmy najnowszą wersję baikal ze strony: http://baikal-server.com/ i rozpakujemy do katalogu np. /var/www/dav.example.com
wget http://baikal-server.com/get/baikal-regular-0.2.7.tgz
Następnie rozpakowujemy
tar zxvf baikal-regular-0.2.7.tgz
Przenosimy pliki do katalogu /var/www/dav.example.com
mv baikal-regular /var/www/dav.example.com
Utworzmy plik vhost dla Apache
# vim /etc/apache2/sites-available/dav.example.com.conf
<VirtualHost *:80>
DocumentRoot /var/www/dav.example.com/html
ServerName dav.example.com
RewriteEngine On
RewriteRule /.well-known/carddav /card.php [R,L]
RewriteRule /.well-known/caldav /cal.php [R,L]
<Directory "/var/www/dav.example.com/html">
Options None
Options +FollowSymlinks
AllowOverride All
</Directory>
</VirtualHost>
lub bardziej zaawansowany plik z SSL (razem z Let’sEncrypt) + php5_fastcgi zgodny z:
# php5_fastcgi + ssl baikal config file
<Directory /var/www/dav.example.com>
AllowOverride None
Require all denied
</Directory>
<VirtualHost *:80>
ServerName dav.example.com
Redirect permanent / https://dav.example.com/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost ip_address:443>
ServerAdmin webmaster@example.com
ServerName dav.example.com:443
DocumentRoot /var/www/dav.example.com/html/
ErrorLog /var/www/dav.example.com/logs/error.log
CustomLog /var/www/dav.example.com/logs/access.log combined
RewriteEngine On
RewriteRule /.well-known/carddav /dav.php [R,L]
RewriteRule /.well-known/caldav /dav.php [R,L]
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/dav.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dav.example.com/privkey.pem
<Directory "/var/www/dav.example.com/html">
Options None
Options +FollowSymlinks
AllowOverride All
</Directory>
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
<IfModule mod_fastcgi.c>
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi_dav.example.com
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi_dav.example.com -socket /var/run/php5-fpm_dav.example.com.sock -pass-header Authorization
</IfModule>
</VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Uruchommy teraz potrzebne moduły apache oraz zresetujmy go by uruchomić vhost:
a2enmod rewrite a2ensite dav.example.com service apache2 restart
Nadajny uprawnienia dla katalogu (w zależności jaki użytkownik uruchamia apache np. www-data):
chown www-data:www-data -R /var/www/dav.example.com
Utwórzmy plik, który udostępni nam panel konfiguracyjny:
touch /var/www/dav.example.com/Specific/ENABLE_INSTALL
W zależności czy skonfigurowaliśmy vhost dla Apacha z lub bez SSL wchodzimy na stronę
http://dav.example.com #lub https://dav.example.com
Ustawmy wszystkie opcje według upodobań, w następnym kroku będziemy wybierać czy baza będzie znajdować sie w pliku sqlite, czy w mysql/mariadb.
I oto w ten sposób uruchomiliśmy platformę carddav, caldav dla własnych potrzeb.
Aktualizacja:
Osobiście zalecam aktualizację do nowszej wersji, która zanajduje sie na github-ie projektu.
Dla przykładu, na chwilę obecną najnowszą wersją jest 0.4.2
Zalecane jest utworzenie kopii zapasowej bazy danych, z której korzysta baikal.
Pobieramy baikal do katalogu z zainstalowanym naszym baikal-em w wersji 0.2.7
wget https://github.com/fruux/Baikal/releases/download/0.4.2/baikal-0.4.2.zip
Rozpakowujemy archiwum
unzip baikal-0.4.2.zip
Ustawiamy odpowiedniego właściciela plików i przenosimy je bez katalogu ’Specific’
Wejdźmy na panel administracyjny dav.example.com, a ukaże się nam napis np:
Upgrading Baïkal from version 0.2.7 to version 0.4.2
Po zalogowaniu nastąpi proces aktualizacji bazy i wszystko powinno zakończyć sie powodzeniem.
Różnicą między wersją 0.2.x a 0.4.x jest zmiana URL card.php i cal.php został zastąpiony dav.php, o ile stare linki będą działać bez większego problemu, o tyle będą one wygaszone z kolejnymi aktualizacjami, więc lepiej od razu używać dav.php w URL.
Dopełnieniem konfiguracji jest ustawienie odpowiednich rekordów DNS:
_caldavs._tcp.example.com. IN SRV 0 5 443 dav.example.com. _carddavs._tcp.example.com. IN SRV 0 5 443 dav.example.com.
Dzięki nim programy obsługujące format Dav odnajdą serwer usługi.
Przykładowe konfiguracje:
Thunderbird:
#CalDav https://dav.example.com/dav.php/calendars/__user__/default
Thunderbird + Cardbook
Add address book > Remote
Type: CardDav URL: https://dav.example.com/dav.php/addressbooks/__user__/default/ Username: user Password: password Validate > Next
Android + DavDroid:
Pre-emptive authentication: Off