Baikal – własny kalendarz z listą ToDo (CalDav) oraz książka adresowa (CardDav)

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

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*