|
|
Zeile 193: |
Zeile 193: |
| [[Kategorie:Python]] | | [[Kategorie:Python]] |
| = Radicale CalDAV Server = | | = Radicale CalDAV Server = |
|
| |
| {{Textkasten|gelb| Anleitung für Radicale 2.x mit Virtualenv in Stichworten: https://lists.hostsharing.net/archiv/support/2018-February/066810.html }}
| |
|
| |
| [http://de.wikipedia.org/wiki/CalDAV 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:
| |
| * 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
| |
| * 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!
| |
|
| |
|
| |
| == Installation ==
| |
|
| |
| === Vorbereitung ===
| |
|
| |
| Ich lege mit HSAdmin einen User ''xyz00-cal'' an und schalte eine Domain ''cal.example.org'' auf.
| |
|
| |
| === Download und Installation des Paketes ===
| |
|
| |
| als User ''xyz00-cal'':
| |
|
| |
| <syntaxhighlight lang=bash>
| |
| pip install --user radicale==1.1.6
| |
| </syntaxhighlight>
| |
|
| |
| === Passenger Konfiguration ===
| |
|
| |
| Vor der Nutzung von [[Phusion Passenger]] bitte unbedingt die dortigen Hinweise zur Nutzung beachten.
| |
|
| |
| Wir wechseln in das Domain-Verzeichnis ''~/doms/cal.example.org/''.
| |
| Dorthin legen wir die folgende Datei an:
| |
|
| |
| ''~/doms/cal.example.org/app/passenger_wsgi.py'' und
| |
| ''~/doms/cal.example.org/app-ssl/passenger_wsgi.py''
| |
|
| |
| <syntaxhighlight lang=bash>
| |
| #!/usr/bin/env python
| |
|
| |
| import radicale
| |
|
| |
| radicale.log.start()
| |
| application = radicale.Application()
| |
| </syntaxhighlight>
| |
|
| |
| ''~/doms/cal.example.org/htdocs/.htaccess'' und
| |
| ''~/doms/cal.example.org/htdocs-ssl/.htaccess''
| |
|
| |
| <syntaxhighlight lang=bash>
| |
| AuthType Basic
| |
| AuthName "Radicale Calendar Server"
| |
| require valid-user
| |
| AuthUserFile /home/pacs/xyz00/users/cal/.htpasswd
| |
| </syntaxhighlight>
| |
|
| |
| 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):
| |
|
| |
| <syntaxhighlight lang=bash>
| |
| htpasswd -c ~/.htpasswd hans
| |
| htpasswd ~/.htpasswd franz
| |
| ...
| |
| </syntaxhighlight>
| |
|
| |
| 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!''
| |
|
| |
| === 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.9/config''.
| |
|
| |
| Hier der Inhalt meiner ''~/.config/radicale/config'':
| |
|
| |
| <syntaxhighlight lang=bash>
| |
| # Config file for Radicale - A simple calendar server
| |
| # Place it into ~/.config/radicale/config (user)
| |
|
| |
| [server]
| |
| base_prefix = /
| |
| can_skip_base_prefix = False
| |
| dns_lookup = False
| |
|
| |
| [encoding]
| |
| request = utf-8
| |
| stock = utf-8
| |
|
| |
| [auth]
| |
| type = None
| |
|
| |
| [rights]
| |
| type = None
| |
|
| |
| [storage]
| |
| type = filesystem
| |
| custom_handler =
| |
| filesystem_folder = ~/.config/radicale/collections
| |
|
| |
| [logging]
| |
| config = ~/.config/radicale/logging
| |
| debug = False
| |
| full_environment = False
| |
| </syntaxhighlight>
| |
|
| |
|
| |
| Hier der Inhalt meiner ''~/.config/radicale/logging'':
| |
|
| |
| <syntaxhighlight lang=bash>
| |
| [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
| |
| </syntaxhighlight>
| |
|
| |
| == 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:
| |
|
| |
| <syntaxhighlight lang=bash>
| |
| AuthType Basic
| |
| AuthName "Radicale Calendar Server"
| |
| AuthUserFile /home/pacs/xyz00/users/cal/.htpasswd
| |
| <FilesMatch "^hans">
| |
| require user hans
| |
| </FilesMatch>
| |
| <FilesMatch "^franz">
| |
| require user franz
| |
| </FilesMatch>
| |
| <FilesMatch "^team">
| |
| require valid-user
| |
| </FilesMatch>
| |
| </syntaxhighlight>
| |
|
| |
| 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 [https://f-droid.org/packages/at.bitfire.davdroid/ DavDroid] als App zur Synchronisation des Android-Kalenders.
| |
|
| |
| ==== Lightning ====
| |
|
| |
| Hier kann man jeden einzelnen Kalender mit seiner vollständigen URL abonnieren.
| |
|
| |
| Über die Funktion "Create Calendar":
| |
| # "On the Network"
| |
| # "CalDAV" mit "Location": ''https://cal.example.org/franz/privat''
| |
| # Namen vergeben und Farbe wählen
| |
| # ggf. noch User und Passwort angeben
| |
| # das war's
| |
|
| |
|
| |
|
| |
| ----
| |
| [[Kategorie:HSDoku]]
| |
| [[Kategorie:Installationsanleitungen]]
| |
| [[Kategorie:CalDAV]]
| |
| [[Kategorie:Passenger]]
| |
| [[Kategorie:Python]]
| |
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 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!
Installation
Vorbereitung
Ich lege mit HSAdmin einen User xyz00-cal an und schalte eine Domain cal.example.org auf.
Download und Installation des Paketes
als User xyz00-cal:
pip install --user radicale==1.1.6
Passenger Konfiguration
Vor der Nutzung von Phusion Passenger bitte unbedingt die dortigen Hinweise zur Nutzung beachten.
Wir wechseln in das Domain-Verzeichnis ~/doms/cal.example.org/.
Dorthin legen wir die folgende Datei an:
~/doms/cal.example.org/app/passenger_wsgi.py und
~/doms/cal.example.org/app-ssl/passenger_wsgi.py
#!/usr/bin/env python
import radicale
radicale.log.start()
application = radicale.Application()
~/doms/cal.example.org/htdocs/.htaccess und
~/doms/cal.example.org/htdocs-ssl/.htaccess
AuthType Basic
AuthName "Radicale Calendar Server"
require valid-user
AuthUserFile /home/pacs/xyz00/users/cal/.htpasswd
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 https://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.9/config.
Hier der Inhalt meiner ~/.config/radicale/config:
# Config file for Radicale - A simple calendar server
# Place it into ~/.config/radicale/config (user)
[server]
base_prefix = /
can_skip_base_prefix = False
dns_lookup = False
[encoding]
request = utf-8
stock = utf-8
[auth]
type = None
[rights]
type = None
[storage]
type = filesystem
custom_handler =
filesystem_folder = ~/.config/radicale/collections
[logging]
config = ~/.config/radicale/logging
debug = False
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/xyz00/users/cal/.htpasswd
<FilesMatch "^hans">
require user hans
</FilesMatch>
<FilesMatch "^franz">
require user franz
</FilesMatch>
<FilesMatch "^team">
require valid-user
</FilesMatch>
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 DavDroid als App zur Synchronisation des Android-Kalenders.
Lightning
Hier kann man jeden einzelnen Kalender mit seiner vollständigen URL abonnieren.
Über die Funktion "Create Calendar":
- "On the Network"
- "CalDAV" mit "Location": https://cal.example.org/franz/privat
- Namen vergeben und Farbe wählen
- ggf. noch User und Passwort angeben
- das war's
Radicale CalDAV Server