fix: correct port mappings for all container iframes/tabs
Nginx (HTTP+HTTPS): OnlyOffice 9980→8044, Fedimint 8175→8174, NPM 81→8181, Tailscale removed (no web UI). Frontend: corrected APP_PORTS, added HTTPS_PROXY_PATHS for portainer/ npm/uptime-kuma/homeassistant/vaultwarden/photoprism/fedimintd. Added portainer/onlyoffice/npm to NEW_TAB_APPS (X-Frame-Options). Backend: PodmanClient + docker_packages port corrections. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -327,7 +327,7 @@ server {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/onlyoffice/ {
|
location /app/onlyoffice/ {
|
||||||
proxy_pass http://127.0.0.1:9980/;
|
proxy_pass http://127.0.0.1:8044/;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -444,7 +444,7 @@ server {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/fedimint/ {
|
location /app/fedimint/ {
|
||||||
proxy_pass http://127.0.0.1:8175/;
|
proxy_pass http://127.0.0.1:8174/;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -478,7 +478,9 @@ server {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/tailscale/ {
|
location /app/tailscale/ {
|
||||||
proxy_pass http://127.0.0.1:8240/;
|
# Tailscale has no web UI — managed via CLI/Tailscale app
|
||||||
|
# proxy_pass placeholder for future Tailscale admin UI
|
||||||
|
return 503;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -553,7 +555,7 @@ server {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/nginx-proxy-manager/ {
|
location /app/nginx-proxy-manager/ {
|
||||||
proxy_pass http://127.0.0.1:81/;
|
proxy_pass http://127.0.0.1:8181/;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ location /app/lnd/ {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/onlyoffice/ {
|
location /app/onlyoffice/ {
|
||||||
proxy_pass http://127.0.0.1:9980/;
|
proxy_pass http://127.0.0.1:8044/;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -161,7 +161,7 @@ location /app/mempool/ {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/fedimint/ {
|
location /app/fedimint/ {
|
||||||
proxy_pass http://127.0.0.1:8175/;
|
proxy_pass http://127.0.0.1:8174/;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -193,7 +193,8 @@ location /app/fedimint-gateway/ {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/tailscale/ {
|
location /app/tailscale/ {
|
||||||
proxy_pass http://127.0.0.1:8240/;
|
# Tailscale: no web UI
|
||||||
|
return 503;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -284,7 +285,7 @@ location /app/indeedhub/ {
|
|||||||
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
sub_filter '</head>' '<script src="/nostr-provider.js"></script></head>';
|
||||||
}
|
}
|
||||||
location /app/nginx-proxy-manager/ {
|
location /app/nginx-proxy-manager/ {
|
||||||
proxy_pass http://127.0.0.1:81/;
|
proxy_pass http://127.0.0.1:8181/;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ const APP_PORTS: Record<string, number> = {
|
|||||||
'grafana': 3000,
|
'grafana': 3000,
|
||||||
'searxng': 8888,
|
'searxng': 8888,
|
||||||
'ollama': 11434,
|
'ollama': 11434,
|
||||||
'onlyoffice': 9980,
|
'onlyoffice': 8044,
|
||||||
'penpot': 9001,
|
'penpot': 9001,
|
||||||
'nextcloud': 8085,
|
'nextcloud': 8085,
|
||||||
'vaultwarden': 8082,
|
'vaultwarden': 8082,
|
||||||
@@ -300,11 +300,11 @@ const APP_PORTS: Record<string, number> = {
|
|||||||
'immich': 2283,
|
'immich': 2283,
|
||||||
'immich_server': 2283,
|
'immich_server': 2283,
|
||||||
'filebrowser': 8083,
|
'filebrowser': 8083,
|
||||||
'nginx-proxy-manager': 81,
|
'nginx-proxy-manager': 8181,
|
||||||
'portainer': 9000,
|
'portainer': 9000,
|
||||||
'uptime-kuma': 3001,
|
'uptime-kuma': 3001,
|
||||||
'tailscale': 8240,
|
'fedimint': 8174,
|
||||||
'fedimint': 8175,
|
'fedimintd': 8174,
|
||||||
'fedimint-gateway': 8176,
|
'fedimint-gateway': 8176,
|
||||||
'nostr-rs-relay': 18081,
|
'nostr-rs-relay': 18081,
|
||||||
'indeedhub': 7777,
|
'indeedhub': 7777,
|
||||||
@@ -330,6 +330,7 @@ const HTTPS_PROXY_PATHS: Record<string, string> = {
|
|||||||
'mempool-web': '/app/mempool/',
|
'mempool-web': '/app/mempool/',
|
||||||
'archy-mempool-web': '/app/mempool/',
|
'archy-mempool-web': '/app/mempool/',
|
||||||
'fedimint': '/app/fedimint/',
|
'fedimint': '/app/fedimint/',
|
||||||
|
'fedimintd': '/app/fedimint/',
|
||||||
'fedimint-gateway': '/app/fedimint-gateway/',
|
'fedimint-gateway': '/app/fedimint-gateway/',
|
||||||
'jellyfin': '/app/jellyfin/',
|
'jellyfin': '/app/jellyfin/',
|
||||||
'searxng': '/app/searxng/',
|
'searxng': '/app/searxng/',
|
||||||
@@ -338,7 +339,12 @@ const HTTPS_PROXY_PATHS: Record<string, string> = {
|
|||||||
'onlyoffice': '/app/onlyoffice/',
|
'onlyoffice': '/app/onlyoffice/',
|
||||||
'immich': '/app/immich/',
|
'immich': '/app/immich/',
|
||||||
'immich_server': '/app/immich/',
|
'immich_server': '/app/immich/',
|
||||||
'tailscale': '/app/tailscale/',
|
'portainer': '/app/portainer/',
|
||||||
|
'nginx-proxy-manager': '/app/nginx-proxy-manager/',
|
||||||
|
'uptime-kuma': '/app/uptime-kuma/',
|
||||||
|
'homeassistant': '/app/homeassistant/',
|
||||||
|
'vaultwarden': '/app/vaultwarden/',
|
||||||
|
'photoprism': '/app/photoprism/',
|
||||||
'endurain': '/app/endurain/',
|
'endurain': '/app/endurain/',
|
||||||
'dwn': '/app/dwn/',
|
'dwn': '/app/dwn/',
|
||||||
}
|
}
|
||||||
@@ -368,14 +374,17 @@ const appTitle = computed(() => APP_TITLES[appId.value] || appId.value.replace(/
|
|||||||
|
|
||||||
/** Apps that set X-Frame-Options and MUST open in a new tab (can't iframe) */
|
/** Apps that set X-Frame-Options and MUST open in a new tab (can't iframe) */
|
||||||
const NEW_TAB_APPS = new Set([
|
const NEW_TAB_APPS = new Set([
|
||||||
'btcpay-server', // X-Frame-Options: DENY
|
'btcpay-server', // X-Frame-Options: DENY
|
||||||
'grafana', // X-Frame-Options: deny
|
'grafana', // X-Frame-Options: deny
|
||||||
'photoprism', // X-Frame-Options: DENY
|
'photoprism', // X-Frame-Options: DENY
|
||||||
'homeassistant', // X-Frame-Options: SAMEORIGIN
|
'homeassistant', // X-Frame-Options: SAMEORIGIN
|
||||||
'vaultwarden', // X-Frame-Options: SAMEORIGIN
|
'vaultwarden', // X-Frame-Options: SAMEORIGIN
|
||||||
'nextcloud', // X-Frame-Options: SAMEORIGIN
|
'nextcloud', // X-Frame-Options: SAMEORIGIN
|
||||||
'uptime-kuma', // X-Frame-Options: SAMEORIGIN
|
'uptime-kuma', // X-Frame-Options: SAMEORIGIN
|
||||||
'penpot', // Not reachable / blocks iframe
|
'penpot', // Blocks iframe
|
||||||
|
'portainer', // X-Frame-Options: deny
|
||||||
|
'onlyoffice', // X-Frame-Options: SAMEORIGIN
|
||||||
|
'nginx-proxy-manager', // X-Frame-Options blocks
|
||||||
])
|
])
|
||||||
|
|
||||||
const mustOpenNewTab = computed(() => NEW_TAB_APPS.has(appId.value))
|
const mustOpenNewTab = computed(() => NEW_TAB_APPS.has(appId.value))
|
||||||
|
|||||||
Reference in New Issue
Block a user