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
filebrowsercomme un service systemsystemd. - comment configurer un Reverse Proxy
httpdpermettant entre autre de faire du Offload TLS. - comment intégrer
filebrowseràfail2banpour 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
filebrowseret 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:
- tasks/main.yaml
- vars/main.yaml
1 ---
2 - name: Create system group
3 group:
4 name: '{{ groupname }}'
5 system: true
6
7 - name: Create system user
8 user:
9 name: '{{ username }}'
10 comment: 'filebrowser system user'
11 shell: '/bin/false'
12 group: '{{ groupname }}'
13 system: true
14 home: '{{ data_dir }}'
15 createhome: true
16 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
filebrowserdans le fichier/var/log/filebrowser/filebrowser.log. - pour le fichier de base de données. Il doit théoriquement avoir été pré-créé par
ansiblegrâce au paramètrecreatehome: true.
- tasks/main.yaml
- vars/main.yaml
1 - name: Create directories
2 file:
3 path: '{{ item }}'
4 state: 'directory'
5 owner: '{{ username }}'
6 group: '{{ groupname }}'
7 mode: '0700'
8 loop:
9 - '{{ data_dir }}'
10 - '{{ log_dir }}'
11
12 - name: Initialize log file
13 file:
14 path: '{{ log_dir }}/filebrowser.log'
15 state: 'touch'
16 owner: '{{ username }}'
17 group: '{{ groupname }}'
18 mode: '0640'
19 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/sysconfigsur les systèmes d’exploitation de la famille Red Hat./etc/defaultsur 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.
- tasks/main.yaml
- vars/main.yaml
- templates/sysconfig.j2
1 - name: Create sysconfig file
2 template:
3 src: 'sysconfig.j2'
4 dest: '{{ sysconfig_file }}'
5 owner: 'root'
6 group: 'root'
7 mode: '0640'
8 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.
- tasks/main.yaml
- templates/systemd.j2
1 - name: Create systemd service file
2 template:
3 src: 'systemd.j2'
4 dest: '/etc/systemd/system/filebrowser.service'
5 owner: 'root'
6 group: 'root'
7 mode: '0644'
8 L’intégration systemd peut-être décrite comme:
- le programme
/usr/bin/filebrowsersera exécuté par l’utilisateur systèmefilebrowser. - les arguments en ligne de commande passés au programme
/usr/bin/filebrowsersont contenus dans la variable$OPTIONS. - le fichier
/etc/sysconfig/filebrowserest utilisé pour initialiser les variables d’environnement et DOIT exister. C’est depuis ce fichier que sera initialisé la variable$OPTIONS. - le processus
filebrowserest isolé du système, à l’exception de répertoires/var/lib/filebrowser,/var/log/filebrowseret/path/to/filebrowser/root_dir(provenant des variables globales du playbook). - le processus
filebrowsersera 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! 🥇