Dockerized webdav server στο raspberry

webdav

To docker-nginx-webdav-nononsense είναι ένα ένας nginx webserver με ενεργοποιημένο και σεταρισμένο το webdav module και έτοιμος να λειτουργήσει σάν ένας file server που χρησιμοποιεί το webdav protocol και ολα αυτα πακεταρισμένα σε ένα docker container.

Φάκελοι του webdav server μπορούν να γίνουν mount σε ένα remote file system και να έχουμε πρόσβαση σε αυτόν απο τον remote file manager

To αποτέλεσμα είναι ενα εύκολο και γρύγορο personal cloud χωρίς αχρήαστες λειτουργίες δίχως νόημα

link

προετοιμασία

Για να μπορεσει ο χρηστης να κανει αλλαγες στον φακελο και να δημιουργησει υποφακελους πρεπει το volume στο οποιο θα εχει προσβαση να ανοικει στον ιδιο και στο δικο του group… πχ gnutechie:gnutechie.

Θα πρεπει ο χρηστης να κατεβασει το πακετο apache2-utils (τουλαχιστον στις Debian-based διανομες) και να εκτελεσει την παρακατω εντολη σαν κανονικος χρηστης και μεσα στον φακελο του repo που εκανε clone:

htpasswd -c ./htpasswd username

Οπου το username ειναι το ονομα του χρηστη. Στην συνεχεια θα πρεπει να βαλει το password του 2 φορες μια κανονικα και μια για επαλυθευση και στην συνεχεια να δημιουργησει το container.

Εγκατάσταση

Κάνουμε clone το repo

git clone https://github.com/dgraziotin/docker-nginx-webdav-nononsense.git

Μπαίνουμε στο φάκελο

cd docker-nginx-webdav-nononsense

Ανοίγουμε το αρχείο για επεξεργασία

nano doocker-compose.yml

Στο volumes section δηλώνουμε το path του root dir . Εγώ έχω βάλει το root folder του external hard drive μου .

/path/to/data/folder/on/host:/data

Δηλώνουμε το user id & group id

PUID=1000

UUID=1000

Βάζουμε στο timezone Athens

TZ=Europe/Athens

Σε περίπτωση που θα χρησιμοποιήσουμε Μόνο εναν χρήστη βάζουμε τα username και password ώς enviromental variables

WEBDAV_USERNAME=xxxxxx

WEBDAV_PASSWORD=xxxxx

Διαφορετικά το container Υποστηρίζει http apache flat files που τα κάνεις store στο volume ./htpasswd:/etc/nginx/htpasswd εκεί μπορεις να ορίσεις admin και users

Δηλώνουμε τα allowed hostnames απο όπου θα επισκεπτόμαστε τον server χωρισμένα με comma

SERVER_NAMES=localhost,myddns.domain.net

Όλες οι διαθέσιμες enviromenatal variables όπως διάφορα nginx timeouts, μέγεθος file upload κτλ βρίσκονται στο github project page

build from source and run the container

docker-compose build && docker-compose up

reverse proxy

Το container δεν υποστηρίζει ssl cert . O dev παροτρύνει τη χρήση reverse proxy και τη διαχείριση του ssl cert απο αυτό . Προσωπικά χρησιμοποιώ caddy

nano /etc/caddy/Caddyfile

add

