Bambuddy self-host on the tailnet — deployment plan
Self-host Bambuddy (open-source Bambu Lab control plane — monitoring, queue, archive, virtual-printer proxy) on telep-mainframe, exposed on the Tailscale tailnet, replacing Bambu’s cloud for the Bambu Lab H2S + AMS 2 Pro. Ref: bambuddy.cool · Tailscale blog. Related: 3d-printing · telep-mainframe-handover · telep-mainframe · telep-router.
What it is / why
Bambuddy is a Docker self-hosted control plane for Bambu Lab printers. It connects to the printer over the LAN via Developer/LAN Mode (MQTT + FTPS, using the printer’s access code — no firmware mod, no Bambu cloud). It presents virtual printers that OrcaSlicer discovers and prints to. The Tailscale angle: Bambuddy reads the host’s tailnet IP and advertises the virtual printers on it, so OrcaSlicer on the Mac connects over the tailnet, encrypted.
Slicer note: OrcaSlicer/Bambu Studio (the “slicer”) is a desktop app that turns 3D models into print files. It is NOT installed on the server — it runs on the Mac and talks to Bambuddy’s virtual printer over the tailnet. Only needed to prepare prints; already-sliced .3mf/.gcode can be sent straight through Bambuddy.
Deployment facts (from wiki.bambuddy.cool)
- Image:
ghcr.io/maziggy/bambuddy:latest(:dailyfor dev). network_mode: host— required for SSDP printer discovery + camera + the virtual-printer ports.- Web UI: port 8000.
- Data: SQLite (zero-config, default) in
bambuddy_data:/app/data; logs inbambuddy_logs:/app/logs. Postgres optional viaDATABASE_URL. - Env:
TZ(setEurope/Budapest),PORT(8000),DATABASE_URL(unused),BAMBUDDY_EXTERNAL_ROOTS(mount allowlist, unused for now). - Virtual-printer ports (host mode): MQTT 8883, FTPS 990, detection 3000/3002, tunnel 6000, RTSP 322, FTP passive 50000–50029, A1/P1 2024–2026.
- Quick start:
curl -O https://raw.githubusercontent.com/maziggy/bambuddy/main/docker-compose.yml && docker compose up -d.
Host + network context (telep-mainframe)
- Host:
telep-mainframe(Debian 13, Docker 29.6.1 / Compose v5.3.1),ssh levander@telep-mainframe,192.168.1.123wired onenp5s0, on tailnettelep-mainframe.taild4189d.ts.net(100.115.209.87). - Printer goes on the main LAN
192.168.1.0/24(wired ortelep1WiFi) — reachable from.123; LAN-mode ports not blocked intra-LAN. Do NOT put it on the camera VLAN192.168.30.0/24. - App dirs convention:
/home/levander/<service>/. Docker stacks like~/nvr.
Exposure decision — dedicated node for the web UI (host-network exception for virtual printers)
Per tailnet-service-exposure-convention (dedicated node + hostname per service), the web UI gets its own node: a dedicated tailscaled (userspace networking, own --socket/--statedir) authed as bambuddy → https://bambuddy.taild4189d.ts.net serving http://127.0.0.1:8000.
Host-network split
Bambuddy runs
network_mode: host(SSDP + virtual-printer ports), so its virtual printers still advertise the HOST’s tailnet IP (telep-mainframe=100.115.209.87), which is what the blog relies on and what OrcaSlicer connects to. Only the web UI rides the dedicatedbambuddynode. This is the documented host-network exception in tailnet-service-exposure-convention. Mind the--statedir(not--state) gotcha.
Phase 1 — server (no printer needed)
/home/levander/bambuddy/docker-compose.ymlfrom the official compose (imageghcr.io/maziggy/bambuddy:latest,network_mode: host, volumesbambuddy_data/bambuddy_logs,TZ=Europe/Budapest,restart: unless-stopped).docker compose up -d; verify web UI on127.0.0.1:8000.tailscale serve --bg --https=8000 http://127.0.0.1:8000; verifyhttps://telep-mainframe.taild4189d.ts.net:8000.- Add a Bambuddy tile to the home portal (
/home/levander/home-portal/index.html, 2026-07-24-global-dashboard).
Phase 2 — printer (needs it powered + in LAN/Dev Mode)
- Power on the H2S; on its screen enable LAN Only / Developer Mode (Settings → Network); note IP, serial, access code.
- Give it a DHCP reservation on telep-router (same as the mainframe
.123fix — see telep-router DHCP section) so its IP is stable. - Add the printer in Bambuddy (auto-discovered via SSDP in host mode, or by IP + access code).
- Test: monitoring/status live; send a test print from OrcaSlicer (Mac) to the virtual printer over the tailnet.
Prereqs / open (discover live — none documented yet)
- Printer IP / wired-vs-
telep1/ serial / access code / LAN-Dev-Mode state — all undocumented; capture once set. - DHCP reservation for the printer on telep-router.
- OrcaSlicer installed on the Mac (desktop, for preparing prints).
Success criteria
- Bambuddy web UI reachable at
https://telep-mainframe.taild4189d.ts.net:8000, container healthy + starts on boot. - H2S added, LAN-mode connected (status/temps live), no Bambu cloud.
- OrcaSlicer on the Mac prints to the virtual printer over the tailnet.
- Bambuddy tile on the home portal.