Compare commits

..
Author SHA1 Message Date
Alexandre dbd33c5bad Merge pull request #2756 from alexbelgium/copilot/avoid-logging-healthchecks
fix: suppress healthcheck log spam in filebrowser quantum addon
2026-06-03 22:58:17 +02:00
Alexandre c9070c848a Update Dockerfile 2026-06-03 22:57:58 +02:00
Alexandre 6a4996a480 Update Dockerfile 2026-06-03 22:46:50 +02:00
GitHub Actions c838d19ab6 Revert "Update config.yaml"
This reverts commit b1e76dd29d.
2026-06-03 20:08:54 +00:00
Alexandre b1e76dd29d Update config.yaml 2026-06-03 22:06:02 +02:00
Alexandre ad1f5d1703 Update build.json 2026-06-03 22:05:42 +02:00
Alexandre 05b18a7b19 Merge pull request #2755 from alexbelgium/copilot/fix-nginx-rewrite-loop
fix(ente): fix nginx rewrite loop on /index.html causing 500 error
2026-06-03 20:55:25 +02:00
Alexandre 200fbc170f Update config.yaml 2026-06-03 20:55:06 +02:00
github-actions b303e271fb GitHub bot : README updated 2026-06-03 18:27:18 +00:00
copilot-swe-agent[bot] 8c46084fff fix(ente): bump version to 4.4.23 and update changelog for nginx rewrite loop fix 2026-06-03 18:26:55 +00:00
copilot-swe-agent[bot] 4c2f7e5b65 fix(ente): fix nginx rewrite loop by correcting $uri escaping and adding =404 fallback 2026-06-03 17:35:34 +00:00
copilot-swe-agent[bot] 27fa8d0315 Initial plan 2026-06-03 17:33:09 +00:00
github-actions 7f7b4ec0dd GitHub bot: changelog [nobuild] 2026-06-03 15:59:21 +00:00
Alexandre f7aab51691 Update config.yaml 2026-06-03 17:56:46 +02:00
copilot-swe-agent[bot] 042c44f012 fix: suppress healthcheck log spam in filebrowser quantum addon
Add a dedicated nginx health endpoint on 127.0.0.1:3001 with access_log
off that returns 200 at /health. Update HEALTHCHECK to verify both that
the filebrowser process is running (pgrep) and nginx is serving (curl to
health endpoint), avoiding direct HTTP requests to filebrowser that caused
log spam every 5 seconds.
2026-06-03 14:23:39 +00:00
github-actions 3d5f7a2bdf GitHub bot: sanitize (spaces + LF endings) & chmod [nobuild] 2026-06-03 14:16:30 +00:00
Alexandre ebb55b5a61 filebrowser_quantum: add default_user_scope option (1.3.3-8) 2026-06-03 16:15:38 +02:00
Alexandre c2bcfa6b0d Update CHANGELOG.md 2026-06-03 15:56:47 +02:00
Alexandre 1acd08ff83 Update config.yaml 2026-06-03 15:56:37 +02:00
Alexandre 55ceb00cef Update 99-run.sh 2026-06-03 15:56:26 +02:00
Alexandre 463c1819ae Fix description formatting in config.yaml
Removed period from the description of FileBrowser Quantum.
2026-06-03 14:31:07 +02:00
Alexandre 5176c6f4bc Update 99-run.sh 2026-06-03 14:30:54 +02:00
github-actions 366829bfeb GitHub bot: changelog [nobuild] 2026-06-03 12:18:10 +00:00
Alexandre cf140b13b8 Update config.yaml 2026-06-03 14:15:26 +02:00
Alexandre c9526c645a Update 99-run.sh 2026-06-03 14:15:08 +02:00
Alexandre 5f2442acee Update 99-run.sh 2026-06-03 14:10:51 +02:00
github-actions e49df23a04 GitHub bot: changelog [nobuild] 2026-06-03 11:32:55 +00:00
Alexandre 6d044741d2 Update config.yaml 2026-06-03 13:30:16 +02:00
Alexandre d2fc4713bb Update 99-run.sh 2026-06-03 13:30:06 +02:00
Alexandre 4e065f33bd Update CHANGELOG.md 2026-06-03 13:24:37 +02:00
Alexandre 5f952008b4 Update config.yaml 2026-06-03 13:24:28 +02:00
Alexandre b0abe9a45c Refactor FileBrowser config update script 2026-06-03 13:24:21 +02:00
Alexandre 04346dc433 Update 99-run.sh 2026-06-03 13:21:48 +02:00
Alexandre 3fa2e85c6b Nobuild 2026-06-03 11:37:05 +02:00
github-actions e2b538fc21 GitHub bot: changelog [nobuild] 2026-06-03 09:05:11 +00:00
Alexandre ce52de1dfa Update config.yaml 2026-06-03 11:02:06 +02:00
Alexandre 6253d1de2c Update 99-run.sh 2026-06-03 11:01:57 +02:00
Alexandre 73fd43741f Update CHANGELOG.md 2026-06-03 10:52:23 +02:00
Alexandre 069aa315b6 Update config.yaml 2026-06-03 10:52:12 +02:00
Alexandre f3c62f0412 Update Dockerfile 2026-06-03 10:51:58 +02:00
github-actions 02ed4a906f GitHub bot: changelog [nobuild] 2026-06-03 08:51:21 +00:00
Alexandre c878f47287 Update version to 1.3.3-3 in config.yaml 2026-06-03 10:48:41 +02:00
Alexandre 96a72a2d87 filebrowser_quantum: use case statement for auth method selection 2026-06-03 10:48:18 +02:00
Alexandre 758491d04d Update 99-run.sh 2026-06-03 10:47:05 +02:00
Alexandre 3c629f2a60 filebrowser_quantum: replace Python config script with yq commands 2026-06-03 10:41:18 +02:00
Alexandre 4476f62c77 Update 99-run.sh 2026-06-03 10:38:06 +02:00
github-actions 33a4c50d9d GitHub bot: changelog [nobuild] 2026-06-03 08:29:12 +00:00
Alexandre 7eb671f6b3 Update config.yaml 2026-06-03 10:26:26 +02:00
Alexandre 3b791ccc8f clean 2026-06-03 10:25:23 +02:00
Alexandre 9f2cd2ef39 Update Dockerfile 2026-06-03 10:22:39 +02:00
14 changed files with 105 additions and 254 deletions

