Héberger des fichiers en lecture seule avec l'interface Web FileBrowser

Si vous souhaitez partager des fichiers de manière permanente, une interface Web est probablement le plus simple à utiliser pour vos utilisateurs. 

Filebrowser est une interface Web pour accéder à des fichiers, elle vous permet de faire la plupart des choses avec les fichiers: télécharger, partager, modifier, etc. 

Nous allons voir les étapes consistant à n'autoriser aucune de ces options et à autoriser uniquement l'accès anonyme en lecture seule à un répertoire à l'aide de l'interface Web de FileBrowser.

 

Création du Dockerfile

Le projet FileBrowser met à disposition une image Docker avec leur binaire intégré directement. Nous devons faire presque la même chose, mais le faire fonctionner sans authentification et fonctionner en tant qu'utilisateur normal au lieu de root (mauvaise pratique).

Dans un fichier Dockerfile, nous commençons par utiliser l'image alpine complète et en copiant le binaire de FileBrowser à partir de l'image docker filebrowser/filebrowser :

FROM filebrowser/filebrowser as fb
FROM alpine:latest
COPY --from=fb /filebrowser /opt/app/filebrowser

Nous ne voulons pas que le processus s'exécute en tant que root, nous créons donc un nouvel utilisateur et mettons à jour les certificats SSL :

RUN apk --update add ca-certificates bash \
    && adduser -h /opt/app -D app

Maintenant, pour le script entrypoint : nous avons besoin de lancer FileBrowser avec la configuration souhaitée mais aussi de créer un utilisateur pour l'option --auth.method='noauth' (voir l'issue #700)

#!/bin/bash
./filebrowser config init --port 4000 --address "" --baseurl "" --log "stdout" --root="/srv" --auth.method='noauth' --commands "" --lockPassword --perm.admin=false --perm.create=false --perm.delete=false --perm.execute=false --perm.modify=false --perm.rename=false --signup=false
./filebrowser users add anonymous "anonymous"
exec ./filebrowser

Nous pouvons désormais finir notre Dockerfile :

COPY entrypoint /opt/app/entrypoint
RUN chmod a+x /opt/app/entrypoint

VOLUME /srv
EXPOSE 4000
USER app
WORKDIR /opt/app


ENTRYPOINT [ "/opt/app/entrypoint" ]

Vous retrouverez le Dockerfile complet ici : Dockerfile

 

Création du Docker-Compose

Maintenant que nous avons notre Dockerfile, nous pourrions démarrer notre container avec ces commandes Docker :

docker build --tag hostfiles .
docker run --detach -p 80:4000 --restart=always --volume /apps/files:/srv:ro hostfiles

Mais je préfère toujours avoir un Docker-Compose, voici donc ce fameux sésame :

version: '2'

services:
  filebrowser:
    image: hostfiles:latest # Nom de l'image précédemment créée avec la commande "docker build"
    container_name: filebrowser-partage
    restart: unless-stopped
    volumes:
      - /DATA:/srv:ro # Localisation des données à partager

Pour lancer le container :

docker-compose up -d

 

Résumé

Vous devez avoir cette arborescence de fichiers :

.
├── docker-compose.yml
├── dockerfile
└── entrypoint

Avec :