FileBrowser
There are a few software out there, but i like File Browser a lot because it's lightweight, don't get in the way, is flexible and simple to use, but i do not like the default installation method of FileBrowser because it will install system-wide. I will show you how to install in a more customized way.
Installation
Create a standard user to host the FileBrowser installation. You will most probably never run it as this user, but always as different users, to allow it manage files owned by those users.
useradd -d /data/daemons/filebrowser -m filebrowser
The default install approach is based on a auto executable web link (here) which i do not recommend to use directly. Instead go to here and download the proper package for your architecture. Then:
su - filebrowser mkdir bin cd bin tar xvf ../linux-amd64-filebrowser.tar.gz
That's it!
In addition you might want to create the following .bashrc:
- .bashrc
#!/bin/bash export UMASK=0002 export PATH=$PATH:~/bin
Authentication
filebrowser config set --auth.method=noauth filebrowser config set --auth.method=proxy --auth.header=X-My-Header
TBD
Reverse Proxy
Running FileBrowser behind NGINX is easy, this is an example:
- filebrowser.conf
location /filebrowser/ { client_max_body_size 512M; proxy_pass http://127.0.0.1:3002; proxy_http_version 1.1; proxy_set_header Connection $http_connection; proxy_set_header Connection 'upgrade'; proxy_cache_bypass $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; #proxy_set_header Authorization $remote_user; }
Remember to set the correct port as each instance of FileBrowser will have to run with it's own port, and set a reasonable location URL. This setup will also make use of FileBrowser user intergation with Proxy Authentication, if used, by uncommenting the last line.
Running
I assume you want to run it as user myuser.
As a general startup rule, the first time you need to run it once to create the needed configuration files and database, then you want to start it with a script and have it start automatically at boot.
For initial configuration:
su - myuser /data/daemons/filebrowser/bin/filebrowser -r "/data/MyFiles" -p 3005 -d "/home/myuser/filebrowser.db"
As the starting script, since i use OpenRC, i have written the following init script wihch needs to be dropped to /etc/init.d/filebrowser:
#!/sbin/openrc-run # Copyright 2024 Willy Garidol # Distributed under the terms of the GNU General Public License v3 depend() { need localmount net } FB_LOG_PATH="/var/log/filebrowser" FB_SLOT="${SVCNAME#filebrowser.}" FB_USER=${USER:-${FB_SLOT}} FB_GROUP=${GROUP:-${FB_SLOT}} description=${DESCRIPTION:-Web based Filebrowser} pidfile="/run/${RC_SVCNAME}.pid" command_background=true command="/data/daemons/filebrowser/bin/filebrowser" command_args="-r ${FOLDER} -p ${PORT} -b ${BASE_URL} -d ${DATABASE} -l ${FB_LOG_PATH}/${FB_SLOT}/filebrowser.log" command_user="${FB_USER}:${FB_GROUP}" start_pre() { if [ "${FB_SLOT}" != "filebrowser" ] then test -e "${FB_LOG_PATH}" || mkdir "${FB_LOG_PATH}" test -e "${FB_LOG_PATH}/${FB_SLOT}" || { mkdir "${FB_LOG_PATH}/${FB_SLOT}" } && chown -R ${FB_USER} "${FB_LOG_PATH}/${FB_SLOT}" else ebegin "Error: do not run this script, run a link to it!" eend 255 fi }
make it executable!
Now, create a file /etc/conf.d/filebrowser.myshare:
BASE_URL="/files/MyFiles" DATABASE="/homr/myuser/filebrowser.db" DESCRIPTION="Common web archive" FOLDER="/data/MyFiles" GROUP="users" PORT=3005 USER="filebrowser"
And create the symlink, start it and add to autostart:
ln -s /etc/init.d/filebrowser /etc/init.d/filebrowser.myshare rc-update add filebrowser.myshare default /etc/init.d/filebrowser.myshare start
To add more shares, just create new links to the filebrowser init script and create the associated config file.
Updates
Download a new binary release (see link above), replace binary and restart service.