From cf81ef4b4c6c513c4ed2a9ac69a0ff8e1f6d114d Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Fri, 9 Jan 2026 15:06:13 +1100 Subject: [PATCH 1/2] DOCS: BACKEND_API_URL reverse proxies Signed-off-by: jokob-sk --- docs/REVERSE_PROXY.md | 10 ++++++++-- docs/img/REVERSE_PROXY/BACKEND_API_URL.png | Bin 0 -> 18634 bytes .../REVERSE_PROXY/nginx_proxy_manager_npm.png | Bin 0 -> 42634 bytes 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/img/REVERSE_PROXY/BACKEND_API_URL.png create mode 100644 docs/img/REVERSE_PROXY/nginx_proxy_manager_npm.png diff --git a/docs/REVERSE_PROXY.md b/docs/REVERSE_PROXY.md index ee12c11d..77ef1934 100755 --- a/docs/REVERSE_PROXY.md +++ b/docs/REVERSE_PROXY.md @@ -1,5 +1,13 @@ # Reverse Proxy Configuration +> [!TIP] +> You will need to specify the `BACKEND_API_URL` setting if you are running reverse proxies. This is the URL that points to the backend server url (including your `GRAPHQL_PORT`) +> +> ![BACKEND_API_URL setting](./img/REVERSE_PROXY/BACKEND_API_URL.png) +> ![NPM set up](./img/REVERSE_PROXY/nginx_proxy_manager_npm.png) + +## NGINX HTTP Configuration (Direct Path) + > Submitted by amazing [cvc90](https://github.com/cvc90) 🙏 > [!NOTE] @@ -10,8 +18,6 @@
-## NGINX HTTP Configuration (Direct Path) - 1. On your NGINX server, create a new file called /etc/nginx/sites-available/netalertx 2. In this file, paste the following code: diff --git a/docs/img/REVERSE_PROXY/BACKEND_API_URL.png b/docs/img/REVERSE_PROXY/BACKEND_API_URL.png new file mode 100644 index 0000000000000000000000000000000000000000..951a83cc4f9066a9f8962ea4540a716c44f3147e GIT binary patch literal 18634 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 literal 0 HcmV?d00001 diff --git a/docs/img/REVERSE_PROXY/nginx_proxy_manager_npm.png b/docs/img/REVERSE_PROXY/nginx_proxy_manager_npm.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5d1bfce2733e70b90719942a15b4253acf1c83 GIT binary patch literal 42634 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 Date: Sat, 10 Jan 2026 08:46:16 +1100 Subject: [PATCH 2/2] FE: refactor apiBase Signed-off-by: jokob-sk --- docs/DEBUG_INVALID_JSON.md | 1 - front/deviceDetails.php | 4 +- front/deviceDetailsEdit.php | 10 ++--- front/deviceDetailsEvents.php | 4 +- front/deviceDetailsPresence.php | 4 +- front/deviceDetailsSessions.php | 4 +- front/deviceDetailsTools.php | 38 +++++----------- front/php/server/devices.php | 36 --------------- front/plugins/_publisher_mqtt/mqtt.py | 2 +- front/presence.php | 65 ++++++++++++++++++++------- 10 files changed, 76 insertions(+), 92 deletions(-) diff --git a/docs/DEBUG_INVALID_JSON.md b/docs/DEBUG_INVALID_JSON.md index 00b82b0b..c6ef3ad2 100755 --- a/docs/DEBUG_INVALID_JSON.md +++ b/docs/DEBUG_INVALID_JSON.md @@ -9,7 +9,6 @@ Check the the HTTP response of the failing backend call by following these steps - Copy the URL causing the error and enter it in the address bar of your browser directly and hit enter. The copied URLs could look something like this (notice the query strings at the end): - `http://:20211/api/table_devices.json?nocache=1704141103121` - - `http://:20211/php/server/devices.php?action=getDevicesTotals` - Post the error response in the existing issue thread on GitHub or create a new issue and include the redacted response of the failing query. diff --git a/front/deviceDetails.php b/front/deviceDetails.php index 36a77b85..7c9f3e2d 100755 --- a/front/deviceDetails.php +++ b/front/deviceDetails.php @@ -418,8 +418,8 @@ async function renderSmallBoxes() { // Get data from the server const apiToken = getSetting("API_TOKEN"); - const apiBase = getApiBase(); - const url = `${apiBase}/device/${getMac()}?period=${encodeURIComponent(period)}`; + const apiBaseUrl = getApiBase(); + const url = `${apiBaseUrl}/device/${getMac()}?period=${encodeURIComponent(period)}`; const response = await fetch(url, { method: "GET", diff --git a/front/deviceDetailsEdit.php b/front/deviceDetailsEdit.php index cd654b4e..caade6da 100755 --- a/front/deviceDetailsEdit.php +++ b/front/deviceDetailsEdit.php @@ -46,8 +46,8 @@ function getDeviceData() { const apiToken = getSetting("API_TOKEN"); let period = $("#period").val() - const apiBase = getApiBase(); - const url = `${apiBase}/device/${mac}?period=${encodeURIComponent(period)}`; + const apiBaseUrl = getApiBase(); + const url = `${apiBaseUrl}/device/${mac}?period=${encodeURIComponent(period)}`; // get data from server $.ajax({ @@ -89,7 +89,7 @@ function getDeviceData() { ] }; - const graphQlUrl = `${apiBase}/graphql`; + const graphQlUrl = `${apiBaseUrl}/graphql`; $.ajax({ url: graphQlUrl, @@ -354,7 +354,7 @@ function setDeviceData(direction = '', refreshCallback = '') { showSpinner(); const apiToken = getSetting("API_TOKEN"); // dynamic token - const apiBase = getApiBase(); + const apiBaseUrl = getApiBase(); mac = $('#NEWDEV_devMac').val(); @@ -402,7 +402,7 @@ function setDeviceData(direction = '', refreshCallback = '') { $.ajax({ - url: `${apiBase}/device/${encodeURIComponent(mac)}`, + url: `${apiBaseUrl}/device/${encodeURIComponent(mac)}`, type: "POST", headers: { "Authorization": "Bearer " + apiToken, diff --git a/front/deviceDetailsEvents.php b/front/deviceDetailsEvents.php index 69a6d96d..b11e4b52 100755 --- a/front/deviceDetailsEvents.php +++ b/front/deviceDetailsEvents.php @@ -50,8 +50,8 @@ function loadEventsData() { const apiToken = getSetting("API_TOKEN"); - const apiBase = getApiBase(); - const url = `${apiBase}/dbquery/read`; + const apiBaseUrl = getApiBase(); + const url = `${apiBaseUrl}/dbquery/read`; $.ajax({ url: url, diff --git a/front/deviceDetailsPresence.php b/front/deviceDetailsPresence.php index e8bdbae7..7c4833f2 100755 --- a/front/deviceDetailsPresence.php +++ b/front/deviceDetailsPresence.php @@ -38,8 +38,8 @@ function loadPresenceData() { const apiToken = getSetting("API_TOKEN"); - const apiBase = getApiBase(); - const url = `${apiBase}/sessions/calendar`; + const apiBaseUrl = getApiBase(); + const url = `${apiBaseUrl}/sessions/calendar`; $('#calendar').fullCalendar('removeEventSources'); diff --git a/front/deviceDetailsSessions.php b/front/deviceDetailsSessions.php index ddb5806c..ed9a0487 100755 --- a/front/deviceDetailsSessions.php +++ b/front/deviceDetailsSessions.php @@ -105,8 +105,8 @@ function loadSessionsData() { // Build API base const apiToken = getSetting("API_TOKEN"); - const apiBase = getApiBase(); - const url = `${apiBase}/sessions/${getMac()}?period=${encodeURIComponent(period)}`; + const apiBaseUrl = getApiBase(); + const url = `${apiBaseUrl}/sessions/${getMac()}?period=${encodeURIComponent(period)}`; // Call API with Authorization header $.ajax({ diff --git a/front/deviceDetailsTools.php b/front/deviceDetailsTools.php index 469a645a..0c0756ac 100755 --- a/front/deviceDetailsTools.php +++ b/front/deviceDetailsTools.php @@ -211,22 +211,16 @@