Индекс на дневникаDockup / бележка от практиката
Note / self-host-filebrowser

Как да хоствате File Browser самостоятелно през 2026 г.: томове, акаунти и безопасно споделяне

Практическо ръководство за self-hosting на File Browser с Docker, портове, постоянни данни, TLS, сигурност, резервни копия и проблемите, които възпрепятстват използването му в production.

Разглеждайте File Browser като малка система, а не като Docker image. Целта от гледна точка на потребителя е ясна: web file manager за прикачен volume; deployment-ът е приемлив само когато можете да създадете ограничен потребител, да качите и преименувате файл, да редактирате текст, да генерирате share и да потвърдите, че потребителят не може да излезе извън зададения му root.

Това разграничение улавя failure mode-а, с който операторите се сблъскват след локално тестване: монтираните файлове използват permissions от host-а, които container-ът не може да прочете. То също така прави плана за backup и upgrade достатъчно конкретен, за да бъде тестван.

Открийте всеки постоянен байт във File Browser

Docker image може да бъде изтеглен отново; предоставяните файлове, както и базата данни и настройките на File Browser, не могат. Монтирайте /srv преди bootstrap, запишете безобидни примерни данни и заменете container-а, за да докажете, че този path действително е persistent. Проверете ефективния mount, вместо да разчитате на име на Compose файл, и се уверете, че runtime user-ът може да записва там, където File Browser очаква.

Изберете retention и off-host destination, след което упражнете recovery, без да засягате production. Упражнението е успешно само когато предоставяните файлове, потребителите, scope-овете, share-овете и настройките се възстановят, а ограничен акаунт остане в рамките на зададения му root. При state, базиран на database, комбинирайте storage snapshots с application-consistent exports, както е описано в point-in-time recovery срещу snapshots.

Стартирайте първия instance, близък до production

Поддържайте първоначалното извикване на File Browser достатъчно възпроизводимо, за да може да бъде прегледано в pull request.

docker run -d \
  --name file-browser \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  -v file-browser-data:/srv \
  -v file-browser-db:/database \
  -v file-browser-config:/config \
  filebrowser/filebrowser:latest

Не разчитайте на latest, след като вече има реални данни. Запишете работещия digest, container user-а и ownership-а на mount-овете. Следете application log-а през цял тест — създайте ограничен потребител, качете и преименувайте файл, редактирайте текст, генерирайте share и потвърдете, че потребителят не може да излезе извън зададения му root — и отбележете всички migrations, преди да насочите production traffic към route-а.

Очертайте runtime границата на File Browser

Process health и product health са отделни неща при File Browser. Порт 80 може да отговаря, докато user-facing transaction-ът все още се проваля. Локалното runtime изискване е отделен persistent path за database и settings. Валидирайте го с acceptance workload; idle health check не може да докаже, че ресурсът е достатъчен.

Използвайте това readiness упражнение след значими промени в конфигурацията: създайте ограничен потребител, качете и преименувайте файл, редактирайте текст, генерирайте share и потвърдете, че потребителят не може да излезе извън зададения му root. Не включвайте скъпи external checks в liveness probes, за да не предизвика outage на provider-а restart loop. Следенето на capacity трябва да обхваща underlying disk throughput, размера на upload-ите, concurrent downloads и броя на директориите — това е по-близо до реалното натоварване на File Browser от page requests.

Направете публичния origin недвусмислен

Изложете един HTTPS hostname за File Browser; оставете raw port 80 private. Публикувайте UI през HTTPS, но задайте внимателно scope-а на served root. Така предотвратявате браузъри и API clients да научат за два конкуриращи се адреса.

От чист client изпълнете познатата работеща transaction и проверете първата failing request. Използвайте ръководството за custom domain, когато DNS или TLS са конфигурирани неправилно. Разглеждайте „монтираните файлове използват permissions от host-а, които container-ът не може да прочете“ като отделна application diagnosis, след като route-ът е доказано работещ.

Release gate за File Browser

Създайте малък, disposable File Browser fixture и го запазете за всеки release. Fixture-ът трябва да упражнява реалния workflow: създайте ограничен потребител, качете и преименувайте файл, редактирайте текст, генерирайте share и потвърдете, че потребителят не може да излезе извън зададения му root. Запишете image digest-а, external hostname-а, dependency address-а и очаквания резултат, така че следващият оператор да може да повтори теста, без да интерпретира това ръководство.

