Siempre he comentado que una nube como Nextcloud para solo acceder o sincronizar archivos es muy pesada. Existen otros proyectos, mucho más ligeros con lenguajes de programación mucho más modernos, por ejemplo en GO como FileBrowser.
El objetivo por mi parte, ha sido el sumar lo mejor de 2 servicios.
FileBrowser es la herramienta que nos permitirá visualizar nuestros archivos y directorios, a través de un navegador web. FileBrowser no tiene aplicación, es única y exclusivamente para utilizarla desde un navegador web. Eso significa que allá donde haya un navegador web, podremos acceder a nuestros archivos. En dispositivos móviles y tablets, FileBrowser se adapta perfectamente a todo tipo de pantalla, así que es un servicio fantástico. Webdav es el servicio para sincronizar mis archivos con aplicaciones como SimpleTask, Orgzly, FolderSync, X-plore, Solid Explorer o Pure Writer. También envío backups y accedo a archivos con rclone.
FileBrowser tiene una función para compartir archivos o directorios con cualquier persona mediante un link que podemos determinar una duración de validez para su descarga.
FileBrowser también permite crear tantos usuarios como queramos, pero si queremos combinar esta función con WebDav, entonces necesitaremos crear tantos servidores WebDav como usuarios lo necesiten y dirigir el directorio donde estarán los archivos, en mi ejemplo /webdav
, por el directorio del usuario de FileBrowser.
FileBrowser + WebDav es la apuesta ganadora como servicios super livianos y sencillos. Podemos ampliar esta apuesta incluyendo algún directorio de nuestra nube mediante Syncthing. En mi caso, no he añadido esta opción en la primera parte del artículo, para no complicar más el tutorial. Lo que está claro, es que es muy recomendable utilizar docker-compose, para esta tarea ya que permite ir incluyendo servicios dentro de nuestra nube igual que lo hariamos con Nextcloud y ganar en diversidad, funcionalidades y potencia.
Partiendo de que el directorio /webdav
es compartido con el servicio FileBrowser y Webdab, personalmente recomiendo ir añadiendo servicios enlazados a determinados directorios como:
Como he comentado antes, el directorio donde irán los archivos de la nube será /webdav
. Yo he decidido que sea esta, pero tu puedes personalizarlo al directorio que desees.
Vamos a clonar el repositorio que tengo en GitHub, donde están los archivos de configuración para Filebrowser para que persista la configuración una vez actualicemos el docker.
git clone https://github.com/uGeek/docker-filebrowser.git
Inicia el docker desde el repositorio que hemos clonado de GitHub. Este directorio es donde se guardarán la configuración y base de datos de FileBrowser.
docker run --name filebrowser -v /webdav:/srv -v $PWD/filebrowser.db:/database.db -v $PWD/filebrowser.json:/.filebrowser.json -p 80:80 filebrowser/filebrowser
Si da error el arranque del docker, crea una nueva base de datos en blanco filebrowser.db
touch filebrowser.db
docker run --name webdav --restart=unless-stopped -p 80:80 -v /webdav:/media -e USERNAME=webdav -e PASSWORD=webdav -e TZ=Europe/Madrid -e UDI=1000 -e GID=1000 -d ugeek/webdav:arm
Inicia el docker desde el repositorio que hemos clonado de GitHub. Este directorio es donde se guardarán la configuración y base de datos de FileBrowser.
docker run --name filebrowser -v /webdav:/srv -v $PWD/filebrowser.db:/database.db -v $PWD/filebrowser.json:/.filebrowser.json -p 80:80 filebrowser/filebrowser
Si da error el arranque del docker, crea una nueva base de datos en blanco filebrowser.db
touch filebrowser.db
docker run --name webdav --restart=unless-stopped -p 80:80 -v /webdav:/media -e USERNAME=webdav -e PASSWORD=webdav -e TZ=Europe/Madrid -e UDI=1000 -e GID=1000 -d ugeek/webdav:amd64
Si vas a utilizar docker-compose para levantar ambos servicios, renombra el archivos docker-compose_filebrowser+webdav.yml por docker-compose.yml.
En este caso, voy a utilizar como ejemplo de dominio ugeek en duckdns.org. Vamos a utilizar sed para sustituir la palabra dominio por ugeek. También lo puedes hacer manualmente desde el docker-compose.yml
sed -i s'|dominio|ugeek|'g docker-compose.yml
filebrowser.dominio.duckdns.org
y webdav.dominio.duckdns.org
./webdav
, pero puedes utilizar el que tu desees, simplemente cambiandoloInicia el docker desde el repositorio que hemos clonado de GitHub. Este directorio es donde se guardarán la configuración y base de datos de FileBrowser.
Si da error el arranque del docker, crea una nueva base de datos en blanco filebrowser.db
touch filebrowser.db
Ya está listo todo para levantar el docker.
version: '3'
services:
filebrowser:
image: filebrowser/filebrowser:pi
container_name: filebrowser
restart: unless-stopped
volumes:
- /webdav:/srv
- $PWD/filebrowser.db:/database.db
- $PWD/filebrowser.json:/.filebrowser.json
webdav:
container_name: webdav
image: ugeek/webdav:arm
restart: unless-stopped
volumes:
- /webdav:/media
environment:
- USERNAME=usuario
- PASSWORD=contraseña
- UID=1000
- GID=1000
- TZ=Europe/Madrid
version: '3'
services:
filebrowser:
image: filebrowser/filebrowser:pi
container_name: filebrowser
restart: unless-stopped
volumes:
- /webdav:/srv
- $PWD/filebrowser.db:/database.db
- $PWD/filebrowser.json:/.filebrowser.json
networks:
- web
labels:
- "traefik.backend=filebrowser"
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.default.protocol=http"
- "traefik.frontend.rule=Host:filebrowser.dominio.duckdns.org"
- "traefik.frontend.headers.SSLHost=filebrowser.dominio.duckdns.org"
- "traefik.frontend.headers.SSLRedirect=true"
- "traefik.frontend.headers.SSLForceHost=true"
webdav:
container_name: webdav
image: ugeek/webdav:arm
restart: unless-stopped
volumes:
- /webdav:/media
environment:
- USERNAME=usuario
- PASSWORD=contraseña
- UID=1000
- GID=1000
- TZ=Europe/Madrid
networks:
- web
labels:
- traefik.backend=webdav
- traefik.frontend.rule=Host:webdav.dominio.duckdns.org
- traefik.docker.network=web
- traefik.port=80
- traefik.enable=true
# Adding in secure headers
- traefik.http.middlewares.securedheaders.headers.forcestsheader=true
- traefik.http.middlewares.securedheaders.headers.sslRedirect=true
- traefik.http.middlewares.securedheaders.headers.STSPreload=true
- traefik.http.middlewares.securedheaders.headers.ContentTypeNosniff=true
- traefik.http.middlewares.securedheaders.headers.BrowserXssFilter=true
- traefik.http.middlewares.securedheaders.headers.STSIncludeSubdomains=true
- traefik.http.middlewares.securedheaders.headers.stsSeconds=63072000
- traefik.http.middlewares.securedheaders.headers.frameDeny=true
- traefik.http.middlewares.securedheaders.headers.browserXssFilter=true
- traefik.http.middlewares.securedheaders.headers.contentTypeNosniff=tru
networks:
web:
external: true
version: '3'
services:
filebrowser:
image: filebrowser/filebrowser
container_name: filebrowser
restart: unless-stopped
volumes:
- /webdav:/srv
- $PWD/filebrowser.db:/database.db
- $PWD/filebrowser.json:/.filebrowser.json
webdav:
container_name: webdav
image: ugeek/webdav:amd64
restart: unless-stopped
volumes:
- /webdav:/media
environment:
- USERNAME=usuario
- PASSWORD=contraseña
- UID=1000
- GID=1000
- TZ=Europe/Madrid
version: '3'
services:
filebrowser:
image: filebrowser/filebrowser
container_name: filebrowser
restart: unless-stopped
volumes:
- /webdav:/srv
- $PWD/filebrowser.db:/database.db
- $PWD/filebrowser.json:/.filebrowser.json
networks:
- web
labels:
- "traefik.backend=filebrowser"
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.default.protocol=http"
- "traefik.frontend.rule=Host:filebrowser.dominio.duckdns.org"
- "traefik.frontend.headers.SSLHost=filebrowser.dominio.duckdns.org"
- "traefik.frontend.headers.SSLRedirect=true"
- "traefik.frontend.headers.SSLForceHost=true"
webdav:
container_name: webdav
image: ugeek/webdav:amd64
restart: unless-stopped
volumes:
- /webdav:/media
environment:
- USERNAME=usuario
- PASSWORD=contraseña
- UID=1000
- GID=1000
- TZ=Europe/Madrid
networks:
- web
labels:
- traefik.backend=webdav
- traefik.frontend.rule=Host:webdav.dominio.duckdns.org
- traefik.docker.network=web
- traefik.port=80
- traefik.enable=true
# Adding in secure headers
- traefik.http.middlewares.securedheaders.headers.forcestsheader=true
- traefik.http.middlewares.securedheaders.headers.sslRedirect=true
- traefik.http.middlewares.securedheaders.headers.STSPreload=true
- traefik.http.middlewares.securedheaders.headers.ContentTypeNosniff=true
- traefik.http.middlewares.securedheaders.headers.BrowserXssFilter=true
- traefik.http.middlewares.securedheaders.headers.STSIncludeSubdomains=true
- traefik.http.middlewares.securedheaders.headers.stsSeconds=63072000
- traefik.http.middlewares.securedheaders.headers.frameDeny=true
- traefik.http.middlewares.securedheaders.headers.browserXssFilter=true
- traefik.http.middlewares.securedheaders.headers.contentTypeNosniff=tru
networks:
web:
external: true
También es posible sincronizar con el exterior de nuestra nube gracias a Syncthing. He tomado de ejemplo dos directorios dentro de /webdav llamado Fotos y dotfiles, pero puedes sincronizar tantos directorios como quieras. Incluso, sincronizar absolutamente todo.
Añade al docker-compose.yml anteriores, estas líneas si quieres añadir Syncthing.
syncthing:
image: ghcr.io/linuxserver/syncthing
container_name: syncthing
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
volumes:
- $HOME/syncthing/config:/config
- /webdav/Fotos:/webdav/Fotos ## Directorio a sincronizar
- /webdav/dotfiles:/webdav/dotfiles ## Directorio a sincronizar
ports:
- 8384:8384
- 22000:22000
- 21027:21027/udp
restart: unless-stopped
Publicado por Angel el Sunday 03 January del 2021
También te puede interesar:
Powered by org-bash-blog
Written in OrgMode with Emacs and converted to HTML with Pandoc
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.