# Verified compose for FileBrowser Quantum, tested 2026-10-18 by the SelfHostBench lab (3 runs; the figures are the median). # Lab host: INTEL(R) XEON(R) PLATINUM 8573C, 2 vCPU, 7.8 GiB RAM, x86_64, Docker 28.0.4. # Floating image tags below were replaced by the version resolved at test time; # the registry digest is in the comment on each image line. # Measurements: filebrowser-quantum.json (schema 3). # Companion env file: filebrowser-quantum.env (save it as .env next to this file). # Secrets are not published: the lab's values are public. In filebrowser-quantum.env: # FILEBROWSER_ADMIN_PASSWORD is commented out. Uncomment it and set your own value (the comment above it explains how). # FileBrowser Quantum 2.0.1 (stable channel): a web file manager for one or more folders on the server. The actively maintained fork of the archived File Browser # (filebrowser/filebrowser, archived 2026-09-01). Single container, no database server (users and settings are in a SQLite file). # # Follows the Docker page of the project's docs (filebrowserquantum.com, "Getting started > Docker", v2.0.x): the image, a data directory at /home/filebrowser/data that holds # config.yaml, the database and the cache, port 80, runs as UID/GID 1000. Differences from the docs, all marked below: a pinned tag, the admin password set through the # environment (the docs let Quantum print a random one into the log), ONE named volume instead of two /path bind mounts (the served folder is a directory inside it), # the config file written inline under `configs` (needs Docker Compose 2.23.1 or newer), a localhost-only port, and a health check every 5 s. # # Channels: Quantum ships a `stable` and a `beta` channel. This file follows STABLE (2.0.x). Beta (2.1.x) gets new features first and "may encounter unexpected issues". # Image variants: the default image (about 60 MB) includes ffmpeg and document preview; `-slim` (about 15 MB) leaves them out. This file uses the default image. # # Do not expose it directly to the internet: put a reverse proxy with TLS in front. name: filebrowser-quantum services: filebrowser: image: gtstef/filebrowser:2.0.1-stable # sha256:2e3936caf7b12908f7d3ebb68ddfcea075cda5f732e4bd95beae6cfa529cbec7 (version v2.0.1-stable, from label:org.opencontainers.image.version) restart: unless-stopped # Quantum does not create the folder it serves, and a second named volume would belong to root while Quantum runs as UID 1000 and must write into it. # So the folder is a directory inside the data volume (which the image prepares for UID 1000), made here before Quantum starts. `exec` keeps Quantum as the main process. # With a /path bind mount of a folder you own, as in the docs, you do not need this line: mount it at /folder and set `path: /folder` in the config below. entrypoint: ["sh", "-c", "mkdir -p /home/filebrowser/data/files && exec ./filebrowser"] ports: # Localhost only. A reverse proxy on the host sends traffic here. The docs publish 80:80 on every interface. - "127.0.0.1:8080:80" environment: # The admin password (the user is `admin` unless auth.adminUsername is set in config.yaml). Set in .env. Quantum uses any value except an empty one or `admin` # as given and does not ask for a change at the first login. Without a value it generates a random password and prints it once in the log # (docker compose logs filebrowser), which is what the docs describe; here a value is required so the first login is known. # The docs say a password set in the configuration is applied again at every start, so change it here, not only in the web interface. FILEBROWSER_ADMIN_PASSWORD: "${FILEBROWSER_ADMIN_PASSWORD:?set FILEBROWSER_ADMIN_PASSWORD in .env}" volumes: # config.yaml is mounted here (see `configs`). Quantum keeps its SQLite database (database.sqlite: users, settings, shares) and its cache (tmp/) here, and the folder it # serves is files/ in this directory. This is your data: back it up. - filebrowser-data:/home/filebrowser/data configs: - source: quantum_config target: /home/filebrowser/data/config.yaml healthcheck: # The image's own check (GET /health with curl, every 30 s, 10 s start period) with a shorter interval so the container is marked healthy within seconds. test: ["CMD", "curl", "-f", "http://localhost:80/health"] interval: 5s timeout: 3s start_period: 2s retries: 3 configs: quantum_config: content: | # FileBrowser Quantum config (docs: filebrowserquantum.com > Configuration; every key not set here has its default). server: # Thumbnails, the icon cache and other cached files; inside the data volume so they survive a restart. cacheDir: /home/filebrowser/data/tmp sources: # The folder to serve, from the container's point of view (never "/" and never /var). `name` is how the API refers to the source. - path: /home/filebrowser/data/files name: files config: # New users (and, from 2.0.1, every user at every start) get this source. defaultEnabled: true volumes: filebrowser-data: