Wiki-Tech.io/SelfHosted/Filebrowser.html

78 lignes
4.9 KiB
HTML

<!--
title: FileBrowser
description:
published: true
date: 2021-05-30T17:25:33.595Z
tags:
editor: ckeditor
dateCreated: 2021-05-24T10:34:40.448Z
-->
<figure class="image image_resized"><img style="width:80%; display:block; margin-left: auto; margin-right: auto;" src="https://raw.githubusercontent.com/filebrowser/logo/master/banner.png"></figure>
<p>&nbsp;</p>
<h1>Héberger des fichiers en lecture seule avec l'interface Web FileBrowser</h1>
<p>Si vous souhaitez partager des fichiers de manière permanente, une interface Web est probablement le plus simple à utiliser pour vos utilisateurs.&nbsp;</p>
<p><a href="https://github.com/filebrowser/filebrowser">Filebrowser</a> 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.&nbsp;</p>
<p>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.</p>
<p>&nbsp;</p>
<h2>Création du Dockerfile</h2>
<p>Le projet FileBrowser met à disposition une <a href="https://hub.docker.com/r/filebrowser/filebrowser">image Docker</a> avec leur<a href="https://github.com/filebrowser/filebrowser/blob/master/Dockerfile"> binaire intégré</a> 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).</p>
<p>Dans un fichier <a href="https://hastebin.papamica.com/ukukomelut">Dockerfile</a>, nous commençons par utiliser l'image alpine complète et en copiant le binaire de FileBrowser à partir de l'image docker <code>filebrowser/filebrowser</code> :</p>
<pre><code class="language-plaintext">FROM filebrowser/filebrowser as fb
FROM alpine:latest
COPY --from=fb /filebrowser /opt/app/filebrowser</code></pre>
<p>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 :</p>
<pre><code class="language-plaintext">RUN apk --update add ca-certificates bash \
&amp;&amp; adduser -h /opt/app -D app</code></pre>
<p>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 <code>--auth.method='noauth'</code> (voir l'<a href="https://github.com/filebrowser/filebrowser/issues/700">issue #700</a>)</p>
<pre><code class="language-plaintext">#!/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</code></pre>
<p>Nous pouvons désormais finir notre <a href="https://hastebin.papamica.com/ukukomelut">Dockerfile</a> :</p>
<pre><code class="language-plaintext">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" ]</code></pre>
<p>Vous retrouverez le Dockerfile complet ici : <a href="https://hastebin.papamica.com/ukukomelut">Dockerfile</a></p>
<p>&nbsp;</p>
<h2>Création du Docker-Compose</h2>
<p>Maintenant que nous avons notre Dockerfile, nous pourrions démarrer notre container avec ces commandes Docker :</p>
<pre><code class="language-plaintext">docker build --tag hostfiles .
docker run --detach -p 80:4000 --restart=always --volume /apps/files:/srv:ro hostfiles</code></pre>
<p>Mais je préfère toujours avoir un Docker-Compose, voici donc ce fameux sésame :</p>
<pre><code class="language-plaintext">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
ports:
- 80:4000 # Vous pouvez changer le port ici</code></pre>
<p>Pour lancer le container :</p>
<pre><code class="language-plaintext">docker-compose up -d</code></pre>
<p>Vous pouvez maintenant y accéder à l'adresse : <code>http://&lt;IP_SERVER&gt;:80</code></p>
<p>&nbsp;</p>
<h2>Résumé</h2>
<p>Vous devez avoir cette arborescence de fichiers :</p>
<pre><code class="language-plaintext">.
├── docker-compose.yml
├── dockerfile
└── entrypoint</code></pre>
<p>Avec :</p>
<ul>
<li><a href="https://hastebin.papamica.com/yelocacilo"><code>docker-compose.yml</code></a> ou <a href="https://hastebin.papamica.com/nobuduzimu"><code>docker-compose.yml</code></a> (avec Traefik et Loki)</li>
<li><a href="https://hastebin.papamica.com/ukukomelut"><code>dockerfile</code></a></li>
<li><a href="https://hastebin.papamica.com/deruxizeqe"><code>entrypoint</code></a></li>
</ul>
<p>&nbsp;</p>