Post

webdav-sharing — SFTPGo + MinIO Managed File Service

Cross-platform WebDAV with SFTPGo WebAdmin, role-based groups, and versioned S3 storage on MinIO.

webdav-sharing — SFTPGo + MinIO Managed File Service

webdav-sharing is a Docker Compose stack for a managed WebDAV file service with S3-compatible storage — Windows 10/11 and Ubuntu clients, role-based folders, and versioned object history.

Repository: github.com/eSlider/webdav-sharing

Why this stack

  • SFTPGo — mature WebAdmin UI for users, groups, and path permissions; native WebDAV
  • MinIO — reliable S3 backend with versioning for document history and restore
  • mc bootstrap — one-shot bucket/user setup via MinIO Client

Typical use: small-team intranet documents, finance (buchhaltung) vs operations (PDL) folder segregation, and backup-friendly versioned storage without a full groupware suite.

Architecture

flowchart LR
  windowsClient[Windows10_11Client]
  ubuntuClient[UbuntuClient]
  sftpgoAdmin[SFTPGoWebAdmin]
  sftpgoWebdav[SFTPGoWebDAV]
  minioS3[MinIOS3API]
  minioConsole[MinIOConsole]

  windowsClient --> sftpgoWebdav
  ubuntuClient --> sftpgoWebdav
  sftpgoAdmin --> sftpgoWebdav
  sftpgoWebdav --> minioS3
  sftpgoAdmin --> minioS3
  minioConsole --> minioS3

Access model

flowchart TD
  adminUsers[adminsGroup_2Users]
  moderatorUsers[moderatorsGroup_2Users]
  workerUsers[workersGroup_5plusUsers]
  webAdmin[SFTPGoWebAdmin]
  policyLayer[GroupPathPermissions]
  webdav[SFTPGoWebDAV]
  s3Storage[S3BucketPrefixes]

  adminUsers --> webAdmin
  moderatorUsers --> policyLayer
  workerUsers --> policyLayer
  webAdmin --> policyLayer
  policyLayer --> webdav
  webdav --> s3Storage

Quick start

1
2
cp .env.example .env   # edit secrets
docker compose up -d
ServiceDefault URL
SFTPGo WebAdminhttp://localhost:18080/web/admin
WebDAVhttp://localhost:11080
MinIO Consolehttp://localhost:19001

After first admin setup, bootstrap groups and sample users:

1
SFTPGO_ADMIN_USER='admin' SFTPGO_ADMIN_PASSWORD='…' ./bin/init.sh

Operations

  • Persisted volumes: minio_data, sftpgo_state, sftpgo_data
  • Production: terminate TLS at a reverse proxy in front of SFTPGo and MinIO
  • Object version restore: MinIO Console or mc — SFTPGo manages access, not S3 version history

Edelweiss healthcare stack · produktor.io platform · Docker Compose patterns

Tech stack

Docker Compose · SFTPGo · MinIO · S3 · WebDAV

This post is licensed under CC BY 4.0 by the author.