mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-06-19 22:09:14 +02:00
Compare commits
4 Commits
c60a8f90be
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f622ff9925 | ||
|
|
8631d9213c | ||
|
|
9c4b381b8e | ||
|
|
464c7362d8 |
@@ -7,7 +7,6 @@ server {
|
||||
gzip_static off;
|
||||
client_max_body_size 0;
|
||||
|
||||
# Based on https://docs.maintainerr.info/ReverseProxy/#nginx-subdomain
|
||||
location / {
|
||||
set $app '%%ingress_entry%%';
|
||||
|
||||
@@ -23,7 +22,6 @@ server {
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Accept-Encoding "";
|
||||
proxy_read_timeout 90;
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header 'Referrer-Policy' 'no-referrer';
|
||||
@@ -31,31 +29,5 @@ server {
|
||||
# Redirect location headers
|
||||
absolute_redirect off;
|
||||
proxy_redirect / $app/;
|
||||
|
||||
# Sub filters to rewrite URLs in responses
|
||||
sub_filter_once off;
|
||||
sub_filter_types *;
|
||||
|
||||
# HTML attribute rewrites
|
||||
sub_filter 'href="/"' 'href="%%ingress_entry%%/"';
|
||||
sub_filter 'src="/' 'src="%%ingress_entry%%/';
|
||||
sub_filter 'action="/' 'action="%%ingress_entry%%/';
|
||||
|
||||
# API path rewrites
|
||||
sub_filter '"/api' '"%%ingress_entry%%/api';
|
||||
sub_filter '`/api' '`%%ingress_entry%%/api';
|
||||
sub_filter "'/api" "'%%ingress_entry%%/api";
|
||||
|
||||
# Vite asset rewrites
|
||||
sub_filter '"/assets' '"%%ingress_entry%%/assets';
|
||||
sub_filter '`/assets' '`%%ingress_entry%%/assets';
|
||||
sub_filter "'/assets" "'%%ingress_entry%%/assets";
|
||||
|
||||
# Favicon and static files
|
||||
sub_filter '"/favicon' '"%%ingress_entry%%/favicon';
|
||||
sub_filter '"/logo' '"%%ingress_entry%%/logo';
|
||||
|
||||
# Root path references in JavaScript
|
||||
sub_filter '"\/"' '"%%ingress_entry%%\/"';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,13 +7,28 @@ set -e
|
||||
# Runs cont-init.d scripts then drops privileges and starts the app.
|
||||
###############################################################################
|
||||
|
||||
# ─── Source bashio library so init scripts can use bashio:: functions ─────────
|
||||
_bashio_loaded=false
|
||||
for _f in /usr/lib/bashio/bashio /usr/lib/bashio/bashio.sh; do
|
||||
if [ -f "$_f" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$_f"
|
||||
_bashio_loaded=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ "$_bashio_loaded" = false ]; then
|
||||
echo "[Maintainerr] WARNING: bashio library not found; init scripts using bashio functions will fail"
|
||||
fi
|
||||
|
||||
# ─── Run cont-init.d scripts ─────────────────────────────────────────────────
|
||||
if [ -d /etc/cont-init.d ]; then
|
||||
for script in /etc/cont-init.d/*.sh; do
|
||||
[ -f "$script" ] || continue
|
||||
sed -i '1s|.*|#!/usr/bin/env bashio|' "$script"
|
||||
echo "[Maintainerr] Running init script: $script"
|
||||
bashio "$script"
|
||||
# Run in subshell to isolate side effects; bashio functions are inherited
|
||||
# shellcheck disable=SC1090
|
||||
( source "$script" )
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -50,6 +65,27 @@ if [ ! -f "$DATA_DIR/.initialized" ]; then
|
||||
fi
|
||||
export DATA_DIR
|
||||
|
||||
# ─── Inject ingress base path into the built UI files ─────────────────────────
|
||||
# The upstream Maintainerr Vite build embeds /__PATH_PREFIX__ as a placeholder
|
||||
# for the base URL. The upstream start.sh replaces it with $BASE_PATH at runtime.
|
||||
# For HA ingress, the base path is the dynamic ingress entry (e.g.
|
||||
# /api/hassio_ingress/<token>). We perform the replacement here so the React
|
||||
# Router basename and all asset/API URLs point through the ingress path.
|
||||
# We intentionally do NOT export BASE_PATH so that the NestJS server keeps its
|
||||
# routes at the root — nginx's rewrite rule strips the ingress prefix on the
|
||||
# server side.
|
||||
ingress_entry="$(bashio::addon.ingress_entry 2>/dev/null || true)"
|
||||
if [ -n "$ingress_entry" ]; then
|
||||
UI_DIST_DIR="/opt/app/apps/server/dist/ui"
|
||||
if [ -d "$UI_DIST_DIR" ]; then
|
||||
echo "[Maintainerr] Setting ingress base path: $ingress_entry"
|
||||
# Only process text-based web files (skip binary assets like images/fonts)
|
||||
find "$UI_DIST_DIR" -type f \( -name '*.js' -o -name '*.mjs' -o -name '*.html' -o -name '*.css' -o -name '*.json' -o -name '*.map' \) \
|
||||
-not -path '*/node_modules/*' \
|
||||
-print0 | xargs -0 sed -i "s,/__PATH_PREFIX__,${ingress_entry},g" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# ─── Start Maintainerr as unprivileged node user ─────────────────────────────
|
||||
echo "[Maintainerr] Starting application on port ${UI_PORT:-6246}..."
|
||||
exec gosu node /opt/app/start.sh &
|
||||
|
||||
Reference in New Issue
Block a user