2 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
5df9eb8588 Add Ingress support to Bazarr NAS addon
- Add ingress: true, ingress_entry, panel_icon, panel_admin to config.yaml
- Add connection_mode option (ingress_noauth/noingress_auth/ingress_auth)
- Add nginx package and 90-disable_ingress.sh module to Dockerfile
- Add nginx reverse proxy configuration (matching Sonarr/Radarr pattern)
- Add 32-nginx_ingress.sh init script for Bazarr YAML config handling
- Add nginx S6 service (run/finish) with base_url validation

Agent-Logs-Url: https://github.com/alexbelgium/hassio-addons/sessions/621436fb-7e38-4572-8231-55b067f62d83

Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
2026-04-18 12:53:47 +00:00
copilot-swe-agent[bot]
69f1e74476 Initial plan 2026-04-18 12:46:25 +00:00
15 changed files with 314 additions and 13 deletions

View File

@@ -170,7 +170,6 @@ Davespire,
DavidBabel,France
DavidBrockmeier,United States
DawnDevelop,
Dbankhansen,
DeHandigeGasten,Netherlands
DeRossoMarco,
Deanwhu7,
@@ -598,7 +597,6 @@ Rosscoer,
RosutoHane,
Roth-Development,
RouNNdeL,Poland
RougeComputer,
RubenKelevra,Germany
Rudi-Schmudi,
RudyDevroey,
@@ -707,7 +705,6 @@ Thullalong69,Germany
Tifeko,
TiiMMY2CHAiiNZ,
TimInTech,Germany
Timbo74,
Tohtli,
Tokahiro,Germany
TomCasavant,
@@ -757,7 +754,6 @@ X1pheR,Netherlands
Xandistra,
Xfox0ne,Austria
XneddyX,
XxCabbyoO,
Yax,Poland
YoYoost,
YoshiiPlayzz,Germany
@@ -852,7 +848,7 @@ anggiaj,Indonesia
angristan,France
anipad,
ankushg,United States
antchagas,Portugal
antchagas,
anthurta,
antiops,
antoan12345,
@@ -929,7 +925,6 @@ bes-r,Netherlands
bestnub,Germany
beyercenter,
bezigebever,
bggsolar,Germany
bgwolfe78,United States
bhxfcna170JenniferLee,
biazzotto,Brazil
@@ -1042,7 +1037,6 @@ chrisgrou,
chrisguen,
chrisnicho00,
chrispenick,
chrisphu,
christarczon,
christianklauss,Germany
christoph00,
@@ -1444,7 +1438,6 @@ iWangJiaxiang,China
iXanderz,
iYUYUE,
iainp999,United Kingdom
iamjairo,Netherlands
iamwdf,
ian-peng,
ianbecker,
@@ -1968,7 +1961,6 @@ parasav,
parttimeentrepreneur,
passionsfrucht,
paszczaq,Poland
patloh,Switzerland
patpadgett,United States
patrickcarmichael,United States
patricklucescu,
@@ -2065,7 +2057,6 @@ quirbiefe,
qun-media,
r0rqual,United States
rJUUSO,
ralong777,
ranjitrajkumar,Canada
raphael1688,
rapjul,
@@ -2480,7 +2471,6 @@ yingfengstar,
yngveskog,
yo8aiv,United States
yogitea,
yoheines,
yonis37,
yoshimo,
yoswa,Netherlands
1 username country
170 DavidBabel France
171 DavidBrockmeier United States
172 DawnDevelop
Dbankhansen
173 DeHandigeGasten Netherlands
174 DeRossoMarco
175 Deanwhu7
597 RosutoHane
598 Roth-Development
599 RouNNdeL Poland
RougeComputer
600 RubenKelevra Germany
601 Rudi-Schmudi
602 RudyDevroey
705 Tifeko
706 TiiMMY2CHAiiNZ
707 TimInTech Germany
Timbo74
708 Tohtli
709 Tokahiro Germany
710 TomCasavant
754 Xandistra
755 Xfox0ne Austria
756 XneddyX
XxCabbyoO
757 Yax Poland
758 YoYoost
759 YoshiiPlayzz Germany
848 angristan France
849 anipad
850 ankushg United States
851 antchagas Portugal
852 anthurta
853 antiops
854 antoan12345
925 bestnub Germany
926 beyercenter
927 bezigebever
bggsolar Germany
928 bgwolfe78 United States
929 bhxfcna170JenniferLee
930 biazzotto Brazil
1037 chrisguen
1038 chrisnicho00
1039 chrispenick
chrisphu
1040 christarczon
1041 christianklauss Germany
1042 christoph00
1438 iXanderz
1439 iYUYUE
1440 iainp999 United Kingdom
iamjairo Netherlands
1441 iamwdf
1442 ian-peng
1443 ianbecker
1961 parttimeentrepreneur
1962 passionsfrucht
1963 paszczaq Poland
patloh Switzerland
1964 patpadgett United States
1965 patrickcarmichael United States
1966 patricklucescu
2057 qun-media
2058 r0rqual United States
2059 rJUUSO
ralong777
2060 ranjitrajkumar Canada
2061 raphael1688
2062 rapjul
2471 yngveskog
2472 yo8aiv United States
2473 yogitea
yoheines
2474 yonis37
2475 yoshimo
2476 yoswa Netherlands

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -47,14 +47,14 @@ RUN if [ ! -f /bin/sh ] && [ -f /usr/bin/sh ]; then ln -s /usr/bin/sh /bin/sh; f
if [ ! -f /bin/bash ] && [ -f /usr/bin/bash ]; then ln -s /usr/bin/bash /bin/bash; fi
# Modules
ARG MODULES="00-banner.sh 01-custom_script.sh 00-local_mounts.sh 00-smb_mounts.sh"
ARG MODULES="00-banner.sh 01-custom_script.sh 90-disable_ingress.sh 00-local_mounts.sh 00-smb_mounts.sh"
# Automatic modules download
COPY ha_automodules.sh /ha_automodules.sh
RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_automodules.sh
# Manual apps
ENV PACKAGES=""
ENV PACKAGES="nginx"
# Automatic apps & bashio
COPY ha_autoapps.sh /ha_autoapps.sh

