Files
devdesk/docs/DEPLOY.md
T
jaredandClaude Opus 5.5 527cb1fda2
build-deb / Lint, test, package (push) Successful in 2m0s
build-deb / Notify on failure (push) Skipped
feat: free-form sessions, rename/end from the panel, live Claude Context (0.2.0)
- Sessions no longer need a project folder: any name works and starts in
  DEVDESK_DEFAULT_DIR unless it matches a project; `devdesk new NAME [PROJECT]`.
- Rename (✎) and end/forget (×) sessions from the Sessions panel, plus
  `devdesk rename`. The browser runs them as `devdesk attach --new|--rename|--end`
  through ttyd. Renames keep the running Claude and its recorded conversation:
  the hook, the run-wrapper and the statusline ask tmux for the current name.
- Claude Context panel is live: devdesk-statusline snapshots model,
  context-window use, cost and edits per session, which --list reports;
  Claude's footer gets a one-line summary. The panel now sits under Sessions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 03:03:09 -04:00

2.8 KiB
Raw Permalink Blame History

Deploying DevDesk (CT 126 · dev.lotusguild.org)

1. Install the package

Add the Gitea apt repository once:

curl -fsSL https://code.lotusguild.org/api/packages/LotusGuild/debian/repository.key \
  -o /etc/apt/keyrings/gitea-LotusGuild.asc
echo "deb [signed-by=/etc/apt/keyrings/gitea-LotusGuild.asc] https://code.lotusguild.org/api/packages/LotusGuild/debian bookworm main" \
  > /etc/apt/sources.list.d/lotusguild.list
apt update && apt install devdesk

On install, /etc/devdesk/secret.env is generated, devdesk-tmux.service and devdesk.service are enabled and started, and ttyd listens on :7681. Requests without the credential get a 401.

2. Nginx Proxy Manager (CT 139)

  • Proxy host: dev.lotusguild.org → http://10.10.10.58:7681.
    • Websockets Support on.
    • SSL: the existing wildcard *.lotusguild.org certificate, with Force SSL.
  • Advanced tab: paste npm-advanced.conf, replacing __DEVDESK_BASIC__ with the output of:
    . /etc/devdesk/secret.env && printf '%s' "$DEVDESK_CREDENTIAL" | base64 -w0
    
  • Why the credential matters: ttyd only checks the credential, so anything on the LAN that bypasses NPM is refused. If you rotate it, delete secret.env, run dpkg-reconfigure devdesk, update NPM, then systemctl restart devdesk.

3. Authelia (CT 167)

Add these to access_control.rules in /etc/authelia/configuration.yml, above any broader *.lotusguild.org rule:

- domain: dev.lotusguild.org
  policy: two_factor
  subject: ['user:jared']
- domain: dev.lotusguild.org
  policy: deny

Then run authelia validate-config --config /etc/authelia/configuration.yml && systemctl restart authelia.

4. DNS

  • Cloudflare: add a CNAME dev → apex, DNS-only (grey cloud).
  • Pi-hole: add "10.10.10.27 dev.lotusguild.org" to dns.hosts in pve-infra/containers/163-pihole/etc/pihole/pihole.toml. A push auto-deploys it, and LAN clients then reach NPM directly instead of hairpinning.

5. Optional hardening

Enable the Proxmox firewall on CT 126 (firewall=1 on net0) and allow tcp/7681 only from 10.10.10.27. The same rule suits code-server on :8680.

Operations

Task Command
Sessions devdesk ls
Attach over SSH devdesk attach <name> (or devdesk pick)
New session (optionally in a project) devdesk new <name> [project], or the Sessions panel form
Rename a session devdesk rename <old> <new>, or ✎ in the Sessions panel
End a session devdesk end <name>, × in the Sessions panel, or [x] in the Claude window's exit menu
Restart the web side (safe) systemctl restart devdesk
Stop every session systemctl stop devdesk-tmux
Logs journalctl -u devdesk -u devdesk-tmux
UI-only update replace /usr/share/devdesk/index.html (ttyd re-reads it per request)