File Browser закрывается 1 сентября: чем заменить и как перенести
Самый популярный веб-файловый менеджер для сервера уходит на покой — без багфиксов и патчей безопасности. Разбираемся, насколько это срочно, что ставить вместо и как переехать за полчаса, ничего не потеряв.
Что случилось
27 июля 2026 года вышел последний плановый релиз File Browser — v2.63.23. На следующий день автор проекта, Энрике Диас, опубликовал объявление о его закрытии. Репозиторий архивируется 1 сентября 2026.
File Browser — это тот самый лёгкий веб-интерфейс к папке на сервере: зашёл в браузере, видишь дерево файлов, можешь загрузить, скачать, переименовать, поделиться ссылкой. Один бинарник, никаких зависимостей. За десять с лишним лет проект собрал больше 35 тысяч звёзд на GitHub и стоит у огромного числа людей на домашних серверах и VPS.
Что именно происходит 1 сентября: репозиторий переходит в режим «только чтение» — нельзя создать issue или прислать правку. Новых релизов не будет. Найденные уязвимости будут публиковаться, но не исправляться. При этом уже выпущенные релизы и Docker-образы остаются доступны и никуда не пропадут.
Причину автор объясняет честно: проект начинался как хобби пятнадцатилетнего подростка больше десяти лет назад, и заложенная тогда архитектура не выдерживает современных требований к безопасности. Формулировка из объявления: это «нельзя залатать — File Browser нужно переписывать с нуля», а времени и желания на это уже нет.
Насколько это срочно лично для вас
Зависит от того, как у вас развёрнут File Browser. Автор отдельно упоминает проблемы с сессиями: истёкшие токены в некоторых случаях продолжают работать, а выход из аккаунта не отзывает токен — то есть если токен у вас украли, он останется действительным. И это не единственная архитектурная дыра, просто самая наглядная.
Дальше исправлений не будет вообще. Поэтому:
File Browser доступен из интернета по домену — переезжайте сейчас
Это самый рискованный сценарий: публично доступный сервис, который больше никто не чинит. Не тяните до сентября.
Доступ только через VPN или из локальной сети — время есть, но план нужен
Риск сильно ниже: чтобы добраться до уязвимости, нужно сначала попасть в вашу сеть. Но замороженный софт со временем начнёт ломаться и по другим причинам — например, при обновлении окружения.
Главная хорошая новость дальше — переезд почти наверняка окажется проще, чем вы думаете.
Почему переезд — это не «миграция данных»
Ключевой момент, который снимает большую часть тревоги: File Browser не владеет вашими файлами. Он не складывает их в свою базу, не переименовывает, не режет на куски. Он просто показывает содержимое папки, которую вы ему примонтировали.
Что лежит в базе File Browser (файл database.db):
- учётные записи и их права
- настройки интерфейса
- созданные ссылки-шары
И всё. Самих файлов там нет.
Поэтому «переезд» сводится к тому, чтобы направить новый инструмент на ту же самую папку и заново завести пользователей. Файлы при этом вообще не двигаются с места — вы их даже не копируете.
Что действительно придётся пересоздать вручную: учётные записи и публичные ссылки-шары — старые ссылки после переезда перестанут работать, потому что их выдавал старый сервис. Если вы кому-то раздавали такие ссылки, предупредите заранее.
Что ставить вместо
Автор File Browser сознательно не советует конкретную замену — и правильно делает, потому что «файловый менеджер в браузере» люди понимают очень по-разному. Вот четыре живых проекта и то, какую задачу каждый закрывает на самом деле:
| Инструмент | Похож на File Browser | Кому подходит |
|---|---|---|
| FileBrowser Quantum | Очень — вырос из него | Большинству. Тот же сценарий, знакомый интерфейс, плюс поиск, превью, OIDC и 2FA |
| copyparty | Отдалённо — другой подход | Тем, у кого главное — заливать большие файлы: докачка после обрыва, WebDAV, FTP, SMB |
| Filestash | Частично | Тем, кому нужен единый вход не в папку, а в чужие хранилища: S3, SFTP, FTP, WebDAV, NFS, Git |
| Nextcloud | Нет | Это облако с синхронизацией, календарём и офисом. Тяжелее в разы — оправдано, только если нужен весь этот набор |
Дальше подробно разберём FileBrowser Quantum — это замена «один в один» для большинства сценариев. В конце коротко покажу copyparty для тех, у кого другой профиль задач.
Честное предупреждение про Quantum. Проект развивает по сути один человек — в официальном FAQ он так и описан, как личное хобби автора. Вы уже один раз обожглись на закрытии проекта, поэтому знать это стоит заранее. С другой стороны: лицензия Apache 2.0, коммиты каждый день, релизы в стабильной ветке раз в 1–3 месяца, и главное — ваши файлы всё так же лежат обычной папкой на диске. Даже если однажды закроется и Quantum, вы теряете только веб-интерфейс.
Чем FileBrowser Quantum отличается от оригинала
Quantum начинался как форк File Browser, но за это время разошёлся с ним настолько, что общего кода почти не осталось. Мотив в FAQ объясняется просто: базовые функции годами висели в оригинале нерассмотренными пул-реквестами — форк появился именно поэтому.
Что добавилось
- Мгновенный поиск по проиндексированным файлам — не рекурсивный обход при каждом запросе
- Несколько источников (папок) в одной установке, с правилами включения и исключения
- Нормальная аутентификация: пароль с двухфакторкой, OIDC, LDAP, вход через прокси
- Превью для видео, офисных документов, обложек и даже 3D-моделей
- WebDAV — можно подключить папку как сетевой диск
- Настройка через YAML-файл вместо флагов командной строки
Отдельно стоит отметить то, ради чего вы, собственно, и переезжаете: в Quantum выход из аккаунта действительно отзывает токен на стороне сервера. Это ровно та дыра, о которой писал автор оригинала, — и здесь её нет.
Что убрали — и это важно проверить до переезда
- Терминал в браузере — удалён из соображений безопасности и не вернётся
- Runners (запуск команд по событиям, например скрипт после загрузки файла) — удалены, обещают заменить нормальной системой задач
- Управление пользователями из командной строки — теперь через конфиг, веб-интерфейс или API
Если вы использовали runners для автоматизации — заложите время на то, чтобы переписать эту логику отдельным скриптом по cron или через n8n. Это единственное, что может превратить получасовой переезд в полудневный.
Установка FileBrowser Quantum
Ставим рядом со старым File Browser, на другом порту. Так вы сможете спокойно всё проверить и выключить старый только тогда, когда убедитесь, что новый работает.
Дальше по тексту: файлы лежат в /srv/files, домен — files.example.com. Подставьте свои значения. Нужен установленный Docker — если его нет, есть отдельная статья про Docker Compose.
Шаг 1. Сделайте бэкап старой базы
Файлы вы не трогаете, но старую базу лучше сохранить — из неё можно подсмотреть список пользователей и их права, когда будете заводить их заново. Найдите её и скопируйте:
# Ищем базу старого File Browser
sudo find / -name "database.db" -not -path "*/docker/overlay2/*" 2>/dev/null
# Копируем найденный файл в надёжное место
cp /path/to/database.db ~/filebrowser-old-database.db.bakШаг 2. Создайте каталог и конфиг
mkdir -p ~/filebrowser/data && cd ~/filebrowser
nano data/config.yamlСодержимое data/config.yaml:
server:
port: 80
baseURL: "/"
# Домен, по которому сервис виден снаружи.
# Без него ссылки-шары будут указывать на внутренний адрес.
externalUrl: "https://files.example.com"
# Кэш превью. Внутри каталога data, чтобы переживал перезапуск.
cacheDir: "/home/filebrowser/data/tmp"
database: "/home/filebrowser/data/database.db"
sources:
- path: "/folder"
name: "files"
config:
defaultEnabled: true
auth:
adminUsername: admin
# Через сколько часов истекает сессия в браузере
tokenExpirationHours: 8
methods:
password:
enabled: true
minLength: 12
signup: falseПро пути. /folder — это путь внутри контейнера, а не на сервере. Реальную папку мы примонтируем в него на следующем шаге. И не указывайте здесь корень / — индексация всей файловой системы съест ресурсы и откроет лишнее.
Шаг 3. Docker Compose
Создайте ~/filebrowser/docker-compose.yml:
services:
filebrowser:
image: gtstef/filebrowser:1.5-stable
container_name: filebrowser
restart: unless-stopped
ports:
# Наружу не выставляем — доступ только через Nginx
- "127.0.0.1:8080:80"
volumes:
- /srv/files:/folder
- ./data:/home/filebrowser/data
environment:
# Значение берётся из файла .env рядом с этим файлом
FILEBROWSER_ADMIN_PASSWORD: "${FILEBROWSER_ADMIN_PASSWORD}"Обратите внимание на 127.0.0.1:8080:80. Внутри контейнера сервис слушает порт 80 — так задано в конфиге и на это же рассчитан встроенный healthcheck образа, поэтому внутренний порт лучше не менять. А снаружи мы публикуем его на 8080 и только на localhost: напрямую из интернета достучаться нельзя, всё пойдёт через Nginx.
Сам пароль держим в отдельном файле ~/filebrowser/.env — Docker Compose подхватывает его автоматически. Так пароль не попадёт в конфиг, который вы захотите кому-то показать или положить в git:
cd ~/filebrowser
echo 'FILEBROWSER_ADMIN_PASSWORD=ваш-длинный-пароль' > .env
chmod 600 .envШаг 4. Права на папки
Контейнер работает не от root, а от пользователя filebrowser с UID и GID 1000. Значит, он должен иметь доступ и к каталогу с базой, и к папке с файлами — иначе получите ошибки прав при первом же запуске:
# Каталог с конфигом, базой и кэшем
chown -R 1000:1000 ~/filebrowser/data
# Папка с вашими файлами — если она принадлежит root
sudo chown -R 1000:1000 /srv/filesВторую команду выполняйте осознанно: она меняет владельца всех ваших файлов. Если этой папкой пользуется что-то ещё (например, веб-сервер или медиасервер), сначала проверьте, под каким пользователем работают они, и при необходимости выдайте доступ через группу, а не сменой владельца.
Шаг 5. Запуск
cd ~/filebrowser
docker compose up -d
docker compose logs -fВ логах должно появиться сообщение о запуске сервера и об индексации источника. Проверим, что сервис отвечает:
curl -i http://127.0.0.1:8080/healthОтвет 200 OK — значит всё поднялось. Теперь можно открывать доступ снаружи.
Важный нюанс с паролем администратора
Это место работает не так, как ожидает большинство, и в документации об этом не сказано — поэтому разберём отдельно. Пока переменная FILEBROWSER_ADMIN_PASSWORD задана, пароль администратора принудительно устанавливается заново при каждом запуске контейнера, а не только при первом. В логах это видно строкой «Resetting admin user to default username and password».
Отсюда два практических вывода.
Первое: не меняйте пароль администратора через веб-интерфейс. При следующем перезапуске контейнера он вернётся к значению из .env, и вы решите, что «сломался вход». Чтобы сменить пароль админа, правьте .env и перезапускайте контейнер. На обычных пользователей это не распространяется — они меняют свои пароли как обычно.
Второе: не запускайте сервис без этой переменной. Если она не задана, администратор создастся со стандартной парой admin / admin. Для сервиса, смотрящего в интернет, это открытая дверь.
Хорошая новость: если первый запуск уже случился с паролем по умолчанию, ничего удалять не нужно. Достаточно задать переменную и перезапустить — новый пароль применится к существующей базе:
cd ~/filebrowser
echo 'FILEBROWSER_ADMIN_PASSWORD=ваш-длинный-пароль' > .env
chmod 600 .env
docker compose up -d --force-recreateNginx и HTTPS
Создайте /etc/nginx/sites-available/filebrowser:
server {
listen 80;
server_name files.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Размер загружаемого файла. 0 — без ограничения со стороны Nginx
client_max_body_size 0;
# Не копить ответ в буфере: нужно для живых обновлений интерфейса
proxy_buffering off;
# Не копить загружаемый файл на диске Nginx перед отправкой дальше
proxy_request_buffering off;
# Запас по времени на большие загрузки
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}Включаем сайт и выпускаем сертификат:
ln -s /etc/nginx/sites-available/filebrowser /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
# Сертификат Let's Encrypt — certbot сам допишет секцию с HTTPS
certbot --nginx -d files.example.comДомен должен уже указывать A-записью на IP сервера, иначе certbot не сможет подтвердить владение.
Три заголовка обязательны. Host нужен, чтобы кука сессии привязалась к правильному домену — без него вас будет постоянно разлогинивать. X-Forwarded-Proto — чтобы сервис знал, что снаружи HTTPS, и не генерировал ссылки на http.
Первый вход и перенос пользователей
Откройте https://files.example.com и войдите как admin с паролем из файла .env. Вы увидите содержимое /srv/files — те же файлы, что показывал старый File Browser.
Заводим остальных пользователей
Настройки → User Management → создать пользователя. Права в Quantum разделены на группы: доступ к файлам (просмотр, скачивание, изменение, создание, удаление) и общие возможности (администрирование, API, создание ссылок).
Разумный минимум для обычного пользователя: разрешить скачивание и изменение, запретить администрирование и доступ к API. Не выдавайте админские права «чтобы работало» — в интерфейсе всё настраивается точечно.
Включите двухфакторную аутентификацию
Раз уж вы переезжаете из-за проблем с безопасностью — не повторяйте старую конфигурацию. Если сервис смотрит в интернет, включите обязательный одноразовый код. Для этого в уже созданном data/config.yaml допишите одну строку в конец блока password — остальные строки уже на месте, заменять блок целиком не нужно:
auth:
adminUsername: admin
tokenExpirationHours: 8
methods:
password:
enabled: true
minLength: 12
signup: false
enforcedOtp: true # добавили: обязательный код из приложения-аутентификатораПосле docker compose restart вход по одному паролю перестанет работать: пока пользователь не привяжет приложение-аутентификатор, сервер будет отвечать отказом. Так и задумано — привязка происходит в настройках профиля.
Пересоздайте ссылки-шары
Старые публичные ссылки работать не будут — их выдавал прежний сервис. Пересоздайте нужные через кнопку «поделиться» на файле или папке. В диалоге создания есть то, чего в оригинале не хватало: срок жизни ссылки, пароль на доступ, запрет анонимного доступа и ограничение списком конкретных пользователей. Если раньше вы раздавали вечные ссылки без пароля — сейчас хороший повод это поменять.
Выключаем старый File Browser
Убедились, что новый сервис работает и все файлы на месте — гасим старый. Если он в Docker:
cd /путь/к/старому/filebrowser
docker compose down
# Убедитесь, что контейнер действительно остановлен
docker ps | grep -i filebrowserЕсли он был установлен как systemd-сервис:
systemctl stop filebrowser
systemctl disable filebrowserНе удаляйте старый конфиг и базу сразу — подержите пару недель, пока не убедитесь, что ничего не забыли перенести.
copyparty — если главное для вас загрузки
copyparty решает ту же задачу под другим углом. Его сильная сторона — передача файлов: загрузка идёт кусками и продолжается после обрыва связи, а не начинается заново. Плюс он одновременно отдаёт содержимое по WebDAV, FTP, SFTP и SMB — то есть ту же папку можно подключить сетевым диском без дополнительных сервисов.
Расплата — интерфейс. Он функциональный, но заметно более «инженерный», чем у Quantum. Берите copyparty, если регулярно заливаете многогигабайтные файлы по нестабильному каналу; в остальных случаях Quantum будет привычнее.
Минимальная установка
Создайте каталог и файл конфигурации ~/copyparty/copyparty.conf:
[global]
e2dsa # индексировать файлы, чтобы работал поиск
ansi # цветные логи
[accounts]
anna: ЗАМЕНИТЕ_НА_ПАРОЛЬ
[/] # том в корне веб-интерфейса
/w # отдаём каталог /w внутри контейнера
accs:
rwmda: anna # чтение, запись, перемещение, удаление, админ — только annaНе запускайте copyparty без конфига. По умолчанию, без файла настроек, он отдаёт папку на чтение и запись кому угодно без пароля. Это удобно для разовой передачи файлов в локальной сети и катастрофично для сервиса, смотрящего в интернет.
Файл ~/copyparty/docker-compose.yml:
services:
copyparty:
image: copyparty/ac:latest
container_name: copyparty
restart: unless-stopped
user: "1000:1000"
ports:
- "127.0.0.1:3923:3923"
volumes:
- ./:/cfg # сюда кладём copyparty.conf
- /srv/files:/w # раздаваемая папкаПрава нужны те же, что и для Quantum, — контейнер тоже работает от UID 1000:
chown -R 1000:1000 ~/copyparty
sudo chown -R 1000:1000 /srv/files
cd ~/copyparty
docker compose up -dКонфиг подхватывается из каталога /cfg — важно, чтобы имя файла заканчивалось на .conf, иначе он будет проигнорирован. Nginx настраивается так же, как выше, только порт 3923.
Одно отличие от Quantum, о котором стоит знать заранее: copyparty создаёт служебный каталог .hist внутри раздаваемой папки — там лежат поисковый индекс и миниатюры. Это нормально, но учтите при настройке бэкапов: этот каталог копировать не нужно, он пересоздаётся сам.
Обновление и бэкап
Стабильная ветка Quantum обновляется раз в 1–3 месяца:
cd ~/filebrowser
docker compose pull
docker compose up -dТег 1.5-stable даёт патчи внутри ветки 1.5, но не утащит вас на 2.0 внезапно. Переход на v2.0.0 — это отдельная одноразовая миграция базы с BoltDB на SQLite, и делать её нужно осознанно, по официальной инструкции, а не случайным pull.
Бэкапить нужно каталог data — в нём конфиг и база с пользователями. Контейнер на время копирования лучше остановить, чтобы база не оказалась в промежуточном состоянии:
cd ~/filebrowser
docker compose stop
# tmp — это кэш превью, он пересоздаётся сам и в бэкапе не нужен
tar czf ~/filebrowser-backup-$(date +%F).tar.gz --exclude=data/tmp data .env
docker compose startСами файлы бэкапятся отдельно и обычным способом — про это есть статья про restic и rclone.
Частые проблемы
Контейнер бесконечно перезапускается, в логах: Field validation for 'Sources' failed on the 'required' tag
Сервис не видит ни одного источника. Самая частая причина — блок sources написан на верхнем уровне файла, а не внутри server. Именно в таком виде он показан на одной из страниц официальной документации, но в версии 1.5.x конфиг с ним не проходит проверку.
Правильно — server.sources, с отступом, как в примере выше. Ту же ошибку даёт случайно опустевший или сломанный отступами config.yaml — YAML чувствителен к пробелам, и табуляции в нём недопустимы.
Контейнер стартует и сразу падает, в логах ошибки про права доступа
Почти всегда это владелец каталога data. Процесс внутри контейнера работает от UID 1000 и не может писать в каталог, принадлежащий root. Выполните chown -R 1000:1000 ~/filebrowser/data и перезапустите. Та же причина, если сервис поднялся, но не создаются превью — тогда проверьте доступ к каталогу из server.cacheDir.
Постоянно выкидывает на страницу входа
Не передаётся заголовок Host — кука сессии привязывается не к тому домену и браузер её не отдаёт обратно. Проверьте, что в блоке location есть proxy_set_header Host $host;. Вторая возможная причина — слишком маленький tokenExpirationHours в конфиге: по умолчанию сессия живёт всего 2 часа.
Большие файлы не загружаются, Nginx отдаёт 413 Request Entity Too Large
Ограничение по умолчанию в Nginx — всего 1 МБ. В конфиге выше стоит client_max_body_size 0; — убедитесь, что эта строка попала внутрь нужного location, а не осталась в другом файле конфигурации. После правки — nginx -t && systemctl reload nginx.
Ссылки-шары ведут на localhost или на неправильный адрес
Не задан server.externalUrl в config.yaml. Сервис не знает, под каким внешним адресом он доступен, и подставляет то, что видит изнутри контейнера. Пропишите полный адрес с протоколом — https://files.example.com — и перезапустите контейнер.
Поиск не находит файлы, которые точно есть
Quantum ищет по индексу, а индекс строится в фоне после старта. На большой папке первичная индексация занимает время — посмотрите docker compose logs -f, там видно её прогресс. Если индексация не начинается вовсе, проверьте, что путь в server.sources указан внутри контейнера (в нашем примере это /folder), а не как путь на сервере.
Коротко: план переезда
- Сохранить старую базу как бэкап — из неё возьмёте список пользователей
- Поднять FileBrowser Quantum на соседнем порту, направив на ту же папку
- Задать пароль администратора в
.env— и менять его потом только там, а не в веб-интерфейсе - Настроить Nginx с HTTPS, включить обязательный TOTP
- Завести пользователей и пересоздать нужные ссылки-шары
- Убедиться, что всё работает, и выключить старый File Browser
Ваши файлы за весь переезд не сдвинутся с места ни разу. Quantum нетребователен: для домашнего использования хватает VPS с 1 ГБ оперативной памяти. Заметно больше ресурсов он попросит только в двух случаях — первичная индексация очень большой папки и генерация превью для видеотеки.
Другие self-hosted сервисы: