Skip to content

Pi-hole, Copyparty, Node-RED: fix web interface access through Tailscale Serve - #362

Merged
crypt0rr merged 2 commits into
mainfrom
fix-pihole-copyparty-nodered-web-access
Oct 7, 2026
Merged

crypt0rr merged 2 commits into
mainfrom
fix-pihole-copyparty-nodered-web-access

Conversation

@jackspiering

@jackspiering jackspiering commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Three stacks could not serve their web interface through Tailscale Serve. Each fix is one value.

  • Pi-hole (compose.yaml): Serve forwarded / to http://127.0.0.1:80/admin. Pi-hole redirects to /admin/login, which Serve then forwarded to /admin/admin/login, so the browser looped until it gave up. Serve now forwards to http://127.0.0.1:80, and the web interface is at https://pihole.<tailnet>.ts.net/admin. The root path / answers 403, which is Pi-hole's own behaviour.
  • Copyparty (compose.yaml): the built-in config served /data, but the stack mounts the shared folder at /w. Copyparty logged filesystem-path did not exist: '/data' and showed nothing. The config now serves /w.
  • Node-RED (compose.yaml, .env): Serve forwarded to port 1080, but Node-RED listens on 1880, so the Tailnet address answered 502. Serve now forwards to 1880, and SERVICEPORT has the same value, so the optional ports block maps the right port as well.

Related Issues

  • None.

Verification

Each stack ran from a scratch copy, joined to the Tailnet, first with the files from main and then with this branch. The requests went to https://<name>.<tailnet>.ts.net through Tailscale Serve. They were sent from inside the network of the stack, because the Tailnet policy of the test nodes blocks the Docker host.

Pi-hole (pihole/pihole, Pi-hole 6)

Request main This branch
/ 302 to /admin/login, then a redirect loop (curl: maximum of 50 redirects) 403
/admin part of the loop 308 to /admin/, 302 to /admin/login, 200 (login page)
Stylesheet from the login page 404 200

Copyparty (copyparty/ac, Copyparty 1.20.25), with a test folder that holds probe.txt

Check main This branch
Log at start filesystem-path did not exist: '/data' no such warning
List / as admin 404 200, shows probe.txt, permissions read, write, get
Upload a file as admin 403 201, file is in the host folder
List / without login empty empty

Node-RED (nodered/node-red, Node-RED 5.0.7)

Check main This branch
Port that Node-RED listens on 1880 1880
Serve target 127.0.0.1:1080 127.0.0.1:1880
https://<name>.<tailnet>.ts.net/ 502 200
  • docker compose config --quiet in services/pihole, services/copyparty, and services/nodered: passed.
  • git diff --check: passed.

Checklist

  • I have performed a self-review of my code and followed the templates structure.
  • I have added verification that the stack works as expected.
  • I have updated necessary documentation (e.g. frontpage README.md ).
  • I have selected the correct label(s) for this PR.

Additional Context

  • The READMEs of these three services are rewritten in All services: standardize the service READMEs #363, which describes the fixed behaviour. Merge this pull request first.
  • Copyparty still logs that it cannot store its runtime config in /cfg, because the stack shares the root-owned ./config folder with Tailscale. It then disables sessions. This pull request does not change that.

…ale Serve

- Pi-hole: forward Serve to port 80 instead of /admin. The /admin target
  made every redirect of Pi-hole loop, so the web interface never loaded.
- Copyparty: serve /w, the path where the stack mounts the shared folder.
  The config pointed at /data, which does not exist in the container.
- Node-RED: forward Serve to port 1880, the port Node-RED listens on, and
  set SERVICEPORT to the same value.
@jackspiering jackspiering added the bug Something isn't working label Oct 7, 2026
@jackspiering
jackspiering requested a review from crypt0rr October 7, 2026 17:16
@crypt0rr
crypt0rr merged commit 9d7e16f into main Oct 7, 2026
1 check passed
@crypt0rr
crypt0rr deleted the fix-pihole-copyparty-nodered-web-access branch October 7, 2026 18:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants