Installation et présentation de Filebrowser - Partie 1
Table des matières
Présentation générale 📚
Filebrowser est un simple logiciel se présentant sous la forme d’une interface web épurée et simple pour gérer vos fichiers à distance, au travers de votre navigateur web.
Il est écrit en Go avec une interface web embarquée en VueJS ❤️. Concernant la base de données utilisée, filebrowser
utilise bbolt
. Votre base de données sera alors auto-contenue dans un seul fichier. Facile à sauvegarder et à restaurer.
Le design minimal de filebrowser
le rend facile à installer, configurer et à auto-héberger sur son serveur personnel. Tout cela avec un nombre de fonctionnalités impressionnantes.
Avec filebrowser
, vous pourrez facilement:
- uploader vos fichiers
- télécharger vos fichiers
- éditer vos fichiers
- partager vos fichiers
Il permet également de créer et gérer plusieurs comptes utilisateurs et d’isoler chaque utilisateur dans son espace de stockage privé.
Screenshots
Links 🔗
Comment déployer filebrowser sur votre serveur personnel sans utiliser Docker 🧑🎓
Comme décrit dans le documentation officielle d’installation, vous pouvez utiliser l’image Docker filebrowser/ filebrowser
pour facilement déployer un conteneur fournissant le service filebrowser
.
Dans cet article nous allons voir:
- comment configurer
filebrowser
comme un service systemsystemd
. - comment configurer un Reverse Proxy
httpd
permettant entre autre de faire du Offload TLS. - comment intégrer
filebrowser
àfail2ban
pour sécuriser les accès.
Pourquoi ai-je préféré une intégration système complète via systemd
plutôt qu’un déploiement via conteneur ?
Très simple: mon serveur personnel n’a actuellement pas de support de docker
ni d’aucun runtime de conteneur…
Etape 1: Installer filebrowser
C’est une étape simple et rapide. Aller sur la page de release de filebrowser et télécharger la variante correspondant à votre architecture.
Extraire le binaire et l’installer à l’emplacement /usr/bin/filebrowser
.
Exemple:
$ tar xvf linux-amd64-filebrowser.tar.gz
$ sudo mv filebrowser /usr/bin/filebrowser
$ sudo chown root:root /usr/bin/filebrowser
$ sudo chmod 0755 /usr/bin/filebrowser
Etape 2: Intégration système et déploiement de la configuration 🚀
Nous sommes en 2022 📅. Nous n’allons donc pas faire des choses répétées manuellement. Certains outils comme ansible
existent et permettent de créer de la documentation exécutable de ce que nous avons fait et comment. J’ai tendance à ne pas aimer ansible
… mais pour ce genre de besoin simple il est parfait.
Voici les versions logicielles que nous allons utiliser:
$ ansible --version
ansible [core 2.13.2]
config file = /home/riton/.ansible.cfg
configured module search path = ['/home/riton/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/riton/.local/lib/python3.10/site-packages/ansible
ansible collection location = /home/riton/.ansible/collections:/usr/share/ansible/collections
executable location = /home/riton/.local/bin/ansible
python version = 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0]
jinja version = 3.0.3
libyaml = True
Comme à l’accoutumé, lorsque nous devons modéliser quelque chose, nous appliquons la méthode du plus général au plus spécifique. En d’autres mots, nous commençons par écrire la logique décrivant le comportement que nous voulons, puis nous descendons progressivement vers les détails de l’implémentation.
Tout le pseudo code ansible
présenté ci-dessous peut-être trouvé dans ce repository: https://github.com/riton/ansible-filebrowser-role.
Etape 1 avec Ansible: Le playbook
1---
2- hosts: all
3 gather_facts: true
4 become: true
5
6 vars:
7 # Dans quel répertoire stocker les fichiers uploadés avec filebrowser
8 storage_data_dir: '/path/to/filebrowser/root_dir'
9 sysconfig_options: "SEE THAT LATER"
10
11 tasks:
12 # C'est là où se fera toute la configuration du service
13 # filebrowser à proprement parler
14 - import_role:
15 name: 'filebrowser'
16
17 - name: 'Configure HTTPd reverse proxy for filebrowser'
18 import_role:
19 name: 'filebrowser'
20 tasks_from: 'reverse_proxy.yml'
21
22 - name: 'Configure fail2ban for filebrowser'
23 import_role:
24 name: 'filebrowser'
25 tasks_from: 'fail2ban.yml'
Ce n’est qu’un playbook d’exemple. Vous devrez sans aucun doute l’adapter à vos besoins.
Le playbook se décompose en trois parties:
- L’intégration système de
filebrowser
et sa configuration (line14-15
) - La configuration du Reverse Proxy (line
19-20
) - L’intégration de
filebrowser
àfail2ban
(line24-25
)
Etape 2 avec Ansible: Écrire le rôle filebrowser
Ce rôle va être en charge de faire l’intégration système ainsi que la configuration de filebrowser
.
Nous commençons par la création d’un utilisateur système dédié au service:
Le répertoire /var/lib/filebrowser
sera utilisé:
- en tant que home directory de l’utilisateur système
filebrowser
. - pour stocker la base de données de notre instance
filebrowser
.
Maintenant que nous avons créé l’utilisateur système, nous avons besoins de créer certains répertoires appartenant à cet utilisateur:
- pour le fichier de logs de
filebrowser
dans le fichier/var/log/filebrowser/filebrowser.log
. - pour le fichier de base de données. Il doit théoriquement avoir été pré-créé par
ansible
grâce au paramètrecreatehome: true
.
Nous pré-créons un fichier vide /var/log/filebrowser/filebrowser.log
et donnons un accès complet à l’utilisateur système filebrowser
sur ce fichier.
Par la suite, nous allons créer un simple fichier de sysconfig permettant à systemd
de sourcer des variables d’environnement.
Le répertoire par défaut des fichiers sysconfig est:
/etc/sysconfig
sur les systèmes d’exploitation de la famille Red Hat./etc/default
sur les systèmes d’exploitation de la famille Debian.
J’ai ici fait le choix d’utiliser un fichier de sysconfig à la place d’un fichier de configuration pour filebrowser
. C’est plus rapide et simple à gérer et ne demande aucune logique supplémentaire dans le modèle.
Nous déclarons ici une variable OPTIONS
que nous utiliserons plus tard dans notre service systemd
.
Note: Nous utilisons ici la variable sysconfig_options
que nous nous avions déclaré de façon globale dans notre playbook. Cela permet de très facilement et rapidement retrouver les options que nous avons utilisé pour configurer filebrowser
.
Nous voilà à l’étape finale: la création du service systemd
.
Ce fichier sera créé et géré par ansible
. Le répertoire /etc/systemd/system
semble donc plus approprié que les répertoires /usr/lib/systemd/system
ou /lib/systemd/system
.
L’intégration systemd
peut-être décrite comme:
- le programme
/usr/bin/filebrowser
sera exécuté par l’utilisateur systèmefilebrowser
. - les arguments en ligne de commande passés au programme
/usr/bin/filebrowser
sont contenus dans la variable$OPTIONS
. - le fichier
/etc/sysconfig/filebrowser
est utilisé pour initialiser les variables d’environnement et DOIT exister. C’est depuis ce fichier que sera initialisé la variable$OPTIONS
. - le processus
filebrowser
est isolé du système, à l’exception de répertoires/var/lib/filebrowser
,/var/log/filebrowser
et/path/to/filebrowser/root_dir
(provenant des variables globales du playbook). - le processus
filebrowser
sera démarré depuis le répertoire/path/to/filebrowser/root_dir
. Par défaut,filebrowser
écrit ses données dans ce répertoire.
💡 Tout le code ansible
présenté peut-être trouvé dans le repository https://github.com/riton/ansible-filebrowser-role.
Conclusion
Nous avons vu comment déployer filebrowser
sur notre système en utilisant systemd
pour démarrer et gérer le processus.
👉 Le rôle ansible
présenté ne gère actuellement pas le service filebrowser
. Cela est laissé en exercice au lecteur motivé 🧑🎓.
Dans le prochain article dédié à filebrowser
, nous verrons une configuration minimaliste d’un reverse proxy pouvant être utilisé pour géré la partie TLS (chiffrement du traffic) et exposer ce service sur Internet.
A suivre…
Soyez le premier à commenter! 🥇