Compare commits

...

56 Commits

Author SHA1 Message Date
github-actions
64f93521ab GitHub bot: changelog [nobuild] 2026-06-04 11:58:21 +00:00
Alexandre
a5023e95e9 Merge pull request #2757 from alexbelgium/copilot/review-ente-addon-dockerfile
feat(ente): restore albums placeholder, fix nginx routing, add all web apps
2026-06-04 13:42:49 +02:00
copilot-swe-agent[bot]
5f83978aff feat: re-add share, embed, paste, locker, memories web apps with nginx and port mappings 2026-06-04 11:41:43 +00:00
copilot-swe-agent[bot]
c1efd293cf fix: restore albums placeholder, fix nginx port 3002, remove unused web apps 2026-06-04 11:36:21 +00:00
copilot-swe-agent[bot]
ea9f19ea80 Align Ente addon Dockerfile with upstream web Dockerfile
- Upgrade Node from 22 to 24
- Switch from Yarn to npm (npm ci / npm run build:*)
- Remove wasm-pack, corepack, python3, pkg-config
- Add all 10 upstream build targets (albums, share, embed, paste, locker, memories)
- Remove NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT env var
- Use upstream rustup flags
2026-06-04 11:24:53 +00:00
Alexandre
ffdf9fa239 Update entrypoint command in 99-run.sh 2026-06-04 11:20:48 +02:00
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
17 changed files with 163 additions and 256 deletions

View File

@@ -321,7 +321,7 @@ If you want to do add the repository manually, please follow the procedure highl
![aarch64][aarch64-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)
![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)

View File