No files matched your search

+1 -1
View File
@@ -321,7 +321,7 @@ If you want to do add the repository manually, please follow the procedure highl
![aarch64][aarch64-badge] ![aarch64][aarch64-badge]
![amd64][amd64-badge] ![amd64][amd64-badge]
✓ ![image](https://api.iconify.design/mdi/file-search.svg) [FileBrowser Quantum](filebrowser_quantum/) : FileBrowser Quantum provides a modern, responsive file manager with multi-source support, advanced authentication options, and realtime indexing for your Home Assistant files. ✓ ![image](https://api.iconify.design/mdi/file-search.svg) [FileBrowser Quantum](filebrowser_quantum/) : FileBrowser Quantum provides a modern, responsive file manager with multi-source support, advanced authentication options, and realtime indexing for your Home Assistant files
  ![Version](https://img.shields.io/badge/dynamic/yaml?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Ffilebrowser_quantum%2Fconfig.yaml)   ![Version](https://img.shields.io/badge/dynamic/yaml?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Ffilebrowser_quantum%2Fconfig.yaml)
![Update](https://img.shields.io/badge/dynamic/json?label=Updated&query=%24.last_update&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Ffilebrowser_quantum%2Fupdater.json) ![Update](https://img.shields.io/badge/dynamic/json?label=Updated&query=%24.last_update&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Ffilebrowser_quantum%2Fupdater.json)
+2
View File
@@ -1,3 +1,5 @@
## nightly-20260601-2 (03-06-2026)
- Minor bugs fixed
## nightly-20260601 (2026-06-01) ## nightly-20260601 (2026-06-01)
- Update to latest version from tphakala/birdnet-go (changelog : https://github.com/tphakala/birdnet-go/releases) - Update to latest version from tphakala/birdnet-go (changelog : https://github.com/tphakala/birdnet-go/releases)
## nightly-20260524 (2026-05-30) ## nightly-20260524 (2026-05-30)
+1 -1
View File
@@ -126,4 +126,4 @@ slug: birdnet-go
udev: true udev: true
url: https://github.com/alexbelgium/hassio-addons/tree/master/birdnet-go url: https://github.com/alexbelgium/hassio-addons/tree/master/birdnet-go
usb: true usb: true
version: "nightly-20260601" version: "nightly-20260601-2"
+3
View File
@@ -1,4 +1,7 @@
## 4.4.23 (2026-06-03)
- Fix nginx rewrite loop on /index.html causing 500 Internal Server Error in Web UI
## 4.4.22 (2026-05-16) ## 4.4.22 (2026-05-16)
- Update to latest version from ente-io/ente (changelog : https://github.com/ente-io/ente/releases) - Update to latest version from ente-io/ente (changelog : https://github.com/ente-io/ente/releases)
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"build_from": { "build_from": {
"aarch64": "ghcr.io/ente-io/server:latest", "aarch64": "ghcr.io/ente-io/server:927c6a316f181c7901446311f0085593b346b336",
"amd64": "ghcr.io/ente-io/server:latest" "amd64": "ghcr.io/ente-io/server:927c6a316f181c7901446311f0085593b346b336"
} }
} }
+1 -1
View File
@@ -120,6 +120,6 @@ schema:
slug: ente slug: ente
udev: true udev: true
url: https://github.com/alexbelgium/hassio-addons url: https://github.com/alexbelgium/hassio-addons
version: "4.4.22" version: "4.4.22-2"
video: true video: true
webui: http://[HOST]:[PORT:3000] webui: http://[HOST]:[PORT:3000]
+5 -5
View File
@@ -1,20 +1,20 @@
server { server {
listen 3000; root /www/photos; listen 3000; root /www/photos;
location / { try_files \$uri \$uri.html /index.html; } location / { try_files $uri $uri.html /index.html =404; }
} }
server { server {
listen 3001; root /www/accounts; listen 3001; root /www/accounts;
location / { try_files \$uri \$uri.html /index.html; } location / { try_files $uri $uri.html /index.html =404; }
} }
server { server {
listen 3002; root /www/photos; listen 3002; root /www/photos;
location / { try_files \$uri \$uri.html /index.html; } location / { try_files $uri $uri.html /index.html =404; }
} }
server { server {
listen 3003; root /www/auth; listen 3003; root /www/auth;
location / { try_files \$uri \$uri.html /index.html; } location / { try_files $uri $uri.html /index.html =404; }
} }
server { server {
listen 3004; root /www/cast; listen 3004; root /www/cast;
location / { try_files \$uri \$uri.html /index.html; } location / { try_files $uri $uri.html /index.html =404; }
} }
+4
View File
@@ -1,3 +1,7 @@
## 1.3.3-8 (2026-06-03)
- Add `default_user_scope` option: sets the FileBrowser source path and default user scope (must be an existing absolute directory path, defaults to `/`)
- Allow config persistence
## 1.3.3 (2026-05-19) ## 1.3.3 (2026-05-19)
- Update to latest version from gtsteffaniak/filebrowser (changelog : https://github.com/gtsteffaniak/filebrowser/releases) - Update to latest version from gtsteffaniak/filebrowser (changelog : https://github.com/gtsteffaniak/filebrowser/releases)
+4 -26
View File
@@ -52,7 +52,7 @@ RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_auto
# Manual apps # Manual apps
ENV PACKAGES="bind-tools \ ENV PACKAGES="bind-tools \
nginx \ nginx \
python3" python3 yq"
# Automatic apps & bashio # Automatic apps & bashio
COPY ha_autoapps.sh /ha_autoapps.sh COPY ha_autoapps.sh /ha_autoapps.sh
@@ -71,7 +71,8 @@ RUN chmod 777 /ha_entrypoint.sh
COPY bashio-standalone.sh /usr/local/lib/bashio-standalone.sh COPY bashio-standalone.sh /usr/local/lib/bashio-standalone.sh
RUN chmod 0755 /usr/local/lib/bashio-standalone.sh RUN chmod 0755 /usr/local/lib/bashio-standalone.sh
RUN sed -i "s|/command/with-contenv|/usr/bin/env|g" "/ha_entrypoint.sh" RUN sed -i "s|/command/with-contenv|/usr/bin/env|g" "/ha_entrypoint.sh" && \
[[ -f /etc/cont-init.d/01-config_yaml.sh ]] && rm -r /etc/cont-init.d/01-config_yaml.sh
VOLUME [ "/data" ] VOLUME [ "/data" ]
WORKDIR / WORKDIR /
@@ -114,27 +115,4 @@ LABEL \
# 6 Healthcheck # # 6 Healthcheck #
################# #################
# Avoid spamming logs # Upstream
# hadolint ignore=SC2016
RUN \
# Handle Apache configuration
if [ -d /etc/apache2/sites-available ]; then \
for file in /etc/apache2/sites-*/*.conf; do \
sed -i '/<VirtualHost/a \ \n # Match requests with the custom User-Agent "HealthCheck" \n SetEnvIf User-Agent "HealthCheck" dontlog \n # Exclude matching requests from access logs \n CustomLog ${APACHE_LOG_DIR}/access.log combined env=!dontlog' "$file"; \
done; \
fi && \
\
# Handle Nginx configuration
if [ -f /etc/nginx/nginx.conf ]; then \
awk '/http \{/{print; print "map $http_user_agent $dontlog {\n default 0;\n \"~*HealthCheck\" 1;\n}\naccess_log /var/log/nginx/access.log combined if=$dontlog;"; next}1' /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.new && \
mv /etc/nginx/nginx.conf.new /etc/nginx/nginx.conf; \
fi
ENV HEALTH_PORT="8080" \
HEALTH_URL=""
HEALTHCHECK \
--interval=5s \
--retries=5 \
--start-period=30s \
--timeout=25s \
CMD curl -A "HealthCheck: Docker/1.0" -s -f "http://127.0.0.1:${HEALTH_PORT}${HEALTH_URL}" &>/dev/null || curl -k --fail "https://127.0.0.1:${HEALTH_PORT}${HEALTH_URL}" &>/dev/null || exit 1
+4 -6
View File
@@ -1,9 +1,7 @@
# Home assistant add-on: FileBrowser Quantum # Home assistant add-on: FileBrowser Quantum
I maintain this and other Home Assistant add-ons in my free time: keeping up with upstream changes, HA changes, and testing on real hardware takes a lot of time (and some money). I use around 5-10 of my >110 addons so regularly I install test machines (and purchase some test services such as vpn) that I don't use myself to troubleshoot and improve the addons I maintain this and other Home Assistant add-ons in my free time: keeping up with upstream changes, HA changes, and testing on real hardware takes a lot of time (and some money). I use around 5-10 hours a week for this. If this add-on saves you time or makes your setup easier, I would be very grateful for your support!
If this add-on saves you time or makes your setup easier, I would be very grateful for your support!
[![Buy me a coffee][donation-badge]](https://www.buymeacoffee.com/alexbelgium) [![Buy me a coffee][donation-badge]](https://www.buymeacoffee.com/alexbelgium)
[![Donate via PayPal][paypal-badge]](https://www.paypal.com/donate/?hosted_button_id=DZFULJZTP3UQA) [![Donate via PayPal][paypal-badge]](https://www.paypal.com/donate/?hosted_button_id=DZFULJZTP3UQA)
@@ -29,7 +27,7 @@ _Thanks to everyone having starred my repo! To star it click on the image below,
## About ## About
FileBrowser Quantum is a modern, responsive, multi-source file manager with realtime indexing, advanced sharing, and expanded authentication options (password, proxy, OIDC, or no-auth). It is a major fork of the original Filebrowser project, designed for faster browsing and richer previews. FileBrowser Quantum is a modern, responsive, multi-source file manager with realtime indexing, advanced sharing, and expanded authentication options (password, proxy, OIDC, or no-auth). It is a maintained fork of the original FileBrowser project.
This addon is based on the [docker image](https://hub.docker.com/r/gtstef/filebrowser) from the FileBrowser Quantum project. This addon is based on the [docker image](https://hub.docker.com/r/gtstef/filebrowser) from the FileBrowser Quantum project.
@@ -61,6 +59,7 @@ The web UI can be found at `<your-ip>:8071` or through the Home Assistant sideba
| Option | Type | Default | Description | | Option | Type | Default | Description |
|--------|------|---------|-------------| |--------|------|---------|-------------|
| `auth_method` | list | `password` | Authentication method (`password`, `noauth`, `proxy`, `oidc`) | | `auth_method` | list | `password` | Authentication method (`password`, `noauth`, `proxy`, `oidc`) |
| `default_user_scope` | str | `/` | The root filesystem path used as the FileBrowser source and as the default scope for all users. Must be an existing absolute directory path (e.g. `/share`, `/media`). |
| `localdisks` | str | _(optional)_ | Local drives to mount (e.g., `sda1,sdb1,MYNAS`) | | `localdisks` | str | _(optional)_ | Local drives to mount (e.g., `sda1,sdb1,MYNAS`) |
| `networkdisks` | str | _(optional)_ | SMB shares to mount (e.g., `//SERVER/SHARE`) | | `networkdisks` | str | _(optional)_ | SMB shares to mount (e.g., `//SERVER/SHARE`) |
| `cifsusername` | str | _(optional)_ | SMB username for network shares | | `cifsusername` | str | _(optional)_ | SMB username for network shares |
@@ -89,7 +88,7 @@ This addon supports mounting both local drives and remote SMB shares:
This addon supports custom scripts and environment variables through the `addon_config` mapping: This addon supports custom scripts and environment variables through the `addon_config` mapping:
- **Custom scripts**: See [Running Custom Scripts in Addons](https://github.com/alexbelgium/hassio-addons/wiki/Running-custom-scripts-in-Addons) - **Custom scripts**: See [Running Custom Scripts in Addons](https://github.com/alexbelgium/hassio-addons/wiki/Running-custom-scripts-in-Addons)
- **env_vars option**: Use the add-on `env_vars` option to pass extra environment variables (uppercase or lowercase names). See https://github.com/alexbelgium/hassio-addons/wiki/Add-Environment-variables-to-your-Addon-2 for details. - **env_vars option**: Use the add-on `env_vars` option to pass extra environment variables (uppercase or lowercase names). See https://github.com/alexbelgium/hassio-addons/wiki/Add-Environment-variables-to-add-ons
## Support ## Support
@@ -99,4 +98,3 @@ Create an issue on GitHub, or ask on the [Home Assistant Community thread](https
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg [aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg [amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg [armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
+6 -2
View File
@@ -4,7 +4,7 @@ arch:
description: description:
FileBrowser Quantum provides a modern, responsive file manager with multi-source FileBrowser Quantum provides a modern, responsive file manager with multi-source
support, advanced authentication options, and realtime indexing for your Home support, advanced authentication options, and realtime indexing for your Home
Assistant files. Assistant files
devices: devices:
- /dev/dri - /dev/dri
- /dev/dri/card0 - /dev/dri/card0
@@ -73,6 +73,8 @@ devices:
- /dev/md3 - /dev/md3
environment: environment:
FB_BASEURL: /filebrowser_quantum FB_BASEURL: /filebrowser_quantum
FILEBROWSER_CONFIG: "/config/config.yaml"
FILEBROWSER_DATABASE: "/config/database.db"
PGID: "0" PGID: "0"
PUID: "0" PUID: "0"
image: ghcr.io/alexbelgium/filebrowser_quantum-{arch} image: ghcr.io/alexbelgium/filebrowser_quantum-{arch}
@@ -92,6 +94,7 @@ name: FileBrowser Quantum
options: options:
env_vars: [] env_vars: []
auth_method: noauth auth_method: noauth
default_user_scope: "/"
panel_admin: false panel_admin: false
panel_icon: mdi:file-search panel_icon: mdi:file-search
privileged: privileged:
@@ -102,6 +105,7 @@ schema:
- name: match(^[A-Za-z0-9_]+$) - name: match(^[A-Za-z0-9_]+$)
value: str? value: str?
auth_method: list(password|noauth|proxy|oidc) auth_method: list(password|noauth|proxy|oidc)
default_user_scope: str
cifsdomain: str? cifsdomain: str?
cifspassword: str? cifspassword: str?
cifsusername: str? cifsusername: str?
@@ -110,4 +114,4 @@ schema:
slug: filebrowser_quantum slug: filebrowser_quantum
udev: true udev: true
url: https://github.com/alexbelgium/hassio-addons url: https://github.com/alexbelgium/hassio-addons
version: "1.3.3" version: "1.3.3-8"
@@ -1,63 +0,0 @@
#!/usr/bin/with-contenv bashio
# shellcheck shell=bash
set -e
####################
# Migrate database #
####################
if [ -f /homeassistant/addons_config/filebrowser_quantum/filebrowser_quantum.db ]; then
echo "Moving database from legacy addons_config location to /config"
cp -rnf /homeassistant/addons_config/filebrowser_quantum/* /config/
rm -r /homeassistant/addons_config/filebrowser_quantum
fi
if [ ! -f /config/filebrowser_quantum.db ] && [ -d /addon_configs ]; then
shopt -s nullglob
for addon_config_dir in /addon_configs/*_filebrowser_quantum; do
if [ -f "$addon_config_dir/filebrowser_quantum.db" ]; then
echo "Moving database from addon_configs location to /config"
cp -rnf "$addon_config_dir"/. /config/
break
fi
done
shopt -u nullglob
fi
######################
# Link addon folders #
######################
# Clean symlinks
find /config -maxdepth 1 -type l -delete
if [ -d /homeassistant/addons_config ]; then
find /homeassistant/addons_config -maxdepth 1 -type l -delete
fi
# Remove erroneous folders
if [ -d /homeassistant ]; then
if [ -d /config/addons_config ]; then
rm -r /config/addons_config
fi
if [ -d /config/addon_configs ]; then
rm -r /config/addon_configs
fi
if [ -d /config/addons_autoscripts ]; then
rm -r /config/addons_autoscripts
fi
fi
# Create symlinks with legacy folders
addon_configs_symlink_dir=""
if [ -d /homeassistant/addons_config ]; then
ln -s /homeassistant/addons_config /config
addon_configs_symlink_dir="/config/addons_config"
elif [ -d /addon_configs ]; then
mkdir -p /config/addon_configs
addon_configs_symlink_dir="/config/addon_configs"
fi
if [ -n "$addon_configs_symlink_dir" ] && [ -d /addon_configs ]; then
find /addon_configs/ -maxdepth 1 -mindepth 1 -type d -not -name "*filebrowser_quantum*" -exec ln -s {} "$addon_configs_symlink_dir"/ \;
fi
if [ -d /homeassistant/addons_autoscripts ]; then
ln -s /homeassistant/addons_autoscripts /config
fi
@@ -65,163 +65,80 @@ mkdir -p /var/log/nginx && touch /var/log/nginx/error.log
# FILEBROWSER CONFIGURATION # # FILEBROWSER CONFIGURATION #
############################ ############################
CONFIG_PATH="/config/filebrowser_quantum.yaml"
mkdir -p /config /cache mkdir -p /config /cache
export FILEBROWSER_CONFIG="${CONFIG_PATH}" # Copy default config if not existing
if [ ! -f "$FILEBROWSER_CONFIG" ]; then
cp /home/filebrowser/data/config.yaml "$FILEBROWSER_CONFIG"
fi
python3 - <<'PY' bashio::log.info "Updating FileBrowser config..."
import json
import os
options_path = "/data/options.json" # --- Server (hardcoded values) ---
config_path = os.environ["FILEBROWSER_CONFIG"] bashio::log.info "... set server"
yq e -i ".server.port = 8080" "$FILEBROWSER_CONFIG"
yq e -i ".server.listen = \"0.0.0.0\"" "$FILEBROWSER_CONFIG"
yq e -i ".server.database = \"/config/database.db\"" "$FILEBROWSER_CONFIG"
yq e -i ".server.cacheDir = \"/cache\"" "$FILEBROWSER_CONFIG"
with open(options_path, "r", encoding="utf-8") as f: # --- Default user scope / source path ---
options = json.load(f) bashio::log.info "... set default user scope"
DEFAULT_USER_SCOPE=$(bashio::config 'default_user_scope' '/')
base_url = options.get("base_url") or os.environ.get("FB_BASEURL") or "/" # Validate: must start with /
if [[ "$DEFAULT_USER_SCOPE" != /* ]]; then
bashio::log.fatal "default_user_scope '${DEFAULT_USER_SCOPE}' is not a valid absolute path (must start with /). Stopping."
exit 1
fi
def bool_or_none(value): # Validate: path must exist
return value if isinstance(value, bool) else None if [ ! -d "$DEFAULT_USER_SCOPE" ]; then
bashio::log.fatal "default_user_scope '${DEFAULT_USER_SCOPE}' does not exist or is not a directory. Stopping."
exit 1
fi
sources = [] bashio::log.info "... set source path and defaultUserScope to ${DEFAULT_USER_SCOPE}"
for source in options.get("sources") or [{"path": "/", "name": "Root", "default_enabled": True}]: yq e -i ".server.sources[0].path = \"${DEFAULT_USER_SCOPE}\"" "$FILEBROWSER_CONFIG"
entry = {"path": source.get("path", "/")} yq e -i ".server.sources[0].name = \"Default\"" "$FILEBROWSER_CONFIG"
if source.get("name"): yq e -i ".server.sources[0].config.defaultUserScope = \"${DEFAULT_USER_SCOPE}\"" "$FILEBROWSER_CONFIG"
entry["name"] = source["name"]
source_config = {} # --- Base URL (from env or config) ---
config_mappings = { bashio::log.info "... set base URL to allow ingress"
"default_enabled": "defaultEnabled", BASE_URL=$(bashio::config 'base_url' "${FB_BASEURL:-/}")
"default_user_scope": "defaultUserScope", yq e -i ".server.baseURL = \"${BASE_URL}\"" "$FILEBROWSER_CONFIG"
"create_user_dir": "createUserDir",
"disable_indexing": "disableIndexing",
"deny_by_default": "denyByDefault",
"private": "private",
"indexing_interval_minutes": "indexingIntervalMinutes",
}
for option_key, config_key in config_mappings.items():
if option_key in source and source[option_key] not in (None, ""):
value = source[option_key]
if option_key == "indexing_interval_minutes" and not value:
continue
source_config[config_key] = value
conditionals = {} # --- Auth method ---
if "ignore_hidden" in source: AUTH_METHOD=$(bashio::config 'auth_method' 'password')
value = bool_or_none(source.get("ignore_hidden")) bashio::log.info "... authentication method set to $AUTH_METHOD"
if value is not None: case "$AUTH_METHOD" in
conditionals["ignoreHidden"] = value noauth)
if "ignore_zero_size_folders" in source: yq e -i ".auth.methods.noauth = true" "$FILEBROWSER_CONFIG"
value = bool_or_none(source.get("ignore_zero_size_folders")) yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
if value is not None: yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
conditionals["ignoreZeroSizeFolders"] = value yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
if conditionals: ;;
source_config["conditionals"] = conditionals password)
yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
if source_config: yq e -i ".auth.methods.password.enabled = true" "$FILEBROWSER_CONFIG"
entry["config"] = source_config yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
sources.append(entry) yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
;;
server = { proxy)
"port": 8080, yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
"listen": "0.0.0.0", yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
"baseURL": base_url, yq e -i ".auth.methods.proxy.enabled = true" "$FILEBROWSER_CONFIG"
"logging": [ yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
{ ;;
"levels": options.get("log_levels", "info|warning|error"), oidc)
} yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
], yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
"database": "/config/filebrowser_quantum.db", yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
"cacheDir": "/cache", yq e -i ".auth.methods.oidc.enabled = true" "$FILEBROWSER_CONFIG"
"cacheDirCleanup": options.get("cache_dir_cleanup", True), ;;
"disablePreviews": options.get("disable_previews", False), *)
"disablePreviewResize": options.get("disable_preview_resize", False), bashio::log.fatal "Unknown auth_method: $AUTH_METHOD"
"disableTypeDetectionByHeader": options.get("disable_type_detection_by_header", False), ;;
"disableUpdateCheck": options.get("disable_update_check", False), esac
"sources": sources,
}
if options.get("external_url"):
server["externalUrl"] = options["external_url"]
if options.get("internal_url"):
server["internalUrl"] = options["internal_url"]
if options.get("max_archive_size_gb"):
server["maxArchiveSize"] = options["max_archive_size_gb"]
certfile = os.environ.get("CERTFILE")
keyfile = os.environ.get("KEYFILE")
if certfile and keyfile:
server["tlsCert"] = certfile
server["tlsKey"] = keyfile
auth_method = options.get("auth_method", "password")
password_config = {
"enabled": auth_method == "password",
"minLength": options.get("password_min_length", 5),
"signup": options.get("password_signup", False),
"enforcedOtp": options.get("password_enforced_otp", False),
}
proxy_config = {
"enabled": auth_method == "proxy",
}
if options.get("proxy_auth_header"):
proxy_config["header"] = options["proxy_auth_header"]
proxy_config["createUser"] = options.get("proxy_auth_create_user", False)
if options.get("proxy_auth_logout_redirect_url"):
proxy_config["logoutRedirectUrl"] = options["proxy_auth_logout_redirect_url"]
oidc_config = {
"enabled": auth_method == "oidc",
}
if options.get("oidc_client_id"):
oidc_config["clientId"] = options["oidc_client_id"]
if options.get("oidc_client_secret"):
oidc_config["clientSecret"] = options["oidc_client_secret"]
if options.get("oidc_issuer_url"):
oidc_config["issuerUrl"] = options["oidc_issuer_url"]
if options.get("oidc_scopes"):
oidc_config["scopes"] = options["oidc_scopes"]
if options.get("oidc_user_identifier"):
oidc_config["userIdentifier"] = options["oidc_user_identifier"]
if options.get("oidc_admin_group"):
oidc_config["adminGroup"] = options["oidc_admin_group"]
if options.get("oidc_groups_claim"):
oidc_config["groupsClaim"] = options["oidc_groups_claim"]
if options.get("oidc_logout_redirect_url"):
oidc_config["logoutRedirectUrl"] = options["oidc_logout_redirect_url"]
oidc_config["createUser"] = options.get("oidc_create_user", False)
oidc_config["disableVerifyTLS"] = options.get("oidc_disable_verify_tls", False)
auth = {
"tokenExpirationHours": options.get("token_expiration_hours", 2),
"adminUsername": options.get("admin_username", "admin"),
"adminPassword": options.get("admin_password", "admin"),
"methods": {
"noauth": auth_method == "noauth",
"password": password_config,
"proxy": proxy_config,
"oidc": oidc_config,
},
}
frontend = {
"name": "FileBrowser Quantum",
}
config = {
"server": server,
"auth": auth,
"frontend": frontend,
}
with open(config_path, "w", encoding="utf-8") as f:
json.dump(config, f, indent=2)
f.write("\n")
PY
###################### ######################
# LAUNCH FILEBROWSER # # LAUNCH FILEBROWSER #
@@ -0,0 +1,8 @@
server {
listen 127.0.0.1:3001;
access_log off;
location /health {
return 200 'OK';
}
}