ddns.domain.name:open_router_port { reverse_proxy localhost:32080

Ο webdav server τρέχει στο localhost:32080 και έχουμε πρόσβαση σε αυτον με ssl encryption εκτός τοπικού δικτύου μέσω του ddns μας . Το caddy αναλαμβάνει το πιστοποιητικό και την ανακατεύθυνση στη localhost .

windows

Για να προσαρτήσουμε τον weddav shared filder ως network drive στα windows

  • δεξί κλικ στο my computer
  • Attach network drive
  • Επιλέγουμε το use new credentials checkbox
  • Βάζουμε το λινκ στη μπάρα πχ https://my.ddns.domain:port

Android

Στο android έχουμε πρόσβαση με οποιοδήποτε webdav capable filemanager πχ mixplorer,solid,fe,cx

Κάποιοι προσφέρουν και αυτόματο συγχρονισμό σαν paid feature όμως.
Η μόνη δωρεάν εφαρμογή που βρήκα και διαθέτει αυτόματο συγχρονισμό είναι το foldersync

accountstab

  • new acount
  • webdav
  • Βάζω custom title
  • username(WEBDAV_USERNAME)
  • password(WEBDAV_PASSWORD)
  • ip(το ddns domain name)
  • port (η ανοιχτή θύρα στο router που δώσαμε και στο caddy)

sync tab

  • enter
  • επιλέγω send anly (η send&receive , οτι μας βολεύει)
  • επιλέγω local folder to sync
  • επιλέγω remote folder (σερβερ)

Αυτόματο συγχρονισμό δεν επιλέγω από εδώ αλλά πιο μετά στο “περισσότερα”

Στο more settings του sync tab

  • Στην αντικατάσταση παλαιότερου αρχείου επιλέγω “να εξαιρεθούν”
  • ενεργοποιώ την αυτόματη αποστολή
  • απενεργοποιώ το προσωρινό όνομά αρχείου κατά τη μεταφορά

Στο connect του sync tab

  • επιλέγω wifi only ή data

Κάθε φορά που ένα νέο αρχείο θα προστήθετε στο local folder θα γίνετε αυτόματα sync στον webdav server

Παρατηρήσεις

Ο Linux file managers δεν αναγνωρίζουν το container σαν σωστο WebDAV share.

Δοκιμασμένες λύσεις ο Comand line WebDAV client cadaver
manual page

H mount με το εργαλείο davfs2
Στο οποίο ίσως χρειαστεί να να προσθέσεις ignore_dav_header 1 στο /etc/davfs2/davfs2.conf μετά μπορεις να κάνεις mount με sudo mount -t davfs https://my.ddns.domain:port ~/mountpoint

Το παρόν είναι αναδημοσίευση του blogpost μου εδώ

4 «Μου αρέσει»

Παρα πολυ ωραια.
Ευχαριστουμε

OK Ωραιο το docker container… αλλα πως γινεται να το κανουμε multi-user; δηλαδη να μπορει να μπει ο χρηστης mitsos & o χρηστης kitsos στο ιδιο docker container σε προσβαση σε δυο διαφορετικα home directories (αν πουμε οτι το path διχνει στο home directory του καθε χρηστη);

Υποστηρίζει http apache flat files που τα κάνεις store στο volume ./htpasswd:/etc/nginx/htpasswd εκεί μπορεις να ορίσεις admin και users αλλά ο ριζικός κατάλογος δεν μπορεί να είναι διαφορετικός

Το container είναι τέρμα απλό αλλά είναι ακριβώς αυτό που θέλω

Στην ίδια λογική Dockerised webdav servers υπάρχουν και άλλα project πιο πλούσια σε ρυθμίσεις και πιο δημοφιλή

Το Dave πχ υποστηρίζει user gails ssl certs και γενικά είναι πιο γεμάτο

Αν νομίζεις θα σε καλύψει ρίξε μια ματιά

Link

2 «Μου αρέσει»

είχα καποια θέματα με το mounting σε linux
τα windows k android βλέπουν κανονικα το server οι linux file managers ομως με επιλογη location > connect to server οχι

ενα workaround ειναι εγκατασταση davfs2 το οποιο ομως πεταει error /sbin/mount.davfs: mounting failed; the server does not support WebDAV και θέλει να προσθέσεις ignore_dav_header 1 στο /etc/davfs2/davfs2.conf μετά μπορεις να κάνεις mount με sudo mount -t davfs https://my.ddns.domain:port ~/mountpoint

Το docker container με το webdav να υποθεσω οτι βρισκεται rpi και σου παρουσιαζει το προβλημα οταν πας μεσω localhost; Η απο αλλο μηχανιμα;

Ο WebDAV server μέσα στο container τρέχει σε ενα raspberry.
Αναφέρομαι στη διαδιακασία Mount σε άλλα μηχανήματα

OK… για να μπω με τον file manager (Caja) στο docker οντως δεν γινεται γιατι δεν τον αναγνωριζει σαν σωστο WebDAV share. Με το cadaver ομως μπηκα και ανεβασα και αρχειο. Ισως υπαρχει καποιο θεμα με το GVFS.

2 προσθηκες πρεπει (κατα την γνωμη μου) να γινουν στον οδηγο.

#1) για να μπορεσει ο χρηστης να κανει αλλαγες στον φακελο και να δημιουργησει υποφακελους πρεπει το volume στο οποιο θα εχει προσβαση να ανοικει στον ιδιο και στο δικο του group… πχ gnutechie:gnutechie

#2) πριν ακομα ξεκινησει το docker-compose να δημιουργησει το container θα πρεπει ο χρηστης να κατεβασει το πακετο apache2-utils (τουλαχιστον στις Debian-based διανομες) και να εκτελεσει την παρακατω εντολη σαν κανονικος χρηστης και μεσα στον φακελο του repo που εκανε clone:

htpasswd -c ./htpasswd username

οπου το username ειναι το ονομα του χρηστη. Στην συνεχεια θα πρεπει να βαλει το password του 2 φορες μια κανονικα και μια για επαλυθευση και στην συνεχεια να δημιουργησει το container.

Ελπιζω να βοηθησα

θενκς

./htpasswd volume δεν εφτιαξα περασα τα user name & password με env variables (ένας μονο χρήστης)

χρήσιμες πληροφορίες όσα αναφέρεις

δυστυχώς, δεν με αφήνει να κάνω edit στο αρχικό ποστ πρέπει κάποιος διαχειριστής να τα προσθέσει