diff --git a/image-recipe/configs/nginx-archipelago.conf b/image-recipe/configs/nginx-archipelago.conf
index c2795ae8..ca191d87 100644
--- a/image-recipe/configs/nginx-archipelago.conf
+++ b/image-recipe/configs/nginx-archipelago.conf
@@ -327,7 +327,7 @@ server {
sub_filter '' '';
}
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_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -444,7 +444,7 @@ server {
sub_filter '' '';
}
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_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -478,7 +478,9 @@ server {
sub_filter '' '';
}
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_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -553,7 +555,7 @@ server {
sub_filter '' '';
}
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_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
diff --git a/image-recipe/configs/snippets/archipelago-https-app-proxies.conf b/image-recipe/configs/snippets/archipelago-https-app-proxies.conf
index 2e1bddd8..c78d0b7f 100644
--- a/image-recipe/configs/snippets/archipelago-https-app-proxies.conf
+++ b/image-recipe/configs/snippets/archipelago-https-app-proxies.conf
@@ -103,7 +103,7 @@ location /app/lnd/ {
sub_filter '' '';
}
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_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -161,7 +161,7 @@ location /app/mempool/ {
sub_filter '' '';
}
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_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -193,7 +193,8 @@ location /app/fedimint-gateway/ {
sub_filter '' '';
}
location /app/tailscale/ {
- proxy_pass http://127.0.0.1:8240/;
+ # Tailscale: no web UI
+ return 503;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -284,7 +285,7 @@ location /app/indeedhub/ {
sub_filter '' '';
}
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_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
diff --git a/neode-ui/src/views/AppSession.vue b/neode-ui/src/views/AppSession.vue
index dab2a666..40a2ab4b 100644
--- a/neode-ui/src/views/AppSession.vue
+++ b/neode-ui/src/views/AppSession.vue
@@ -291,7 +291,7 @@ const APP_PORTS: Record = {
'grafana': 3000,
'searxng': 8888,
'ollama': 11434,
- 'onlyoffice': 9980,
+ 'onlyoffice': 8044,
'penpot': 9001,
'nextcloud': 8085,
'vaultwarden': 8082,
@@ -300,11 +300,11 @@ const APP_PORTS: Record = {
'immich': 2283,
'immich_server': 2283,
'filebrowser': 8083,
- 'nginx-proxy-manager': 81,
+ 'nginx-proxy-manager': 8181,
'portainer': 9000,
'uptime-kuma': 3001,
- 'tailscale': 8240,
- 'fedimint': 8175,
+ 'fedimint': 8174,
+ 'fedimintd': 8174,
'fedimint-gateway': 8176,
'nostr-rs-relay': 18081,
'indeedhub': 7777,
@@ -330,6 +330,7 @@ const HTTPS_PROXY_PATHS: Record = {
'mempool-web': '/app/mempool/',
'archy-mempool-web': '/app/mempool/',
'fedimint': '/app/fedimint/',
+ 'fedimintd': '/app/fedimint/',
'fedimint-gateway': '/app/fedimint-gateway/',
'jellyfin': '/app/jellyfin/',
'searxng': '/app/searxng/',
@@ -338,7 +339,12 @@ const HTTPS_PROXY_PATHS: Record = {
'onlyoffice': '/app/onlyoffice/',
'immich': '/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/',
'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) */
const NEW_TAB_APPS = new Set([
- 'btcpay-server', // X-Frame-Options: DENY
- 'grafana', // X-Frame-Options: deny
- 'photoprism', // X-Frame-Options: DENY
- 'homeassistant', // X-Frame-Options: SAMEORIGIN
- 'vaultwarden', // X-Frame-Options: SAMEORIGIN
- 'nextcloud', // X-Frame-Options: SAMEORIGIN
- 'uptime-kuma', // X-Frame-Options: SAMEORIGIN
- 'penpot', // Not reachable / blocks iframe
+ 'btcpay-server', // X-Frame-Options: DENY
+ 'grafana', // X-Frame-Options: deny
+ 'photoprism', // X-Frame-Options: DENY
+ 'homeassistant', // X-Frame-Options: SAMEORIGIN
+ 'vaultwarden', // X-Frame-Options: SAMEORIGIN
+ 'nextcloud', // X-Frame-Options: SAMEORIGIN
+ 'uptime-kuma', // X-Frame-Options: SAMEORIGIN
+ '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))