Blog del Podcast
podcast      GitHub      Twitter   Telegram

Mi alternativa a Nextcloud como nube. Filebrowser, WebDav y Syncthing

Tiempo estimado de lectura: 12 minutos. 1324 palabras. nube

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. 

  1. Mi servidor webdav que utilizo a diario
  2. Anadir una interfaz web, para no estar obligado a utilizar un cliente de administración.

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.

Iniciando

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

Docker-cli

Filebrowser para 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

WebDav para ARM

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

Filebrowser para amd64

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

WebDav para amd64

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

Docker Compose

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

Ajustes de Webdav

Ajustes de FileBrowser

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.

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.

Docker para arm y Raspberry Pi

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

Proxy inverso con traefik

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

Docker para amd64

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

Proxy inverso con traefik

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

Syncthing

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

Fuentes


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

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.