View File

@@ -72,6 +72,8 @@ environment:
PGID: "0"
PUID: "0"
image: ghcr.io/alexbelgium/bazarr-{arch}
ingress: true
ingress_entry: bazarr
init: false
map:
- addon_config:rw
@@ -84,6 +86,9 @@ options:
env_vars: []
PGID: 0
PUID: 0
connection_mode: ingress_noauth
panel_admin: false
panel_icon: mdi:subtitles-outline
ports:
6767/tcp: 6767
ports_description:
@@ -101,6 +106,7 @@ schema:
cifsdomain: str?
cifspassword: str?
cifsusername: str?
connection_mode: list(ingress_noauth|noingress_auth|ingress_auth)
localdisks: str?
networkdisks: str?
slug: bazarr_nas

View File

@@ -0,0 +1,57 @@
#!/usr/bin/with-contenv bashio
# shellcheck shell=bash
set -e
#################
# NGINX SETTING #
#################
declare ingress_interface
declare ingress_port
ingress_port=$(bashio::addon.ingress_port)
ingress_interface=$(bashio::addon.ip_address)
ingress_entry=$(bashio::addon.ingress_entry)
sed -i "s/%%port%%/${ingress_port}/g" /etc/nginx/servers/ingress.conf
sed -i "s/%%interface%%/${ingress_interface}/g" /etc/nginx/servers/ingress.conf
sed -i "s|%%ingress_entry%%|${ingress_entry}|g" /etc/nginx/servers/ingress.conf
##################
# CONFIG SETTING #
##################
# Values
slug=bazarr
CONFIG_LOCATION=/config/config/config.yaml
if [ -f "$CONFIG_LOCATION" ]; then
# Define addon mode
connection_mode="$(bashio::config "connection_mode")"
bashio::log.green "---------------------------"
bashio::log.green "Connection_mode is $connection_mode"
bashio::log.green "---------------------------"
case "$connection_mode" in
# Ingress mode, authentication is disabled
ingress_noauth)
bashio::log.green "Ingress is enabled, authentication is disabled"
bashio::log.yellow "WARNING : Make sure that the port is not exposed externally by your router to avoid a security risk !"
# Set base_url
sed -i "s/ base_url:.*/ base_url: $slug/" "$CONFIG_LOCATION"
# Disable auth
sed -i '/^auth:/,/^[^ ]/{ s/ type:.*/ type: null/ }' "$CONFIG_LOCATION"
;;
# Ingress mode, with authentication
ingress_auth)
bashio::log.green "Ingress is enabled, and external authentication is enabled"
# Set base_url
sed -i "s/ base_url:.*/ base_url: $slug/" "$CONFIG_LOCATION"
;;
# No ingress mode, with authentication
noingress_auth)
bashio::log.green "Disabling ingress and enabling authentication"
bashio::log.yellow "WARNING : Ingress is disabled so the app won't be available from HA itself !"
sed -i "s/ base_url:.*/ base_url: ''/" "$CONFIG_LOCATION"
;;
esac
fi

