[PR #423] [CLOSED] Embed Wolf Den into the Wolf container #456

Closed
opened 2026-10-15 13:00:42 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/wolf/pull/423
Author: @JBailes
Created: 6/7/2026
Status: ❌ Closed

Base: stable ← Head: feat/embed-wolf-den


📝 Commits (2)

  • d915368 Embed Wolf Den into the Wolf container
  • bbd4bda Use a named stage for the Wolf Den image (BuildKit COPY --from)

📊 Changes

3 files changed (+61 additions, -4 deletions)

View changed files

📝 docker/startup.sh (+13 -0)
📝 docker/supervisord.conf (+23 -4)
📝 docker/wolf.Dockerfile (+25 -0)

📄 Description

Follows the same pattern as #422 (embedded PulseAudio): instead of running Wolf Den as a separate wolf-den container, run it as another supervised process inside the Wolf container.

Changes

  • wolf.Dockerfile: copy the published Wolf Den app (/app) and the .NET runtime (/usr/share/dotnet) from ghcr.io/games-on-whales/wolf-den:stable (overridable via the WOLF_DEN_IMAGE build arg), install the .NET native deps not already present (libstdc++6, zlib1g), and symlink dotnet + point /app/wolf-den at the persisted state folder.
  • supervisord.conf: add a [program:wolf-den] block. It waits for Wolf's control socket, then runs dotnet WolfLeash.dll on :8080. priority=30 so it starts after Wolf and stops first on shutdown. autostart gated on WOLF_EMBED_DEN.
  • startup.sh: default WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock (Wolf creates it; Wolf Den connects to it via a unix:// URI), create the Wolf Den state dir under the persisted state folder, and set WOLF_EMBED_DEN=true by default.

State (SQLite DB + data-protection keys) lives in /etc/wolf/wolf-den, so it survives container replacement. Set WOLF_EMBED_DEN=false to disable the embedded UI (e.g. if you run Wolf Den elsewhere).

Validation (on a real Proxmox CT)

Built the embedded stack and ran it as a PVE CT:

  • supervisord brings up pulseaudio, wolf, and wolf-den, all RUNNING.
  • Wolf Den waits for Wolf's socket, connects, and serves: Now listening on http://[::]:8080, Application started; an HTTP probe returns 200.
  • docker stop shuts everything down gracefully in order: wolf-den -> wolf -> pulseaudio, each exit 0, in ~4s.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/wolf/pull/423 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 6/7/2026 **Status:** ❌ Closed **Base:** `stable` ← **Head:** `feat/embed-wolf-den` --- ### 📝 Commits (2) - [`d915368`](https://github.com/games-on-whales/wolf/commit/d9153688997a76823706251b6906cd9bc79e9aa1) Embed Wolf Den into the Wolf container - [`bbd4bda`](https://github.com/games-on-whales/wolf/commit/bbd4bdaa165c27c81a46078af1b707857f83d533) Use a named stage for the Wolf Den image (BuildKit COPY --from) ### 📊 Changes **3 files changed** (+61 additions, -4 deletions) <details> <summary>View changed files</summary> 📝 `docker/startup.sh` (+13 -0) 📝 `docker/supervisord.conf` (+23 -4) 📝 `docker/wolf.Dockerfile` (+25 -0) </details> ### 📄 Description Follows the same pattern as #422 (embedded PulseAudio): instead of running Wolf Den as a separate `wolf-den` container, run it as another supervised process inside the Wolf container. ## Changes - `wolf.Dockerfile`: copy the published Wolf Den app (`/app`) and the .NET runtime (`/usr/share/dotnet`) from `ghcr.io/games-on-whales/wolf-den:stable` (overridable via the `WOLF_DEN_IMAGE` build arg), install the `.NET` native deps not already present (`libstdc++6`, `zlib1g`), and symlink `dotnet` + point `/app/wolf-den` at the persisted state folder. - `supervisord.conf`: add a `[program:wolf-den]` block. It waits for Wolf's control socket, then runs `dotnet WolfLeash.dll` on `:8080`. `priority=30` so it starts after Wolf and stops first on shutdown. autostart gated on `WOLF_EMBED_DEN`. - `startup.sh`: default `WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock` (Wolf creates it; Wolf Den connects to it via a `unix://` URI), create the Wolf Den state dir under the persisted state folder, and set `WOLF_EMBED_DEN=true` by default. State (SQLite DB + data-protection keys) lives in `/etc/wolf/wolf-den`, so it survives container replacement. Set `WOLF_EMBED_DEN=false` to disable the embedded UI (e.g. if you run Wolf Den elsewhere). ## Validation (on a real Proxmox CT) Built the embedded stack and ran it as a PVE CT: - supervisord brings up `pulseaudio`, `wolf`, and `wolf-den`, all `RUNNING`. - Wolf Den waits for Wolf's socket, connects, and serves: `Now listening on http://[::]:8080`, `Application started`; an HTTP probe returns `200`. - `docker stop` shuts everything down gracefully in order: `wolf-den` -> `wolf` -> `pulseaudio`, each `exit 0`, in ~4s. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 13:00:42 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/wolf#456
No description provided.