VPSРейтинг
Self-hosted11 августа 2026 · 14 мин

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-recreate

Nginx и 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), а не как путь на сервере.

Коротко: план переезда

  1. Сохранить старую базу как бэкап — из неё возьмёте список пользователей
  2. Поднять FileBrowser Quantum на соседнем порту, направив на ту же папку
  3. Задать пароль администратора в .env — и менять его потом только там, а не в веб-интерфейсе
  4. Настроить Nginx с HTTPS, включить обязательный TOTP
  5. Завести пользователей и пересоздать нужные ссылки-шары
  6. Убедиться, что всё работает, и выключить старый File Browser

Ваши файлы за весь переезд не сдвинутся с места ни разу. Quantum нетребователен: для домашнего использования хватает VPS с 1 ГБ оперативной памяти. Заметно больше ресурсов он попросит только в двух случаях — первичная индексация очень большой папки и генерация превью для видеотеки.