aboutsummaryrefslogtreecommitdiffstats
path: root/services/radicale
diff options
context:
space:
mode:
Diffstat (limited to 'services/radicale')
-rw-r--r--services/radicale/Dockerfile3
-rw-r--r--services/radicale/fs/etc/radicale/conf.ini14
-rwxr-xr-xservices/radicale/fs/sbin/cmd.sh33
3 files changed, 50 insertions, 0 deletions
diff --git a/services/radicale/Dockerfile b/services/radicale/Dockerfile
new file mode 100644
index 0000000..d6e850b
--- /dev/null
+++ b/services/radicale/Dockerfile
@@ -0,0 +1,3 @@
+FROM tomsquest/docker-radicale:3.5.10.0
+ADD fs.tar.gz /
+CMD su-exec radicale /sbin/cmd.sh
diff --git a/services/radicale/fs/etc/radicale/conf.ini b/services/radicale/fs/etc/radicale/conf.ini
new file mode 100644
index 0000000..2af4af9
--- /dev/null
+++ b/services/radicale/fs/etc/radicale/conf.ini
@@ -0,0 +1,14 @@
+[server]
+
+hosts = localhost:5232, radicale:5232
+
+[auth]
+
+type = htpasswd
+htpasswd_filename = /etc/radicale/users/.htpasswd
+htpasswd_encryption = bcrypt
+
+[storage]
+
+filesystem_folder = /data/collections
+hook = git add -A && (git diff --cached --quiet || git commit -m "Changes by \"%(user)s\"")
diff --git a/services/radicale/fs/sbin/cmd.sh b/services/radicale/fs/sbin/cmd.sh
new file mode 100755
index 0000000..4d09e75
--- /dev/null
+++ b/services/radicale/fs/sbin/cmd.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -eu
+
+conf=/etc/radicale/conf.ini
+
+if [ ! -d /data/collections/.git ]; then
+ # Initialize git repository (for storage)
+ echo "Starting server..."
+ /venv/bin/radicale --config "$conf" --logging-level error &
+ radicale_pid=$!
+ echo "Waiting for server to start..."
+ until curl -sf http://127.0.0.1:5232; do sleep 1; done
+ echo "Server started"
+
+ cd /data/collections
+ git init --initial-branch=radicale
+ git config user.name radicale
+ git config user.email radicale@domain.tld
+ cat <<EOF >.gitignore
+.Radicale.cache
+.Radicale.lock
+.Radicale.tmp-*
+EOF
+ git add -A && (git diff --cached --quiet || git commit -m "Initialization commit")
+
+ echo "Restarting server..."
+ kill "$radicale_pid"
+ wait "$radicale_pid"
+else
+ echo "Initialization skipped"
+fi
+
+exec /venv/bin/radicale --config "$conf"