@@ -1,3 +1,5 @@
## nightly-20260601-2 (03-06-2026)
- Minor bugs fixed
## nightly-20260601 (2026-06-01)
- Update to latest version from tphakala/birdnet-go (changelog : https://github.com/tphakala/birdnet-go/releases)
## nightly-20260524 (2026-05-30)

View File

@@ -126,4 +126,4 @@ slug: birdnet-go
udev: true
url: https://github.com/alexbelgium/hassio-addons/tree/master/birdnet-go
usb: true
version: "nightly-20260601"
version: "nightly-20260601-2"

View File

@@ -38,7 +38,7 @@ fi
bashio::log.info "Starting app..."
# shellcheck disable=SC2086
/usr/bin/entrypoint.sh birdnet-go realtime &
/usr/bin/entrypoint.sh /usr/bin/startup-wrapper.sh birdnet-go realtime &
true
# Wait for app to become available to start nginx

View File

@@ -1,3 +1,8 @@
## 4.4.22-2 (04-06-2026)
- Minor bugs fixed
## 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)
- Update to latest version from ente-io/ente (changelog : https://github.com/ente-io/ente/releases)

View File

@@ -6,7 +6,7 @@
########################################################
# 0) Build the ente-web static front-end (multi-stage) #
########################################################
FROM node:22-bookworm-slim AS web-builder
FROM node:24 AS web-builder
# Build-time selector; set `--build-arg ENTE_WEB_TAG=vX.Y.Z` if you want a specific release
ARG ENTE_WEB_TAG=main
@@ -15,7 +15,7 @@ ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Tools needed to build (git, rust, wasm-pack, yarn classic)
# Tools needed to build (git, rust for ente-wasm)
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
@@ -23,17 +23,10 @@ RUN set -eux; \
curl \
ca-certificates \
build-essential \
pkg-config \
python3 \
; \
rm -rf /var/lib/apt/lists/*; \
\
curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable; \
rustup target add wasm32-unknown-unknown; \
\
corepack enable; \
corepack prepare yarn@1.22.22 --activate; \
npm install -g wasm-pack@0.13.1
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --target wasm32-unknown-unknown
# Pull the web source
WORKDIR /src
@@ -41,16 +34,20 @@ RUN git clone --depth 1 --branch "${ENTE_WEB_TAG}" https://github.com/ente-io/en
# Build web workspace (lives in ./web)
WORKDIR /src/web
ENV NEXT_PUBLIC_ENTE_ENDPOINT=ENTE_API_ORIGIN_PLACEHOLDER \
NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=ENTE_ALBUMS_ORIGIN_PLACEHOLDER
ENV NEXT_PUBLIC_ENTE_ENDPOINT=ENTE_API_ORIGIN_PLACEHOLDER
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=ENTE_ALBUMS_ORIGIN_PLACEHOLDER
RUN set -eux; \
yarn config set network-timeout 900000 -g; \
yarn install --frozen-lockfile; \
yarn build:photos; \
yarn build:accounts; \
yarn build:auth; \
yarn build:cast
RUN npm ci
RUN npm run build:photos
RUN npm run build:albums
RUN npm run build:accounts
RUN npm run build:auth
RUN npm run build:cast
RUN npm run build:share
RUN npm run build:embed
RUN npm run build:paste
RUN npm run build:locker
RUN npm run build:memories
#################
# 1) Base image #
@@ -94,9 +91,15 @@ RUN apk add --no-cache nginx
# Static files built in the previous stage
COPY --from=web-builder /src/web/apps/photos/out /www/photos
COPY --from=web-builder /src/web/apps/albums/out /www/albums
COPY --from=web-builder /src/web/apps/accounts/out /www/accounts
COPY --from=web-builder /src/web/apps/auth/out /www/auth
COPY --from=web-builder /src/web/apps/cast/out /www/cast
COPY --from=web-builder /src/web/apps/share/out /www/share
COPY --from=web-builder /src/web/apps/embed/out /www/embed
COPY --from=web-builder /src/web/apps/paste/out /www/paste
COPY --from=web-builder /src/web/apps/locker/out /www/locker
COPY --from=web-builder /src/web/apps/memories/out /www/memories
############################
# 3) Install add-on helpers #
@@ -151,4 +154,4 @@ LABEL \
#################
# 6) Finish line
#################
EXPOSE 3000 3001 3002 3003 3004
EXPOSE 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/ente-io/server:latest",
"amd64": "ghcr.io/ente-io/server:latest"
"aarch64": "ghcr.io/ente-io/server:927c6a316f181c7901446311f0085593b346b336",
"amd64": "ghcr.io/ente-io/server:927c6a316f181c7901446311f0085593b346b336"
}
}

View File

@@ -87,10 +87,20 @@ options:
USE_EXTERNAL_DB: false
ports:
3000/tcp: 8300
3005/tcp: 8305
3006/tcp: 8306
3007/tcp: 8307
3008/tcp: 8308
3009/tcp: 8309
3200/tcp: 8320
8080/tcp: 8280
ports_description:
3000/tcp: Ente web UI
3005/tcp: Ente Share
3006/tcp: Ente Embed
3007/tcp: Ente Paste
3008/tcp: Ente Locker
3009/tcp: Ente Memories
3200/tcp: MinIO S3 endpoint
8080/tcp: Ente API (museum)
privileged:
@@ -120,6 +130,6 @@ schema:
slug: ente
udev: true
url: https://github.com/alexbelgium/hassio-addons
version: "4.4.22"
version: "4.4.22-2"
video: true
webui: http://[HOST]:[PORT:3000]

View File

@@ -225,7 +225,7 @@ start_web() {
# Set nginx
mv /etc/nginx/http.d/web.bak /etc/nginx/http.d/web.conf
bashio::log.info "Starting Ente web (nginx, ports 3000‑3004)..."
bashio::log.info "Starting Ente web (nginx, ports 3000‑3009)..."
exec nginx -g 'daemon off;' &
WEB_PID=$!
}

View File

@@ -1,20 +1,40 @@
server {
listen 3000; root /www/photos;
location / { try_files \$uri \$uri.html /index.html; }
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3001; root /www/accounts;
location / { try_files \$uri \$uri.html /index.html; }
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3002; root /www/photos;
location / { try_files \$uri \$uri.html /index.html; }
listen 3002; root /www/albums;
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3003; root /www/auth;
location / { try_files \$uri \$uri.html /index.html; }
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3004; root /www/cast;
location / { try_files \$uri \$uri.html /index.html; }
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3005; root /www/share;
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3006; root /www/embed;
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3007; root /www/paste;
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3008; root /www/locker;
location / { try_files $uri $uri.html /index.html =404; }
}
server {
listen 3009; root /www/memories;
location / { try_files $uri $uri.html /index.html =404; }
}

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)
- Update to latest version from gtsteffaniak/filebrowser (changelog : https://github.com/gtsteffaniak/filebrowser/releases)

View File

@@ -52,7 +52,7 @@ RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_auto
# Manual apps
ENV PACKAGES="bind-tools \
nginx \
python3"
python3 yq"
# Automatic apps & bashio
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
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" ]
WORKDIR /
@@ -114,27 +115,4 @@ LABEL \
# 6 Healthcheck #
#################
# Avoid spamming logs
# 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
# Upstream

View File

@@ -1,9 +1,7 @@
# 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
If this add-on saves you time or makes your setup easier, I would be very grateful for your support!
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!
[![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)
@@ -29,7 +27,7 @@ _Thanks to everyone having starred my repo! To star it click on the image below,
## 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.
@@ -61,6 +59,7 @@ The web UI can be found at `<your-ip>:8071` or through the Home Assistant sideba
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `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`) |
| `networkdisks` | str | _(optional)_ | SMB shares to mount (e.g., `//SERVER/SHARE`) |
| `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:
- **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
@@ -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
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg

View File

@@ -4,7 +4,7 @@ arch:
description:
FileBrowser Quantum provides a modern, responsive file manager with multi-source
support, advanced authentication options, and realtime indexing for your Home
Assistant files.
Assistant files
devices:
- /dev/dri
- /dev/dri/card0
@@ -73,6 +73,8 @@ devices:
- /dev/md3
environment:
FB_BASEURL: /filebrowser_quantum
FILEBROWSER_CONFIG: "/config/config.yaml"
FILEBROWSER_DATABASE: "/config/database.db"
PGID: "0"
PUID: "0"
image: ghcr.io/alexbelgium/filebrowser_quantum-{arch}
@@ -92,6 +94,7 @@ name: FileBrowser Quantum
options:
env_vars: []
auth_method: noauth
default_user_scope: "/"
panel_admin: false
panel_icon: mdi:file-search
privileged:
@@ -102,6 +105,7 @@ schema:
- name: match(^[A-Za-z0-9_]+$)
value: str?
auth_method: list(password|noauth|proxy|oidc)
default_user_scope: str
cifsdomain: str?
cifspassword: str?
cifsusername: str?
@@ -110,4 +114,4 @@ schema:
slug: filebrowser_quantum
udev: true
url: https://github.com/alexbelgium/hassio-addons
version: "1.3.3"
version: "1.3.3-8"

View File

@@ -1,42 +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 to new location /config"
cp -rnf /homeassistant/addons_config/filebrowser_quantum/* /config/
rm -r /homeassistant/addons_config/filebrowser_quantum
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/addons_autoscripts ]; then
rm -r /config/addons_autoscripts
fi
fi
# Create symlinks with legacy folders
if [ -d /homeassistant/addons_config ]; then
ln -s /homeassistant/addons_config /config
find /addon_configs/ -maxdepth 1 -mindepth 1 -type d -not -name "*filebrowser_quantum*" -exec ln -s {} /config/addons_config/ \;
fi
if [ -d /homeassistant/addons_autoscripts ]; then
ln -s /homeassistant/addons_autoscripts /config
fi

View File

@@ -65,163 +65,80 @@ mkdir -p /var/log/nginx && touch /var/log/nginx/error.log
# FILEBROWSER CONFIGURATION #
############################
CONFIG_PATH="/config/filebrowser_quantum.yaml"
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'
import json
import os
bashio::log.info "Updating FileBrowser config..."
options_path = "/data/options.json"
config_path = os.environ["FILEBROWSER_CONFIG"]
# --- Server (hardcoded values) ---
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:
options = json.load(f)
# --- Default user scope / source path ---
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):
return value if isinstance(value, bool) else None
# Validate: path must exist
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 = []
for source in options.get("sources") or [{"path": "/", "name": "Root", "default_enabled": True}]:
entry = {"path": source.get("path", "/")}
if source.get("name"):
entry["name"] = source["name"]
bashio::log.info "... set source path and defaultUserScope to ${DEFAULT_USER_SCOPE}"
yq e -i ".server.sources[0].path = \"${DEFAULT_USER_SCOPE}\"" "$FILEBROWSER_CONFIG"
yq e -i ".server.sources[0].name = \"Default\"" "$FILEBROWSER_CONFIG"
yq e -i ".server.sources[0].config.defaultUserScope = \"${DEFAULT_USER_SCOPE}\"" "$FILEBROWSER_CONFIG"
source_config = {}
config_mappings = {
"default_enabled": "defaultEnabled",
"default_user_scope": "defaultUserScope",
"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
# --- Base URL (from env or config) ---
bashio::log.info "... set base URL to allow ingress"
BASE_URL=$(bashio::config 'base_url' "${FB_BASEURL:-/}")
yq e -i ".server.baseURL = \"${BASE_URL}\"" "$FILEBROWSER_CONFIG"
conditionals = {}
if "ignore_hidden" in source:
value = bool_or_none(source.get("ignore_hidden"))
if value is not None:
conditionals["ignoreHidden"] = value
if "ignore_zero_size_folders" in source:
value = bool_or_none(source.get("ignore_zero_size_folders"))
if value is not None:
conditionals["ignoreZeroSizeFolders"] = value
if conditionals:
source_config["conditionals"] = conditionals
if source_config:
entry["config"] = source_config
sources.append(entry)
server = {
"port": 8080,
"listen": "0.0.0.0",
"baseURL": base_url,
"logging": [
{
"levels": options.get("log_levels", "info|warning|error"),
}
],
"database": "/config/filebrowser_quantum.db",
"cacheDir": "/cache",
"cacheDirCleanup": options.get("cache_dir_cleanup", True),
"disablePreviews": options.get("disable_previews", False),
"disablePreviewResize": options.get("disable_preview_resize", False),
"disableTypeDetectionByHeader": options.get("disable_type_detection_by_header", False),
"disableUpdateCheck": options.get("disable_update_check", False),
"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
# --- Auth method ---
AUTH_METHOD=$(bashio::config 'auth_method' 'password')
bashio::log.info "... authentication method set to $AUTH_METHOD"
case "$AUTH_METHOD" in
noauth)
yq e -i ".auth.methods.noauth = true" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
;;
password)
yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = true" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
;;
proxy)
yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = true" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
;;
oidc)
yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = true" "$FILEBROWSER_CONFIG"
;;
*)
bashio::log.fatal "Unknown auth_method: $AUTH_METHOD"
;;
esac
######################
# LAUNCH FILEBROWSER #

View File

@@ -0,0 +1,8 @@
server {
listen 127.0.0.1:3001;
access_log off;
location /health {
return 200 'OK';
}
}