Compare 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 277 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"
+1 -1
View File
@@ -38,7 +38,7 @@ fi
bashio::log.info "Starting app..." bashio::log.info "Starting app..."
# shellcheck disable=SC2086 # shellcheck disable=SC2086
/usr/bin/entrypoint.sh birdnet-go realtime & /usr/bin/entrypoint.sh /usr/bin/startup-wrapper.sh birdnet-go realtime &
true true
# Wait for app to become available to start nginx # Wait for app to become available to start nginx
+5
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) ## 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)
+23 -20
View File
@@ -6,7 +6,7 @@
######################################################## ########################################################
# 0) Build the ente-web static front-end (multi-stage) # # 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 # Build-time selector; set `--build-arg ENTE_WEB_TAG=vX.Y.Z` if you want a specific release
ARG ENTE_WEB_TAG=main ARG ENTE_WEB_TAG=main
@@ -15,7 +15,7 @@ ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \ CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 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; \ RUN set -eux; \
apt-get update; \ apt-get update; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
@@ -23,17 +23,10 @@ RUN set -eux; \
curl \ curl \
ca-certificates \ ca-certificates \
build-essential \ build-essential \
pkg-config \
python3 \
; \ ; \
rm -rf /var/lib/apt/lists/*; \ rm -rf /var/lib/apt/lists/*; \
\ \
curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable; \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --target wasm32-unknown-unknown
rustup target add wasm32-unknown-unknown; \
\
corepack enable; \
corepack prepare yarn@1.22.22 --activate; \
npm install -g wasm-pack@0.13.1
# Pull the web source # Pull the web source
WORKDIR /src 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) # Build web workspace (lives in ./web)
WORKDIR /src/web WORKDIR /src/web
ENV NEXT_PUBLIC_ENTE_ENDPOINT=ENTE_API_ORIGIN_PLACEHOLDER \ ENV NEXT_PUBLIC_ENTE_ENDPOINT=ENTE_API_ORIGIN_PLACEHOLDER
NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=ENTE_ALBUMS_ORIGIN_PLACEHOLDER ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=ENTE_ALBUMS_ORIGIN_PLACEHOLDER
RUN set -eux; \ RUN npm ci
yarn config set network-timeout 900000 -g; \ RUN npm run build:photos
yarn install --frozen-lockfile; \ RUN npm run build:albums
yarn build:photos; \ RUN npm run build:accounts
yarn build:accounts; \ RUN npm run build:auth
yarn build:auth; \ RUN npm run build:cast
yarn 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 # # 1) Base image #
@@ -94,9 +91,15 @@ RUN apk add --no-cache nginx
# Static files built in the previous stage # 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/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/accounts/out /www/accounts
COPY --from=web-builder /src/web/apps/auth/out /www/auth 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/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 # # 3) Install add-on helpers #
@@ -151,4 +154,4 @@ LABEL \
################# #################
# 6) Finish line # 6) Finish line
################# #################
EXPOSE 3000 3001 3002 3003 3004 EXPOSE 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009
+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"
} }
} }
+11 -1
View File
@@ -87,10 +87,20 @@ options:
USE_EXTERNAL_DB: false USE_EXTERNAL_DB: false
ports: ports:
3000/tcp: 8300 3000/tcp: 8300
3005/tcp: 8305
3006/tcp: 8306
3007/tcp: 8307
3008/tcp: 8308
3009/tcp: 8309
3200/tcp: 8320 3200/tcp: 8320
8080/tcp: 8280 8080/tcp: 8280
ports_description: ports_description:
3000/tcp: Ente web UI 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 3200/tcp: MinIO S3 endpoint
8080/tcp: Ente API (museum) 8080/tcp: Ente API (museum)
privileged: privileged:
@@ -120,6 +130,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]
+1 -1
View File
@@ -225,7 +225,7 @@ start_web() {
# Set nginx # Set nginx
mv /etc/nginx/http.d/web.bak /etc/nginx/http.d/web.conf 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;' & exec nginx -g 'daemon off;' &
WEB_PID=$! WEB_PID=$!
} }
+26 -6
View File
@@ -1,20 +1,40 @@
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/albums;
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; }
}
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; }
} }
+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';
}
}