add WebDAV service backed by RustFS S3 for Zotero file sync

refs #94 #95 #96 #97

- Add rclone/rclone container serving WebDAV on port 8080, backed
  by the existing RustFS S3 with a dedicated zotero bucket
- Add rustfs/policies/zotero.json IAM policy for bucket access
- Add Traefik route at webdav.homelab.fhirworx.io
- Add WEBDAV_* env vars to .env.example
- Configure Zotero prefs for WebDAV storage sync
This commit is contained in:
kert
2026-03-22 00:16:34 -04:00
parent 2cfd61a57a
commit 97778e338f
4 changed files with 53 additions and 0 deletions

View File

@@ -24,6 +24,12 @@ POLARIS_ROOT_SECRET=changeme
POLARIS_S3_ACCESS_KEY=changeme POLARIS_S3_ACCESS_KEY=changeme
POLARIS_S3_SECRET_KEY=changeme POLARIS_S3_SECRET_KEY=changeme
# Zotero WebDAV (rclone → S3)
WEBDAV_S3_ACCESS_KEY=changeme
WEBDAV_S3_SECRET_KEY=changeme
WEBDAV_USER=zotero
WEBDAV_PASS=changeme
# Databricks (optional) # Databricks (optional)
DATABRICKS_HOST= DATABRICKS_HOST=
DATABRICKS_TOKEN= DATABRICKS_TOKEN=

View File

@@ -249,6 +249,23 @@ services:
capabilities: [gpu] capabilities: [gpu]
restart: unless-stopped restart: unless-stopped
webdav:
image: rclone/rclone:latest
container_name: webdav
networks:
- storage
- gateway
command:
- serve
- webdav
- ":s3,provider=Minio,access_key_id=${WEBDAV_S3_ACCESS_KEY},secret_access_key=${WEBDAV_S3_SECRET_KEY},endpoint=http://rustfs:9000,force_path_style=true:zotero"
- --addr=:8080
- --user=${WEBDAV_USER:-zotero}
- --pass=${WEBDAV_PASS}
restart: unless-stopped
depends_on:
- rustfs
nessie: nessie:
image: ghcr.io/projectnessie/nessie:latest image: ghcr.io/projectnessie/nessie:latest
container_name: nessie container_name: nessie

View File

@@ -0,0 +1,29 @@
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::zotero"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::zotero/*"
]
}
]
}

View File

@@ -6,6 +6,7 @@
"woodpecker-server" (dict "port" "8000" "theme" true "subdomain" "ci" "mw" "local-only,secure-headers") "woodpecker-server" (dict "port" "8000" "theme" true "subdomain" "ci" "mw" "local-only,secure-headers")
"notebooks" (dict "port" "2718" "theme" true "mw" "local-only,secure-headers") "notebooks" (dict "port" "2718" "theme" true "mw" "local-only,secure-headers")
"zotero" (dict "port" "8080" "theme" true "mw" "secure-headers") "zotero" (dict "port" "8080" "theme" true "mw" "secure-headers")
"webdav" (dict "port" "8080" "theme" false "mw" "secure-headers")
"api" (dict "port" "8000" "theme" false "mw" "secure-headers") "api" (dict "port" "8000" "theme" false "mw" "secure-headers")
"nessie" (dict "port" "19120" "theme" false "mw" "local-only,infra-headers") "nessie" (dict "port" "19120" "theme" false "mw" "local-only,infra-headers")
"trino" (dict "port" "8080" "theme" true "mw" "local-only,infra-headers") "trino" (dict "port" "8080" "theme" true "mw" "local-only,infra-headers")