Sometimes you just want to upload, download, rename and share files on your server from a web browser, without SFTP clients or a full cloud suite. File Browser is a tiny Go application that does exactly that: a clean web UI over a directory of your choice, with users, permissions and share links. It’s handy for sharing downloads, managing a media folder, or giving non-technical colleagues access to specific files.
When to use it, and when not
Good for: simple file management on a VPS, quick sharing links, letting someone upload files to one folder, and managing media libraries (Jellyfin, Plex) or website assets.
Not a replacement for: sync clients (use Syncthing, Nextcloud, Seafile or oCIS) or secure admin access to the whole server (use SSH and SFTP). See Seafile and Syncthing.
Install with Docker
sudo mkdir -p /opt/filebrowser /srv/files
sudo touch /opt/filebrowser/database.db
sudo chown -R 1000:1000 /opt/filebrowser /srv/files
docker run -d --name filebrowser --restart unless-stopped \
-p 127.0.0.1:8080:80 \
-v /srv/files:/srv \
-v /opt/filebrowser/database.db:/database.db \
-u 1000:1000 \
filebrowser/filebrowser
/srv/fileson the host is what users see as the root. Mount only the directory you want to expose, never/.- Bind to
127.0.0.1, and publish it through a reverse proxy with HTTPS (below).
Check the logs for the initial admin credentials. Recent versions print a generated password at first start (older versions used admin/admin):
docker logs filebrowser
Change the admin password immediately after the first login.
Or the binary
curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
filebrowser -r /srv/files -a 127.0.0.1 -p 8080 -d /opt/filebrowser/database.db
Read the install script before running it, and run the binary under a dedicated user with systemd. See systemd unit files.
HTTPS with Nginx
server {
server_name files.example.com;
client_max_body_size 0; # allow large uploads
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
# listen 443 ssl; certbot --nginx -d files.example.com
}
See Nginx reverse proxy and Let’s Encrypt.
Users and permissions
In Settings → User Management, create users with:
- a scope (a subfolder as their root, e.g.
/clients/acme), so each user only sees their own area; - permissions: create, rename, modify, delete, share, download, execute commands;
- disable “Execute commands” (the command runner) for everyone except, at most, a trusted admin. It runs shell commands on the server.
Global settings let you disable signup, and set defaults for new users.
Share links
Select a file or folder → Share → choose an expiry time and an optional password. You get a public link. Use expiries, so links don’t stay valid forever. Shared links bypass login, so treat them as public.
Security checklist
- HTTPS only, behind a reverse proxy.
- A strong admin password, and user accounts scoped to specific folders.
- Command execution disabled.
- Expose only the directories you intend to (container mounts).
- Consider extra protection for admin access: an IP allow-list, VPN access, or an authentication proxy in front (Authelia, Cloudflare Access). See zero trust networking.
- Back up the
database.db(users and settings) along with the files themselves. See backup strategy.
Alternatives
| Need | Tool |
|---|---|
| Admin access to the whole server | SFTP (FileZilla, WinSCP) over SSH. See scp |
| Sync between devices | Syncthing, Seafile, Nextcloud, oCIS |
| Mount a remote folder locally | SSHFS. See SSHFS |
| Web UI with more features | Nextcloud / oCIS |
Quick reference
| Task | Command / setting |
|---|---|
| Run | docker run … -v /srv/files:/srv filebrowser/filebrowser |
| Initial password | docker logs filebrowser |
| User scope | Settings → User Management → Scope |
| Disable commands | Uncheck “Execute commands” |
| Large uploads | Nginx client_max_body_size 0 |
Related: ownCloud Infinite Scale and Docker security.