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 χωρίς αχρήαστες λειτουργίες δίχως νόημα
προετοιμασία
Για να μπορεσει ο χρηστης να κανει αλλαγες στον φακελο και να δημιουργησει υποφακελους πρεπει το 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 μου εδώ