Изпълнете fixture-а три пъти. Първо използвайте чистия deployment. Второ заменете container-а, без да променяте durable state. Трето възстановете backup-а в празна environment. Третото изпълнение е успешно само когато предоставяните файлове, потребителите, scope-овете, share-овете и настройките се възстановят, а ограничен акаунт остане в рамките на зададения му root. По време на всяко изпълнение събирайте latency и resource use около underlying disk throughput, размера на upload-ите, concurrent downloads и броя на директориите; това се превръща в baseline за alerts, вместо в произволен процент CPU.

Накрая умишлено тествайте negative path-а: изпратете безобиден input близо до resource или format limit-а, свързан с тази граница: монтираните файлове използват permissions от host-а, които container-ът не може да прочете. Потвърдете, че File Browser се проваля видимо, без да повреди state-а, възстановете правилното условие и повторете успешната transaction. Release record, съдържащ тези четири резултата, е по-силно доказателство от screenshots на dashboard или еднократен curl response.

Проверки на capacity и upgrade

Idle health check казва малко за File Browser. Следете underlying disk throughput, размера на upload-ите, concurrent downloads и броя на директориите, след което създавайте alerts за симптома, който потребителите изпитват: провал на действието „създайте ограничен потребител, качете и преименувайте файл, редактирайте текст, генерирайте share и потвърдете, че потребителят не може да излезе извън зададения му root“. Поддържайте liveness локален и евтин; нека readiness отчита migrations или initialization, без да предизвиква restart storm.

Рисковата зона при upgrade е, че migrations на database и settings във File Browser имат значение, въпреки че served files се намират на отделен mount. Прочетете release notes, направете snapshot на state-а, deploy-нете target version срещу възстановено копие и повторете acceptance action-а. Ако монтираните файлове използват permissions от host-а, които container-ът не може да прочете, свържете client request-а с първия релевантен application log, вместо сляпо да изтривате state или да добавяте redirects.

Намалете authority-то, притежавано от File Browser

Bootstrap credentials са временни; trust model-ът е постоянен. При File Browser следете да не предоставяте / или директория със secrets вместо dedicated share, използвайте dedicated directory вместо host root и дайте на всеки акаунт най-тесния file scope, от който се нуждае.

В този baseline File Browser няма задължителен bootstrap secret; защитете действителния му administrator account или upstream authentication-а. Стартирайте image-а без ненужни Linux capabilities и излагайте само публичния application route. Поддържайте administrator activity видима, без да записвате secret values.

Използвайте Dockup за platform layer-а

При File Browser Dockup е най-полезен на границата между image и durable service. Той запазва route-а към 80, TLS, secret values и storage-а при замяна на container-а, независимо дали compute-ът принадлежи на Dockup или на вашия attached server.

Завършете с application knowledge: публикувайте UI през HTTPS, но задайте внимателно scope-а на served root; потвърдете локалното изискване — отделен persistent path за database и settings; и изпълнете тази проверка: създайте ограничен потребител, качете и преименувайте файл, редактирайте текст, генерирайте share и потвърдете, че потребителят не може да излезе извън зададения му root. Запазете резултата като deployment check, така че следващият image update да бъде оценен по поведението, а не по container status-а.

Често задавани въпроси

Какво е необходимо на File Browser за production deployment?

Насочете container-а на File Browser на порт 80 през един HTTPS origin. Локалното runtime изискване е отделен persistent path за database и settings. Не обявявайте File Browser за готов, докато не можете да създадете ограничен потребител, да качите и преименувате файл, да редактирате текст, да генерирате share и да потвърдите, че потребителят не може да излезе извън зададения му root.

Кои данни на File Browser трябва да бъдат включени в backup?

Направете /srv persistent и включете served files, както и database и settings на File Browser, в същия recovery manifest. Чистият File Browser restore е успешен само когато предоставяните файлове, потребителите, scope-овете, share-овете и настройките се възстановят, а ограничен акаунт остане в рамките на зададения му root.

Изисква ли File Browser HTTPS зад reverse proxy?

Използвайте HTTPS за публичния File Browser origin и оставете порт 80 във вътрешния route. Прилагайте правилно File Browser setting-а: публикувайте UI през HTTPS, но задайте внимателно scope-а на served root. При File Browser HTTPS защитава credentials или user content при пренос и поддържа консистентно поведение на client-а, чувствително към origin.

Как трябва да се тества upgrade на File Browser?

Възстановете текущия state на File Browser в изолиран deployment, приложете candidate version и повторете acceptance transaction-а. Обърнете особено внимание, защото migrations на database и settings във File Browser имат значение, въпреки че served files се намират на отделен mount. Запазете предишния File Browser image, докато границите на data migration-а и rollback-а не бъдат изяснени.