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