auto hébergement de ses tùches, agendas et contacts
Sun, 12 Jan 2025 11:10:30 +0200Dans la continuitĂ© de WebDAV, CalDAV et CardDAV sont des extensions Ă WebDAV. Ils permettent pour l’un de gĂ©rer des Ă©vĂšnements comme des tĂąches, mĂ©mos, agendas et pour l’autre de gĂ©rer ses contacts dans un carnet d’adresse.
J’apprĂ©cie depuis longtemps Todoist comme gestionnaire de tĂąches, cependant je souhaite utiliser un logiciel libre avec un serveur CalDAV auto-hĂ©bergĂ©. De mĂȘme cela me gĂšne depuis longtemps de ne pas possĂ©der moi mĂȘme mes contacts. Le plus souvent ils sont stockĂ©s et gĂ©rĂ©s par un fournisseur de mail comme Gmail, Outlook, et dans mon cas Protonmail.
Sauf que la gestion des contacts par Proton n’est pas satisfaisante, sans doute Ă cause de leurs contraintes techniques ils ne proposent pas de serveur CardDAV. De fait une application mail comme Evolution qui gĂšre trĂšs bien les serveurs CardDAV ne peut pas accĂ©der aux contacts de Proton. En fait la connexion d’un client mail desktop vers Protonmail passe par un Bridge qui fonctionne plutĂŽt bien mais ne permet qu’une passerelle SMTP et IMAP. Ainsi la complĂ©tion lorsque l’on commence Ă taper le mail d’un destinataire n’existe pas.
Malheureusement le serveur webdav que j’utilise ne gĂšre pas CalDAV et CardDAV. Il va donc falloir choisir et installer une solution dĂ©diĂ©e.
La premiĂšre alternative que j’ai trouvĂ© Ă Todoist est Planify. Il gĂšre l’API de Tododist et Nextcloud, ce qui suffira Ă certains, mais malheureusement pas CalDAV.
Une piste de recherche est de passer par le site de l’application Android Tasks qui fourni une liste de serveurs libre CalDAV. La rĂ©fĂ©rence semble ĂȘtre Radicale qui a l’Ă©norme avantage de gĂ©rer aussi bien CalDAV que CardDAV. Il fonctionne trĂšs bien avec Evolution.
L’autre solution intĂ©ressante est Vikunja. Elle propose une interface web de gestion des tĂąches en mode Gantt et Kanban ce qui en fait une alternative Ă Todoist. Et comme elle supporte CalDAV les tĂąches sont Ă©galement accessible depuis Evolution et Tasks. Malheureusement il ne gĂšre que les tĂąches.
Je souhaite une gestion avancĂ©e des tĂąches avec un mode Kanban, j’utilise alors Radicale et Vikunja, mais pour un usage basique Radicale suffit pour la plupart.
Ici le choix est vite fait, Radicle fait parfaitement le boulot. Le projet ne semble pas fournir d’image Docker officielle, j’en ai donc construite une Ă partir du Dockerfile officiel, image publiĂ©e sur le Docker Hub : fredix/radicale
Sur le NUC il faut crĂ©er des rĂ©pertoires dĂ©diĂ©s aux donnĂ©es de l’application, chez moi :
tree /data/volumes/radicale
/data/volumes/radicale
âââ data
âââ etc
Le rĂ©pertoire data devra ĂȘtre attachĂ© Ă l’utilisateur 1000 pour que Radicale puisse Ă©crire dedans
sudo chown 1000 /data/volumes/radicale/data
Dans le répertoire etc
voici le fichier config
/data/volumes/radicale/etc/config
[server]
# Bind all addresses
hosts = 0.0.0.0:5232, [::]:5232
[auth]
type = htpasswd
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = autodetect
[storage]
filesystem_folder = /data
Ensuite il faut créer un fichier des utilisateurs avec la commande htpasswd
sudo htpasswd -5 -c /data/volumes/radicale/etc/users user
sudo htpasswd -5 /data/volumes/radicale/etc/users user2
Et voici le HCL Nomad
job "radicale" {
datacenters = ["dc1"]
type = "service"
group "home" {
count = 1
network {
port "http" {
to = 5232 # container port the app runs on
host_network = "tailscale"
}
}
task "radicale" {
driver = "docker"
constraint {
attribute = "${attr.unique.hostname}"
value = "nuc"
}
config {
image = "fredix/radicale"
mounts = [
{
type = "bind"
target = "/data"
source = "/data/volumes/radicale/data"
readonly = false
bind_options = {
propagation = "rshared"
}
},
{
type = "bind"
target = "/etc/radicale"
source = "/data/volumes/radicale/etc"
readonly = true
bind_options = {
propagation = "rshared"
}
}
]
ports = ["http"]
}
resources {
cpu = 50
memory = 200
}
service {
name = "radicale"
provider = "consul"
port = "http"
tags = ["tricot radicale.domain.tld"]
}
}
}
}
Ensuite on peut se connecter avec son navigateur vers https://radicale.domain.tld
et utiliser le compte créé avec htpasswd. On va voir la suite dans la section Evolution.
A noter que Radicle stocke les carnets d’adresse sous forme de fichiers et les contacts en fichier au format VCARD.
Pour ceux qui comme moi souhaitent un gestionnaire de tùches poussé, avec gestion de projets multi-users, kanban, etc. Vikunja est là , voir la démo en ligne.
Les répertoires suivants sont à créer
/data/volumes/vikunja/
âââ db
âââ files
sudo chown 1000 /data/volumes/vikunja/files/
sudo chown 1000 /data/volumes/vikunja/db/
Et le HCL Nomad
job "vikunja" {
datacenters = ["dc1"]
type = "service"
group "home" {
count = 1
network {
port "http" {
to = 3456 # container port the app runs on
host_network = "tailscale"
}
}
task "vikunja" {
driver = "docker"
constraint {
attribute = "${attr.unique.hostname}"
value = "nuc"
}
env {
# openssl rand -hex 32
VIKUNJA_SERVICE_JWTSECRET = "SECRET"
VIKUNJA_SERVICE_PUBLICURL = "https://vikunja.domain.tld"
VIKUNJA_DATABASE_PATH = "/db/vikunja.db"
VIKUNJA_SERVICE_TIMEZONE = "Europe/Paris"
VIKUNJA_SERVICE_ENABLEREGISTRATION = true
}
config {
image = "vikunja/vikunja"
mounts = [
{
type = "bind"
target = "/app/vikunja/files"
source = "/data/volumes/vikunja/files"
readonly = false
bind_options = {
propagation = "rshared"
}
},
{
type = "bind"
target = "/db"
source = "/data/volumes/vikunja/db"
readonly = false
bind_options = {
propagation = "rshared"
}
}
]
ports = ["http"]
}
resources {
cpu = 50
memory = 200
}
service {
name = "vikunja"
provider = "consul"
port = "http"
tags = ["tricot vikunja.domain.tld"]
}
}
}
}
Une fois le service lancĂ© il suffit d’aller sur l’interface web pour crĂ©er son compte. Attention ensuite de bien modifier la viariable VIKUNJA_SERVICE_ENABLEREGISTRATION=false
puis relancer le service pour empĂ©cher la crĂ©ation de compte par n’importe qui.
A noter que Nomad peux refuser de lancer le service si comme moi vous avez trop de conteneurs Docker sur votre NUC
* Dimension "cpu" exhausted on 1 nodes
Dans ce cas il suffit de mettre par exemple cpu = 50
sur vos tous vos services pour Ă©viter d’atteindre trop rapidement la limite de votre CPU. Nomad ne limitera le service Ă 50 Mhz que si votre NUC est surchargĂ© ce qui est rarement le cas en auto-hĂ©bergement (mais ça dĂ©pend de votre matĂ©riel et de votre nombre d’utilisateurs), voir Nomad : Allocating CPU Resources.
Le client email de GNOME, Evolution, sait gĂ©rer les accĂšs CalDAV et CardDAV. Et sans doute de mĂȘme pour Thunderbird.
Pour la gestion du carnet d’adresse via CardDav il faut d’abord se rendre sur l’interface web de Radicale, https://radicale.domain.tld
, se connecter avec un des comptes créé puis créer via le bouton + en bas à droite une collection de type Adress book
Ensuite ajouter ce carnet dans Evolution
Ensuite clic droit dans la zone vide Ă droite pour ajouter ses contacts
Pour les mémos et agendas il faut créer une collection dans Radicale de type Calendar, journal and tasks
Ensuite vous pourrez consulter et créer des réunions, rendez-vous, tùches depuis Evolution avec des options avancées comme une récurrence mensuelle tous les 5Úme jour du mois
Si pour les tĂąches vous prĂ©fĂ©rez Vikunja, il suffit d’ajouter le lien dans Evolution avec votre compte utilisateur
Attention dans Evolution vous ne verrez que les tĂąches du projet par dĂ©faut Inbox (ou boite de rĂ©ception) mĂȘme si vous crĂ©ez d’autres projets depuis l’interface web.
GNOME peut gĂ©rer des comptes en ligne dont WebDAV (agenda, contacts, fichiers). Attention de saisir l’URL vers votre Radicale sans https://
uniquement radicale.domain.tld
Une fois fait, les applications Contacts et Agenda auront accĂšs Ă vos donnĂ©es et elles sont beaucoup plus pratique qu’un navigateur web ou par Evolution đ
Le client Android Tasks (dispo sur F-Droid et google play store) accĂšde bien Ă tous les projets et tĂąches dans Vikunja.
DAVx5 est une application Android qui permet de synchroniser son carnet d’adresse, ses agendas, tĂąches, avec son smartphone Android. Il suffit d’ajouter son compte Radicale dans DAVx5 en mettant bien son email (autre que @gmail) comme nom de compte. J’ai mis mon mail @protonmail.com mĂȘme s’il n’est pas liĂ© avec Radicale.
Dans l’application Contacts on voit un champs de sĂ©lection sous la recherche qui permet de choisir son compte Radicale plutĂŽt que Gmail. Cependant l’intĂ©rĂȘt est d’exporter ses contacts Gmail vers Radicale.
Pour cela il faut revenir sur les contacts Gmail puis appuyer sur Organiser en bas Ă droite. Choisir Exporter dans un fichier tout en bas et sauvegarder dans le tel. Revenir sur ses contacts Radicale , Organiser puis Importer Ă partir d’un fichier. DAVx5 va alors synchroniser ce fichier avec votre serveur Radicale. Cela peut prendre un certain temps mais vous pouvez consulter le nombre d’items en cours dans le carnet d’adresse via l’interface web de Radicale.
Pour l’agenda cliquez en haut Ă droite sur votre avatar dans l’application Agenda et choisissez votre compte email associĂ© Ă Radicale. Et voilĂ vous avez maintenant une synchro de vos agendas, contacts et tĂąches entre votre smartphone et Evolution en passant par votre serveur đȘ
Ces 2 protocoles sont indispensable pour reprendre la main sur ses donnĂ©es personnelles, associĂ© Ă WebDAV on peut dire que vous avez maintenant un cloud personnel đ
PS : pour ceux n’ayant pas les compĂ©tences techniques, EteSync et Vikunja proposent aussi un hĂ©bergement cloud payant. Du cloud certes mais hors GAFAM et qui finance du libre.
(Ce texte a été écrit avec VNote)