RadicaleCalDAVServer: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
(einfache Installation mit pip (ohne virtualenv))
(Skripte in app und app-ssl müssen nicht ausführbar sein)
Zeile 7: Zeile 7:
Wenn man freie Software einsetzen will, bieten sich folgende Anwendungen an:
Wenn man freie Software einsetzen will, bieten sich folgende Anwendungen an:
* Das [http://www.mozilla.org/projects/calendar/lightning/ Lightning-Plugin] für Thunderbird (unter Linux und Windows)
* Das [http://www.mozilla.org/projects/calendar/lightning/ Lightning-Plugin] für Thunderbird (unter Linux und Windows)
* [https://f-droid.org/repository/browse/?fdid=org.gege.caldavsyncadapter CalDAV Sync Adapter] als Android-App zur Synchronisation des Kalenders
* [http://acal.me aCal] als Android-App
* Der [http://caldavsynchronizer.org/ CaldavSynchronizer] für Outlook
 
In diesem Artikel wird die Installation eines CalDAV-Server in einem normalen Hostsharing-Paket beschrieben, als leichtgewichtigen Server nutze ich den [http://radicale.org/ Radicale CalDAV Server]. Der Server kann mit Hilfe von Passenger betrieben werden.
 
In dieser Installationsanleitung wird die Installation für HTTP und HTTPS (Verzeichnisse "app-ssl" und "htdocs-ssl") parallel vorgenommen. Ihr solltet darauf achten, den CalDAV- / Card-Server im produktiven
Betrieb immer nur über HTTPS (also mit SSL-/TLS_Verschlüsselung) anzusprechen. Schliesslich werden Passworte und personenbezogene Daten übertragen!


In diesem Artikel wird die Installation eines CalDAV-Server in einem normalen Hostsharing-Paket beschrieben, als leichtgewichtigen Server nutze ich den [http://radicale.org/ Radicale CalDAV Server]. Der Server kann mit Hilfe von [[Flup]] als FastCGI Server betrieben werden.


== Installation ==
== Installation ==
Zeile 22: Zeile 17:
Ich lege mit HSAdmin einen User ''xyz00-cal'' an und schalte eine Domain ''cal.example.org'' auf.
Ich lege mit HSAdmin einen User ''xyz00-cal'' an und schalte eine Domain ''cal.example.org'' auf.


=== Download und Installation des Paketes ===
=== Download und Entpacken der Pakete ===
 
* Radicale Download: [http://radicale.org/download/], die aktuelle Version beim Schreiben des Artikel: 0.6.3
* Flup Download: [http://www.saddi.com/software/flup/dist/], aktuell ist heute: 1.0.2


als User ''xyz00-cal'':
als User ''xyz00-cal'':


<pre>
<pre>
  pip install --user radicale
  wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
wget http://pypi.python.org/packages/source/R/Radicale/Radicale-0.6.3.tar.gz
tar xzf flup-1.0.2.tar.gz
tar xzf Radicale-0.6.3.tar.gz
</pre>
 
=== Installation der Python Eggs ===
 
Die Eggs sollen jeweils im Verzeichnis des aktuellen Users installiert werden. Der Aufruf des Setup-Skripts dazu:
 
<pre>
cd ~/flup-1.0.2
python setup.py install --user
cd ~/Radicale-0.6.3
python setup.py install --user
</pre>
 
Danach sollten sich im Unterverzeichnis ~/.local/ die entsprechenden Python-Skripte finden:
 
<pre>
ls -l ~/.local/bin/ ~/.local/lib/python2.6/site-packages/
</pre>
 
<pre>
/home/pacs/xyz00/users/cal/.local/bin/:
total 4
-rwxr-xr-x 1 xyz00-cal xyz00 1001 Dec 28 12:04 radicale
 
/home/pacs/xyz00/users/cal/.local/lib/python2.6/site-packages/:
total 12
-rw-r--r-- 1 xyz00-cal xyz00 1797 Dec 28 12:04 Radicale-0.6.3.egg-info
-rw-r--r-- 1 xyz00-cal xyz00  208 Dec 28 12:01 easy-install.pth
drwxr-xr-x 4 xyz00-cal xyz00  32 Dec 28 12:01 flup-1.0.2-py2.6.egg
drwxr-xr-x 3 xyz00-cal xyz00 4096 Dec 28 12:04 radicale
</pre>
</pre>


=== Passenger Konfiguration ===
=== FastCGI Konfiguration ===


Wir wechseln in das Domain-Verzeichnis ''~/doms/cal.example.org/''.
Wir wechseln in das Domain-Verzeichnis ''~/doms/cal.example.org/''.
Dorthin legen wir die folgende Datei an:
Dort legen wir folgende Dateien an:


''~/doms/cal.example.org/app/passenger_wsgi.py'' und
''~/doms/cal.example.org/fastcgi/radicale.fcgi'' bzw.
''~/doms/cal.example.org/app-ssl/passenger_wsgi.py''
''~/doms/cal.example.org/fastcgi-ssl/radicale.fcgi''


<pre>
<pre>
#!/usr/bin/env python
#!/usr/bin/env python
 
from flup.server.fcgi import WSGIServer
import radicale
import radicale
radicale.log.start()
radicale.log.start()
application = radicale.Application()
app = radicale.Application()
WSGIServer(app).run()
</pre>
</pre>


''~/doms/cal.example.org/htdocs/.htaccess'' und
''~/doms/cal.example.org/htdocs/.htaccess'' bzw.
''~/doms/cal.example.org/htdocs-ssl/.htaccess''
''~/doms/cal.example.org/htdocs-ssl/.htaccess''


Zeile 55: Zeile 86:
require valid-user
require valid-user
AuthUserFile /home/pacs/xyz00/users/cal/.htpasswd
AuthUserFile /home/pacs/xyz00/users/cal/.htpasswd
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} radicale.fcgi$
RewriteRule ^(.*)$ /fastcgi-bin/radicale.fcgi [QSA,L]
</pre>
</pre>


Zeile 66: Zeile 101:
</pre>
</pre>


An dieser Stelle sollte ein Aufruf von ''https://cal.example.org'' im Browser nach Eingabe des Passwortes für ''hans'' oder ''franz'' die folgende Seite liefern: ''Radicale works!''
An dieser Stelle sollte ein Aufruf von ''http://cal.example.org'' im Browser nach Eingabe des Passwortes für ''hans'' oder ''franz'' die folgende Seite liefern: ''Radicale works!''


=== Radicale Konfiguration ===
=== Radicale Konfiguration ===


Zuletzt bleibt noch die Erstellung einer Konfigurationsdatei für den Radicale-Server.
Zuletzt bleibt noch die Erstellung einer Konfigurationsdatei für den Radicale-Server.
Ein Template für die Datei findet Ihr in ''~/Radicale-0.9/config''.
Ein Template für die Datei findet Ihr in ''~/Radicale-0.6.3/config''.


Hier der Inhalt meiner ''~/.config/radicale/config'':
Hier der Inhalt meiner ''~/.config/radicale/config'':
Zeile 78: Zeile 113:
# Config file for Radicale - A simple calendar server
# Config file for Radicale - A simple calendar server
# Place it into ~/.config/radicale/config (user)
# Place it into ~/.config/radicale/config (user)
[server]
base_prefix = /
can_skip_base_prefix = False
dns_lookup = False


[encoding]
[encoding]
Zeile 88: Zeile 118:
stock = utf-8
stock = utf-8


[auth]
[acl]
type = None
# Value: None | htpasswd | LDAP
 
[rights]
type = None
type = None


[storage]
[storage]
type = filesystem
# Folder for storing local calendars, created if not present
custom_handler =
folder = ~/.config/radicale/calendars
filesystem_folder = ~/.config/radicale/collections


[logging]
[logging]
# Logging configuration file
# For more information about the syntax of the configuration file, see:
# http://docs.python.org/library/logging.config.html
config = ~/.config/radicale/logging
config = ~/.config/radicale/logging
# Set the default logging level to debug
debug = False
debug = False
# Store all environment variables (including those set in the shell)
full_environment = False
full_environment = False
</pre>
</pre>
Zeile 142: Zeile 174:
AuthType Basic
AuthType Basic
AuthName "Radicale Calendar Server"
AuthName "Radicale Calendar Server"
AuthUserFile /home/pacs/xyz00/users/cal/.htpasswd
AuthUserFile /home/pacs/peh06/users/cal/.htpasswd
<FilesMatch "^hans">
<FilesMatch "^hans">
require user hans
require user hans
Zeile 152: Zeile 184:
require valid-user
require valid-user
</FilesMatch>
</FilesMatch>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} radicale.fcgi$
RewriteRule ^(.*)$ /fastcgi-bin/radicale.fcgi [QSA,L]
</pre>
</pre>


Zeile 175: Zeile 211:
Über die Funktion "Create Calendar":
Über die Funktion "Create Calendar":
# "On the Network"
# "On the Network"
# "CalDAV" mit "Location": ''https://cal.example.org/franz/privat''
# "CalDAV" mit "Location": ''http://cal.example.org/franz/privat''
# Namen vergeben und Farbe wählen
# Namen vergeben und Farbe wählen
# ggf. noch User und Passwort angeben
# ggf. noch User und Passwort angeben
# das war's
# das war's
==== aCal ====
Bei den Einstellungen "erweitert" auswählen.
# Benutzername
# Passwort
# Servername: ''cal.example.org''
# ServerPfad: ''/franz/''
# Authentifizierungsmethode: ''Basic''
# SSL verwenden: Ja, falls passendes Zertifikat für HTTPS installiert
# Serverport: 80 bzw. 443




Zeile 186: Zeile 233:
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Installationsanleitungen]]
[[Kategorie:CalDAV]]
[[Kategorie:CalDAV]]
[[Kategorie:Passenger]]

Version vom 16. Februar 2017, 18:56 Uhr

Radicale CalDAV Server

CalDAV ist eine Erweiterung des WebDAV- (und damit des HTTP-) Protokolls, um Kalenderdaten (Termine und Aufgaben) auf einem Server zu speichern.

Apple nutzt diese Protokoll für seine Clients (iCal-Anwendung und Kalender-App auf dem iPhone) und bietet einen entsprechenden Server an. Dadurch gewinnt CalDAV zunehmende Bedeutung.

Wenn man freie Software einsetzen will, bieten sich folgende Anwendungen an:

In diesem Artikel wird die Installation eines CalDAV-Server in einem normalen Hostsharing-Paket beschrieben, als leichtgewichtigen Server nutze ich den Radicale CalDAV Server. Der Server kann mit Hilfe von Flup als FastCGI Server betrieben werden.

Installation

Vorbereitung

Ich lege mit HSAdmin einen User xyz00-cal an und schalte eine Domain cal.example.org auf.

Download und Entpacken der Pakete

  • Radicale Download: [1], die aktuelle Version beim Schreiben des Artikel: 0.6.3
  • Flup Download: [2], aktuell ist heute: 1.0.2

als User xyz00-cal:

 wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
 wget http://pypi.python.org/packages/source/R/Radicale/Radicale-0.6.3.tar.gz
 tar xzf flup-1.0.2.tar.gz
 tar xzf Radicale-0.6.3.tar.gz

Installation der Python Eggs

Die Eggs sollen jeweils im Verzeichnis des aktuellen Users installiert werden. Der Aufruf des Setup-Skripts dazu:

 cd ~/flup-1.0.2
 python setup.py install --user
 cd ~/Radicale-0.6.3
 python setup.py install --user

Danach sollten sich im Unterverzeichnis ~/.local/ die entsprechenden Python-Skripte finden:

 ls -l ~/.local/bin/ ~/.local/lib/python2.6/site-packages/
/home/pacs/xyz00/users/cal/.local/bin/:
total 4
-rwxr-xr-x 1 xyz00-cal xyz00 1001 Dec 28 12:04 radicale

/home/pacs/xyz00/users/cal/.local/lib/python2.6/site-packages/:
total 12
-rw-r--r-- 1 xyz00-cal xyz00 1797 Dec 28 12:04 Radicale-0.6.3.egg-info
-rw-r--r-- 1 xyz00-cal xyz00  208 Dec 28 12:01 easy-install.pth
drwxr-xr-x 4 xyz00-cal xyz00   32 Dec 28 12:01 flup-1.0.2-py2.6.egg
drwxr-xr-x 3 xyz00-cal xyz00 4096 Dec 28 12:04 radicale

FastCGI Konfiguration

Wir wechseln in das Domain-Verzeichnis ~/doms/cal.example.org/. Dort legen wir folgende Dateien an:

~/doms/cal.example.org/fastcgi/radicale.fcgi bzw. ~/doms/cal.example.org/fastcgi-ssl/radicale.fcgi

#!/usr/bin/env python
from flup.server.fcgi import WSGIServer
import radicale
radicale.log.start()
app = radicale.Application()
WSGIServer(app).run()

~/doms/cal.example.org/htdocs/.htaccess bzw. ~/doms/cal.example.org/htdocs-ssl/.htaccess

AuthType Basic
AuthName "Radicale Calendar Server"
require valid-user
AuthUserFile /home/pacs/xyz00/users/cal/.htpasswd
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} radicale.fcgi$
RewriteRule ^(.*)$ /fastcgi-bin/radicale.fcgi [QSA,L]

Es fehlt noch das Anlegen der ~/.htpasswd-Datei mit den verschlüsselten Passworten der User. Dazu rufen wir (für die User hans und franz) folgendes Kommando auf (htpasswd -c erzeugt die Datei):

 htpasswd -c ~/.htpasswd hans
 htpasswd ~/.htpasswd franz
 ...

An dieser Stelle sollte ein Aufruf von http://cal.example.org im Browser nach Eingabe des Passwortes für hans oder franz die folgende Seite liefern: Radicale works!

Radicale Konfiguration

Zuletzt bleibt noch die Erstellung einer Konfigurationsdatei für den Radicale-Server. Ein Template für die Datei findet Ihr in ~/Radicale-0.6.3/config.

Hier der Inhalt meiner ~/.config/radicale/config:

# Config file for Radicale - A simple calendar server
# Place it into ~/.config/radicale/config (user)

[encoding]
request = utf-8
stock = utf-8

[acl]
# Value: None | htpasswd | LDAP
type = None

[storage]
# Folder for storing local calendars, created if not present
folder = ~/.config/radicale/calendars

[logging]
# Logging configuration file
# For more information about the syntax of the configuration file, see:
# http://docs.python.org/library/logging.config.html
config = ~/.config/radicale/logging
# Set the default logging level to debug
debug = False
# Store all environment variables (including those set in the shell)
full_environment = False


Hier der Inhalt meiner ~/.config/radicale/logging:

[loggers]
keys = root

[handlers]
keys = file

[formatters]
keys = full

[logger_root]
level = INFO
handlers = file

[handler_file]
class = FileHandler
args = ('/home/pacs/xyz00/users/cal/var/radicale.log',)
formatter = full

[formatter_full]
format = %(asctime)s - %(levelname)s: %(message)s

Nutzung der Kalender

Zugriffsrechte

Zu diesem Zeitpunkt können die User hans und franz jeweils auf alle Kalender zugreifen. In einer größeren Organisation ist das sicher nicht ausreichend.

Im der oben beschriebenen Konfiguration überlässt man die Zugriffskontrolle am besten dem Apache-Webserver. Das kann man einfach über die bereits vorhandene .htaccess-Datei regeln:

AuthType Basic
AuthName "Radicale Calendar Server"
AuthUserFile /home/pacs/peh06/users/cal/.htpasswd
<FilesMatch "^hans">
require user hans
</FilesMatch>
<FilesMatch "^franz">
require user franz
</FilesMatch>
<FilesMatch "^team">
require valid-user
</FilesMatch>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} radicale.fcgi$
RewriteRule ^(.*)$ /fastcgi-bin/radicale.fcgi [QSA,L]

So können beide User jeweils eigene Kalender anlegen, z.B:

  • /hans/privat
  • /hans/aufgaben
  • /franz/kalender

Unter dem Pseudouser team können gemeinsame Kalender verwaltet werden:

  • /team/meetings
  • /team/seminarraum

Mit einer zusätzlichen Datei .htgroups kann man auch komplexere Szenarien implementieren.

Client Konfiguration

Ich selbst verwende das Lightning-Plugin zu Thunderbird und aCal als Android-App.

Lightning

Hier kann man jeden einzelnen Kalender mit seiner vollständigen URL abonnieren.

Über die Funktion "Create Calendar":

  1. "On the Network"
  2. "CalDAV" mit "Location": http://cal.example.org/franz/privat
  3. Namen vergeben und Farbe wählen
  4. ggf. noch User und Passwort angeben
  5. das war's

aCal

Bei den Einstellungen "erweitert" auswählen.

  1. Benutzername
  2. Passwort
  3. Servername: cal.example.org
  4. ServerPfad: /franz/
  5. Authentifizierungsmethode: Basic
  6. SSL verwenden: Ja, falls passendes Zertifikat für HTTPS installiert
  7. Serverport: 80 bzw. 443