Real IP is 192.168.8.243 (not .214). Web UI is on port 8443 HTTPS, not 8080. Caddy backend uses tls_insecure_skip_verify. boxCertAuth disabled so ESP32 Toniebox connects without client cert extraction. Added SD card onboarding steps for Leon's ESP32 box. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.0 KiB
131 — teddycloud
Open-source replacement server for Toniebox smart audio devices (Tonieboxes). Serves device content and API on port 443 and exposes a management web UI at teddy.hubris.network.
At a glance
- Hostname:
teddycloud - IP:
192.168.8.243(DHCP reservation; MACbc:24:11:11:7a:df) - Privilege: privileged
- Resources: 1 core / 1 GiB RAM / 16 GiB rootfs (Debian 12)
- Mounts:
/mnt/library(mp0) — TeddyCloud content at/mnt/library/cloud/leon - Public hostname: none (LAN-only)
Role
Replaces the Boxine cloud (prod.de.bb-online.com) as the backend for Leon's Toniebox. Tonieboxes connect on port 443 using a custom CA cert issued by TeddyCloud. Content (Tonies) is stored on the NAS at /mnt/library/cloud/leon and is accessible from the management UI.
Service / port map
| Service | Listen | Notes |
|---|---|---|
| TeddyCloud device API | 0.0.0.0:443 |
HTTPS, TeddyCloud self-signed CA, Toniebox connects here |
| TeddyCloud HTTP | 0.0.0.0:80 |
Redirects to 443 |
| TeddyCloud web UI | 0.0.0.0:8443 |
HTTPS management UI — fronted by Caddy at teddy.hubris.network (backend uses tls_insecure_skip_verify for self-signed cert on LAN hop) |
Docker Compose
/opt/teddycloud/docker-compose.yml:
services:
teddycloud:
image: ghcr.io/toniebox-reverse-engineering/teddycloud:latest
ports:
- "80:80"
- "443:443"
- "8443:8443"
volumes:
- certs:/teddycloud/certs
- config:/teddycloud/config
- /mnt/library/cloud/leon:/teddycloud/content
- /mnt/library/cloud/leon:/teddycloud/library
restart: unless-stopped
volumes:
certs:
config:
certs and config are Docker named volumes (runtime state). content and library are bind-mounted from /mnt/library/cloud/leon so audio content persists across container rebuilds and is browsable from the host.
Storage / config paths
/opt/teddycloud/docker-compose.yml— compose file- Docker volume
teddycloud_certs— TeddyCloud CA + server certs (generated on first boot) - Docker volume
teddycloud_config— TeddyCloud config /mnt/library/cloud/leon/— Tonie content + library (NAS bind mount)
Networking
Two separate traffic paths — different IPs, no port 443 conflict:
Management UI (browser):
teddy.hubris.network → Technitium → 192.168.8.175 (Caddy) → 192.168.8.243:8443
Toniebox device traffic:
prod.de.bb-online.com → Technitium override → 192.168.8.243:443 (TeddyCloud direct)
Caddy terminates TLS for the management UI (IONOS DNS-01 wildcard cert). TeddyCloud terminates TLS for device traffic with its own self-signed CA — the Toniebox must have this CA installed.
DNS overrides in Technitium
| Record | Type | Value | Purpose |
|---|---|---|---|
teddy.hubris.network |
A | 192.168.8.175 |
Management UI → Caddy (standard pattern) |
prod.de.bb-online.com |
A | 192.168.8.243 |
Toniebox device traffic → TeddyCloud direct |
The prod.de.bb-online.com override is Technitium-only — it intercepts Toniebox DNS locally without touching public DNS. The dns-sync.py cron on LXC 107 skips non-hubris.network records, so it stays local.
Config notes
core.boxCertAuth=false— client cert validation disabled. The box connects without presenting its unique client cert. Set in/var/lib/docker/volumes/teddycloud_config/_data/config.ini(TeddyCloud hot-reloads on change).- If you ever want per-box auth, flip to
trueand supplycerts/client/ca.der,client.der,private.derextracted from the box flash.
Toniebox onboarding — ESP32 SD card method
Leon's box is ESP32 generation. No hardware mod required.
- Download the TeddyCloud CA cert from the web UI: Security → CA Certificate → Download CA (
ca.der). - Power off the Toniebox, remove the SD card.
- On the SD card, create folder
cert/at the root. - Copy the downloaded
ca.derintocert/ca.deron the SD card. - Reinsert SD card, power on the box.
- The box patches itself to trust TeddyCloud's CA, then resolves
prod.de.bb-online.comvia Technitium's override (192.168.8.243) and connects on port 443.
Reference: upstream wiki — ESP32 SD card method.
Related
- Caddy (121) — LAN reverse proxy (
teddy.hubris.network → 192.168.8.243:8443) - DNS (107) — Technitium A records for
teddy.hubris.networkandprod.de.bb-online.com - Media permissions — NAS
/mnt/librarymount pattern
Changelog
2026-06-29 — provisioned
LXC 131 created (Debian 12, privileged, nesting=1). Docker installed. TeddyCloud running via Docker Compose at /opt/teddycloud/. Content bind-mounted from /mnt/library/cloud/leon. Caddy block added at teddy.hubris.network → :8443. Technitium A records: teddy.hubris.network → 192.168.8.175 (Caddy), prod.de.bb-online.com → 192.168.8.243 (device traffic direct).