View File

@@ -0,0 +1,96 @@
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}

View File

@@ -0,0 +1,16 @@
proxy_http_version 1.1;
proxy_ignore_client_abort off;
proxy_read_timeout 86400s;
proxy_redirect off;
proxy_send_timeout 86400s;
proxy_max_temp_file_size 0;
proxy_hide_header X-Frame-Options;
proxy_set_header Accept-Encoding "";
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;

View File

@@ -0,0 +1 @@
resolver 127.0.0.11 ipv6=off;

View File

@@ -0,0 +1,5 @@
server_name $hostname;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;

View File

@@ -0,0 +1,9 @@
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

View File

@@ -0,0 +1,3 @@
upstream backend {
server 127.0.0.1:8080;
}

View File

@@ -0,0 +1,57 @@
# Run nginx in foreground.
daemon off;
# This is run inside Docker.
user root;
# Pid storage location.
pid /var/run/nginx.pid;
# Set number of worker processes.
worker_processes 1;
# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;
# Write error log to Hass.io add-on log.
error_log /proc/1/fd/1 error;
# Load allowed environment vars
env HASSIO_TOKEN;
# Load dynamic modules.
include /etc/nginx/modules/*.conf;
# Max num of simultaneous connections by a worker process.
events {
worker_connections 512;
}
http {
include /etc/nginx/includes/mime.types;
log_format hassio '[$time_local] $status '
'$http_x_forwarded_for($remote_addr) '
'$request ($http_user_agent)';
access_log /proc/1/fd/1 hassio;
client_max_body_size 4G;
default_type application/octet-stream;
gzip on;
keepalive_timeout 65;
sendfile on;
server_tokens off;
tcp_nodelay on;
tcp_nopush on;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
include /etc/nginx/includes/resolver.conf;
include /etc/nginx/includes/upstream.conf;
include /etc/nginx/servers/*.conf;
}

View File

@@ -0,0 +1,29 @@
server {
listen %%interface%%:%%port%% default_server;
#include /etc/nginx/includes/server_params.conf;
#include /etc/nginx/includes/proxy_params.conf;
client_max_body_size 0;
location / {
add_header Access-Control-Allow-Origin *;
proxy_connect_timeout 30m;
proxy_send_timeout 30m;
proxy_read_timeout 30m;
proxy_pass http://127.0.0.1:6767;
# Allow websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
#auth_basic off;
# Correct base_url
proxy_set_header Accept-Encoding "";
sub_filter_once off;
sub_filter_types *;
sub_filter /bazarr %%ingress_entry%%/bazarr;
}
}

View File

@@ -0,0 +1,8 @@
#!/usr/bin/execlineb -S0
# ==============================================================================
# Take down the S6 supervision tree when Nginx fails
# ==============================================================================
if { s6-test ${1} -ne 0 }
if { s6-test ${1} -ne 256 }
s6-svscanctl -t /var/run/s6/services

View File

@@ -0,0 +1,24 @@
#!/usr/bin/with-contenv bashio
# shellcheck shell=bash
set -e
# ==============================================================================
# Set variables
slug=bazarr
port=6767
CONFIG_LOCATION=/config/config/config.yaml
# Wait for bazarr to become available
bashio::net.wait_for "$port" localhost 900
# Set base_url
if [ -f "$CONFIG_LOCATION" ]; then
if ! grep -q "base_url.*$slug" "$CONFIG_LOCATION" && ! bashio::config.true "ingress_disabled"; then
bashio::log.warning "BaseUrl not set properly, restarting"
sed -i "s/ base_url:.*/ base_url: $slug/" "$CONFIG_LOCATION"
bashio::addon.restart
fi
fi
bashio::log.info "Starting NGinx..."
exec nginx