Sometimes you just need a simple way to browse and manage files on your server through a web browser. No complex sync engine, no collaboration features, no bloat — just a clean file manager that works. That’s exactly what Filebrowser delivers.
Filebrowser gives you a web-based file manager with upload, download, rename, delete, and sharing capabilities. It’s a single binary (or Docker container), uses almost no resources, and takes about two minutes to set up.
What Is Filebrowser?
Filebrowser is an open-source, self-hosted web application that provides a file management interface. Think of it as a web-based alternative to SSH + terminal file management.
Features include:
- Browse files and directories with a clean, responsive UI
- Upload and download files and folders (drag-and-drop supported)
- Create, rename, move, and delete files and directories
- Built-in code editor for text files
- Share files via temporary links (with optional password and expiry)
- User management with permissions and scope restrictions
- Command runner for executing predefined commands
- Search across your files
- Multiple themes including dark mode
Prerequisites
- A Linux server with Docker and Docker Compose installed
- A directory you want to manage via the web UI
- Optional: a reverse proxy for HTTPS access (Traefik, Nginx Proxy Manager, or Caddy)
Step 1: Docker Compose Setup
Create a directory for Filebrowser:
mkdir -p ~/filebrowser && cd ~/filebrowser
Create docker-compose.yml:
services:
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
restart: unless-stopped
ports:
- "8085:80"
environment:
- PUID=1000
- PGID=1000
volumes:
# The directory you want to manage:
- /path/to/your/files:/srv
# Filebrowser config and database:
- ./filebrowser.db:/database/filebrowser.db
- ./settings.json:/config/settings.json
Create a minimal settings.json:
{
"port": 80,
"baseURL": "",
"address": "",
"log": "stdout",
"database": "/database/filebrowser.db",
"root": "/srv"
}
Deploy:
docker compose up -d
Access Filebrowser at http://your-server-ip:8085.
Step 2: First Login and Security
Default credentials:
- Username:
admin - Password:
admin
Change these immediately:
- Log in with the defaults
- Click the user icon in the top-right → Settings
- Update your password
- Optionally change the username
Step 3: Set Up Users and Permissions
Filebrowser supports multiple users, each with their own:
- Scope — the directory they can access (sandboxed)
- Permissions — create, rename, modify, delete, download, share, execute
- Locale and theme preferences
To add a user:
- Go to Settings → User Management
- Click New
- Set username, password, and scope (e.g.,
/photosmaps to/srv/photos) - Toggle permissions as needed
This is great for giving family members access to shared files without exposing your entire filesystem.
Permission Presets
| User Type | Permissions |
|---|---|
| Admin | All permissions |
| Uploader | Create, modify (no delete) |
| Viewer | Download only (no create/modify/delete) |
| Sharer | Download + share (read-only + sharing links) |
Step 4: File Sharing
Filebrowser can generate shareable links for files and directories:
- Select a file or folder
- Click the Share button
- Configure:
- Expiry — link auto-expires after a set time
- Password — optional password protection
- Unit — hours, days, or no expiry
- Copy and share the generated link
This is useful for sending large files to people without requiring them to create an account.
Note: Shared links require your Filebrowser instance to be accessible from the internet (via reverse proxy with HTTPS).
Step 5: HTTPS with a Reverse Proxy
Never expose Filebrowser over plain HTTP, especially with file sharing enabled.
Traefik Labels
services:
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
restart: unless-stopped
volumes:
- /path/to/files:/srv
- ./filebrowser.db:/database/filebrowser.db
- ./settings.json:/config/settings.json
labels:
- "traefik.enable=true"
- "traefik.http.routers.filebrowser.rule=Host(`files.example.com`)"
- "traefik.http.routers.filebrowser.entrypoints=websecure"
- "traefik.http.routers.filebrowser.tls.certresolver=letsencrypt"
- "traefik.http.services.filebrowser.loadbalancer.server.port=80"
networks:
- traefik
networks:
traefik:
external: true
Nginx Proxy Manager
- Add a Proxy Host
- Domain:
files.example.com - Forward to:
filebrowserport80 - Enable SSL with Let’s Encrypt
Step 6: Custom Commands (Optional)
Filebrowser can execute shell commands on selected files. This is powerful for workflows like:
- Compressing files/directories
- Converting media formats
- Running scripts on uploaded files
Go to Settings → Global Settings → Commands and define commands:
Security warning: Only enable command execution for trusted admin users. Disable it for regular users by unchecking the “Execute” permission.
Step 7: Managing Large File Libraries
Filebrowser works well for managing various types of file collections:
| Use Case | Mount Path |
|---|---|
| Media server files | /mnt/media:/srv |
| Document archive | /home/user/documents:/srv |
| Shared family files | /mnt/shared:/srv |
| Backup browser | /mnt/backups:/srv (read-only) |
| Download directory | /downloads:/srv |
For read-only access to sensitive directories (like backups), mount with :ro:
volumes:
- /mnt/backups:/srv:ro
Step 8: Branding (Optional)
Customize the Filebrowser interface:
- Go to Settings → Global Settings
- Set Instance Name (shown in the browser tab)
- Upload a custom Logo
- Choose default Theme (light/dark)
Updating Filebrowser
cd ~/filebrowser
docker compose pull
docker compose up -d
Or use Watchtower for automatic updates.
Troubleshooting
Permission denied on files
The container runs as PUID/PGID specified in the environment. Make sure these match the ownership of your files:
# Check file ownership
ls -la /path/to/your/files
# Set ownership if needed
chown -R 1000:1000 /path/to/your/files
Upload fails for large files
If you’re behind a reverse proxy, increase the max body size:
Nginx:
client_max_body_size 10G;
Traefik:
labels:
- "traefik.http.middlewares.filebrowser-size.buffering.maxRequestBodyBytes=10737418240"
Database locked errors
This happens if multiple processes access the database. Ensure only one Filebrowser instance is running:
docker ps | grep filebrowser
Slow browsing on large directories
Filebrowser loads directory listings on demand. For directories with thousands of files, initial load may be slow. Consider organizing files into subdirectories.
Filebrowser vs Alternatives
| Feature | Filebrowser | Nextcloud | Seafile |
|---|---|---|---|
| Resource usage | ~20MB RAM | ~500MB+ RAM | ~200MB RAM |
| Setup complexity | 2 minutes | 15 minutes | 10 minutes |
| File sync | No | Yes | Yes |
| Mobile app | Web only | Yes | Yes |
| Collaboration | No | Yes | Yes |
| Sharing | Basic links | Full sharing | Full sharing |
Choose Filebrowser when you need a simple, lightweight file browser without sync or collaboration features. For full cloud storage with sync, use Nextcloud instead.
Conclusion
Filebrowser is the Swiss Army knife of self-hosted file management. It does one thing — lets you manage files through a web browser — and does it well. At ~20MB of RAM and zero configuration complexity, it’s the kind of tool you install once and forget about until you need it.
Perfect for managing media libraries, sharing files with family, browsing backups, or just having a web GUI for your server’s filesystem without SSHing in every time.
Related guides: