Betawulf - Services & Container Documentation
Host: betawulf (Ubuntu 24.x, kernel 6.17) | Generated: 2026-06-02
Host Network
| Interface | IP | Purpose |
| eno1 | 192.168.100.12 | Primary host LAN IP |
| eno2 | 192.168.100.15 | Secondary IP — used by phishingclub, erpnext, odoo (Traefik upstream) |
| eno3 | 192.168.100.21 | Tertiary IP |
| eno4 | 192.168.100.20 | Quaternary IP |
| tailscale0 | 100.91.96.110 | Tailnet IP for remote access |
| cni0 / flannel.1 | 10.42.0.0/24 | k3s pod network (k3s running on host) |
Cross-subnet note: .12 is blocked from alphawulf subnet — Traefik on alphawulf (192.168.50.10) must point to 192.168.100.15:PORT for FoxForm and other services.
Public URLs (via Traefik on alphawulf)
| URL | Service | Upstream |
| https://foxform.silverwulf.work | FoxForm (KPI / form builder) | 192.168.100.15:8085 |
| https://kc-foxform.silverwulf.work | KoboCAT (data submissions) | 192.168.100.15:8085 |
| https://ee-foxform.silverwulf.work | Enketo (web forms) | 192.168.100.15:8085 |
| https://nomad.silverwulf.com | Project N.O.M.A.D. admin | 192.168.100.12:8080 |
| https://odoo.silverwulf.work | Odoo 18 Community ERP | 192.168.100.15:8069 |
| https://erpnext.silverwulf.work | ERPNext v16 | 192.168.100.15:8090 |
| https://phishingclub.silverwulf.work | PhishingClub (admin HTTPS self-signed) | 192.168.100.15:443 (insecureSkipVerify) |
| https://rustdesk.silverwulf.work | RustDesk relay (raw TCP/UDP, bypasses Traefik) | direct edge → betawulf 21115-21119 |
FoxForm / KoboToolbox Stack
Project name: kobobe (backend) + kobo-docker (frontend). Config at ~/kobo-docker/, env at ~/kobo-env/, install conf at ~/kobo-install/.run.conf.
| Container | Image | Port | Purpose |
| kobo-docker-nginx-1 | nginx:1.27 | 8085→80 | Front nginx for all Kobo services (KPI, KC, EE) |
| kobo-docker-kpi-1 | kobotoolbox/kpi:2.026.12e | 8000 (internal) | KPI form builder web UI |
| kobo-docker-beat-1 | kobotoolbox/kpi:2.026.12e | — | Celery beat scheduler |
| kobo-docker-worker-1 | kobotoolbox/kpi:2.026.12e | — | Celery default worker |
| kobo-docker-worker_kobocat-1 | kobotoolbox/kpi:2.026.12e | — | KoboCAT worker |
| kobo-docker-worker_low_priority-1 | kobotoolbox/kpi:2.026.12e | — | Low-priority worker |
| kobo-docker-worker_long_running_tasks-1 | kobotoolbox/kpi:2.026.12e | — | Long-task worker (exports etc.) |
| kobo-docker-enketo_express-1 | kobotoolbox/enketo-express-extra-widgets:7.6.0 | 8005 (internal) | Enketo web form renderer |
| kobobe-postgres-1 | postgis/postgis:14-3.2 | 5432 (internal) | Primary Postgres for KPI + KC |
| kobobe-mongo-1 | mongo:5.0 | 27017 (internal) | Mongo for submissions |
| kobobe-redis_main-1 | redis:7.2 | 6379 (internal) | Redis main broker |
| kobobe-redis_cache-1 | redis:7.2 | 6379 (internal) | Redis cache |
FoxForm Access
URL: https://foxform.silverwulf.work
Admin user: foxadmin
Password: FoxForm2026!
API token: 0c4b0233808dcdaa3e1de2e0d60a0b61a558322d
Postgres: kobo / 48380bb7316994e397ce
Mongo: kobo / 46064c79bb028d1f418e
Redis: 076b43f5cf0a35d96895
Deployed Forms
| Form | UID | Enketo public link |
| ISP Daily Field Report | aaFAieyGF6f9JntFEupyQc | https://ee-foxform.silverwulf.work/x/aaFAieyGF6f9JntFEupyQc |
| Victory Air Field Timesheet | a6yr6vX3xnCZNMQyNVkpNj | https://ee-foxform.silverwulf.work/x/a6yr6vX3xnCZNMQyNVkpNj |
Tip — Branding: After any Kobo container restart, re-apply FoxForm branding:
cd ~/ai/projects/bayou_safety_forms && bash apply_branding.sh
Replaces logos, injects CSS, patches "KoboToolbox" → "FoxForm" in templates and compiled JS.
Tip — Start backend:
cd ~/kobo-docker && docker compose -p kobobe -f docker-compose.backend.yml -f docker-compose.backend.override.yml up -d
Tip — Start frontend:
cd ~/kobo-docker && docker compose -f docker-compose.frontend.yml -f docker-compose.frontend.override.yml up -d
Project N.O.M.A.D.
Offline-first knowledge & service platform. Public at nomad.silverwulf.com — currently runs with no auth. Config at ~/project-nomad/.
| Container | Image | Port | Purpose |
| nomad_admin | ghcr.io/crosstalk-solutions/project-nomad:v1.32.1 | 8080 | Nomad admin UI |
| nomad_mysql | mysql:8.0 | 3306 (internal) | Admin DB |
| nomad_redis | redis:7-alpine | 6379 (internal) | Cache / broker |
| nomad_ollama | ollama/ollama:0.24.0 | 11434 | Local LLM runtime (note: GPU-heavy work offloaded to ollamawulf) |
| nomad_qdrant | qdrant/qdrant:v1.16 | 6333-6334 | Vector DB |
| nomad_kiwix_server | ghcr.io/kiwix/kiwix-serve:3.8.2 | 8091 | Offline Wikipedia / zim reader (Firewolf demos pushed here) |
| nomad_kolibri | treehouses/kolibri:0.12.8 | 8300 | Offline education platform |
| nomad_flatnotes | dullage/flatnotes:v5.5.4 | 8200 | Markdown notes |
| nomad_cyberchef | ghcr.io/gchq/cyberchef:10.24 | 8100 | Data manipulation toolkit |
| nomad_dozzle | amir20/dozzle:v10.0 | 9999 | Web log viewer for all Docker containers |
| nomad_updater | ghcr.io/crosstalk-solutions/project-nomad-sidecar-updater | — | Self-updater sidecar |
| nomad_disk_collector | (local) | — | Disk usage metrics |
Tip — Dozzle: http://192.168.100.12:9999 → tail logs of every container in browser. No login configured.
Tip — Firewolf zim push: Firewolf zim demo-staging on firefolf-alpha laptop, deployed into Nomad's kiwix zim dir.
Tip — Ollama: Heavy GPU inference uses ollamawulf (RTX 4060) at tailnet IP 100.72.83.86 — shared by Nomad, onyx, ragflow, stash.
ERPNext
v16 Community ERP. Public at erpnext.silverwulf.work. Bound to 192.168.100.15:8090.
| Container | Image | Port | Purpose |
| erpnext-frontend-1 | frappe/erpnext:v16.15.0 | 192.168.100.15:8090→8080 | Nginx + asset frontend |
| erpnext-backend-1 | frappe/erpnext:v16.15.0 | — | Frappe app server (gunicorn) |
| erpnext-websocket-1 | frappe/erpnext:v16.15.0 | — | Realtime WebSocket |
| erpnext-scheduler-1 | frappe/erpnext:v16.15.0 | — | Cron / scheduler |
| erpnext-queue-short-1 | frappe/erpnext:v16.15.0 | — | Short-running RQ worker |
| erpnext-queue-long-1 | frappe/erpnext:v16.15.0 | — | Long-running RQ worker |
| erpnext-db-1 | mariadb:11.8 | 3306 (internal) | Primary DB |
| erpnext-redis-cache-1 | redis:6.2-alpine | 6379 | Redis cache |
| erpnext-redis-queue-1 | redis:6.2-alpine | 6379 | Redis queue |
Odoo 18 Community
Rebrandable OSS ERP test. Public at odoo.silverwulf.work.
| Container | Image | Port | Purpose |
| odoo | odoo:18 | 192.168.100.15:8069 (web), 8072 (longpoll) | Odoo app |
| odoo_db | postgres:16 | 5432 (internal) | Odoo Postgres |
Outline Wiki
Team docs / wiki at port 8095.
| Container | Image | Port | Purpose |
| outline-docker-outline-1 | outlinewiki/outline:latest | 8095→3000 | Outline web app |
| outline-docker-postgres-1 | postgres:16 | 5432 (internal) | Outline DB |
| outline-docker-redis-1 | redis:7 | 6379 (internal) | Outline cache |
PhishingClub
Phishing simulation / training. Admin UI is HTTPS self-signed — Traefik fronts with insecureSkipVerify.
| Container | Image | Port | Purpose |
| phishingclub | ghcr.io/phishingclub/phishingclub:latest | 192.168.100.15:80, :443, :8000 | Single-container app + admin UI |
RustDesk Self-Hosted
Bypasses Traefik — Edge router forwards raw TCP/UDP directly to betawulf. rustdesk.silverwulf.work.
| Container | Image | Ports | Purpose |
| rustdesk-hbbs | rustdesk/rustdesk-server:latest | 21115-21116/tcp, 21118/tcp, 21116/udp | ID/rendezvous server |
| rustdesk-hbbr | rustdesk/rustdesk-server:latest | 21117/tcp, 21119/tcp | Relay server |
Stash (AI Memory MCP)
Local memory MCP server at localhost:8082/sse. Ollama-backed (nomic-embed-text 768-dim + qwen3.5:9b).
| Container | Status | Note |
| stash-stash-1 | Restarting (crash loop) | Currently broken — investigate logs docker logs stash-stash-1 |
| stash-postgres-1 | Exited 2 weeks ago | DB stopped — likely cause of stash crash |
Action: Stash MCP is down. Postgres exited cleanly 2 wks ago; bring it up first, then stash.
Onyx (Health / Law AI) — STOPPED
DO NOT DELETE. Containers stopped 7 weeks ago, data volumes preserved for future restart.
| Container | Status |
| onyx-nginx-1, onyx-web_server-1, onyx-api_server-1, onyx-background-1, onyx-cache-1, onyx-code-interpreter-1, onyx-indexing_model_server-1, onyx-inference_model_server-1, onyx-minio-1, onyx-relational_db-1, onyx-index-1 | All Exited 7 weeks ago |
Infrastructure / Management
| Container / Service | Port | Purpose |
| portainer | 9000 (http), 9443 (https) | Docker management UI for all stacks |
| adguard-secondary | (host net) | Secondary AdGuard Home DNS filter |
| nomad_dozzle | 9999 | Browser log viewer (all containers) |
Host systemd Services (selected)
| Service | Purpose |
| docker.service | Docker engine — manages 30+ running containers |
| k3s.service | Single-node Kubernetes (pod net 10.42.0.0/24) — used for AWX operator etc. |
| containerd.service | Container runtime backing both Docker and k3s |
| tailscaled.service | Tailscale daemon — host reachable at 100.91.96.110 |
| ssh.service | SSH access |
| cron.service | Scheduled jobs |
| NetworkManager / systemd-resolved | Networking + DNS |
| unattended-upgrades.service | Auto security patches |
| sddm.service | Display manager (desktop login) |
Key Filesystem Paths
| Path | Contents |
~/kobo-install/.run.conf | Kobo install config |
~/kobo-docker/ | Kobo compose files |
~/kobo-env/ | Kobo env files |
~/ai/projects/bayou_safety_forms/ | FoxForm branding + form definitions |
~/ai/projects/bayou_safety_forms/.credentials.local | Master FoxForm creds |
~/project-nomad/ | Nomad compose + config |
~/odk-central/ | ODK Central (potential KoboToolbox replacement) |
~/outline-docker/ | Outline wiki compose |
~/adguard/ | AdGuard config |
~/docker/ | Misc docker projects |
/root/docker/traefik/dynamic/foxform.yml (on alphawulf) | Traefik dynamic config for FoxForm |
Tips & Gotchas
Traefik YAML gotcha: Broken YAML in any file under /root/docker/traefik/dynamic/*.yml blocks ALL config reloads — not just the broken one. Validate before saving.
betawulf is test/dev, NOT production. Don't apply production-grade caution by default — feel free to restart, rebuild, experiment.
SSH to alphawulf: hostname does not resolve from betawulf. Use IP 192.168.50.10 directly.
Cross-subnet IP rule: Use 192.168.100.15 (eno2) for any service that needs to be reachable from the alphawulf subnet. .12 is firewalled off.
GPU inference: All heavy LLM workloads point at http://100.72.83.86:11434 (ollamawulf, RTX 4060). Local nomad_ollama on betawulf is CPU-only fallback.
Logs fast: http://192.168.100.12:9999 (Dozzle) is faster than docker logs for browsing.
Container mgmt: https://192.168.100.12:9443 (Portainer) for stack/service control with UI.
Generated 2026-06-02 from live docker ps / systemctl / ip output on betawulf.
Addendum — Alphawulf (Proxmox VM)
Hypervisor
| Host | Access | Notes |
| Proxmox | https://192.168.50.250:8006/ | User: root PW: Ds337! (placeholder — real in Vaultwarden) |
Alphawulf Host Overview
| Item | Value |
| Hostname | alphawulf |
| LAN IP | 192.168.50.10 |
| Tailscale IP | 100.84.81.43 |
| Public IP (work) | 70.186.250.158 |
| Reverse proxy | Traefik v3 (ports 80/443), routes by Host() rule |
| DNS | Cloudflare (*.silverwulf.com/.work/.org); AdGuard rewrites LAN → 192.168.50.10 |
| Container count | ~85 running across multiple Docker Compose stacks |
| Portainer | https://192.168.50.10:9443 User: wulftech PW: g@!4orD12337! |
How to Access (read first)
- Office LAN: AdGuard resolves domains to 192.168.50.10. Use normal HTTPS URL. Direct
http://192.168.50.10:PORT also works for services that publish ports.
- Tailscale (remote techs): URL (DNS → 100.84.81.43) or
http://100.84.81.43:PORT.
- Public internet: only some .com tools are public; most are LAN/Tailscale only. When unsure, use Tailscale.
Legend: [PUB] public-capable [LAN] LAN via AdGuard [TS] Tailscale-only
Infrastructure & Management
| Service | Access | Container | What it does |
| Traefik | https://traefik.silverwulf.work [LAN] | traefik | Reverse proxy / TLS for every web service; dashboard shows routers & certs |
| Portainer | https://192.168.50.10:9443 [LAN][TS] | portainer | Web UI to manage Docker containers, stacks, volumes, images |
| Dozzle | https://dozzle.silverwulf.org [TS] | dozzle | Live real-time container log viewer in the browser |
| Tugtainer | http://192.168.50.10:9412 [LAN][TS] | tugtainer | Automated container image update checker / updater |
| Uptime Kuma | http://192.168.50.10:3002 [LAN][TS] | uptime-kuma | Uptime / status monitoring with alerting |
| AdGuard Home | http://192.168.50.10:3080 [LAN][TS] | adguard | Network DNS + ad-blocking; holds LAN rewrites. Serves DNS on :53 |
| Tailscale | (VPN daemon) | tailscale | Mesh VPN providing 100.84.81.43; secure remote-access path |
| Homepage | https://home-alpha.silverwulf.org [TS] | homepage | Service dashboard / launcher landing page |
| Homelable | https://homelab.silverwulf.com [TS] | homelable-frontend/-backend/-mcp | Interactive homelab topology visualizer; MCP at 127.0.0.1:8011 |
Portal & Landing Sites
| Service | Access | Container | What it does |
| SilverWulf Portal | https://portal.silverwulf.work [LAN] | silverwulf-portal | Next.js multi-tenant portal (+ subdomains) |
| SilverWulf Hub | https://apps.silverwulf.com [LAN] | silverwulf-hub | Central hub linking to all self-hosted apps |
| Apps1 Dashboard | https://apps1.silverwulf.com [LAN] | apps1-dashboard | Secondary app dashboard, protected by basic-auth |
Business & Productivity
| Service | Access | Container | What it does |
| Cal.com | https://cal.silverwulf.com [LAN] | calcom + calcom-db | Self-hosted scheduling / booking (Calendly alt) |
| n8n | https://n8n.silverwulf.work [LAN] | n8n | Workflow automation platform (Zapier alt) |
| Plane | https://plane.silverwulf.com [LAN] | multi-container stack | Project & issue management (Jira/Linear alt) |
| Nextcloud | https://nextcloud.silverwulf.com [LAN] | nextcloud + -db + -redis | Primary file sync, sharing & collaboration |
| Bayou Safety NC | https://bayousafety.silverwulf.com [LAN] | bayousafety-nextcloud stack | Dedicated Nextcloud for Bayou Safety client |
| Scriberr | https://meetings.silverwulf.work [LAN] | scriberr | Audio / meeting transcription & notes |
| DocuSeal | https://sign.silverwulf.com [LAN] | docuseal | Document e-signature platform |
| Shelf | https://shelf.silverwulf.com [LAN] | shelf | Asset / equipment / inventory management |
Document Management
| Service | Access | Container | What it does |
| Paperless-ngx | http://192.168.50.10:8000 [LAN][TS] | paperless + -redis | Document scan / OCR / archive (direct port only) |
| JDS Paperless | https://jdspaperless.silverwulf.work [LAN] | jds-paperless stack | Separate Paperless-ngx instance for JDS |
Password Managers
| Service | Access | Container | What it does |
| Vaultwarden | https://vault.silverwulf.com [LAN] | vaultwarden | Self-hosted Bitwarden-compatible manager |
| LeBlanc VW | https://leblanc.silverwulf.com [LAN] | leblanc-vaultwarden | Dedicated Vaultwarden for LeBlanc (ports 8282/8283) |
AI & Knowledge
| Service | Access | Container | What it does |
| Onyx | https://onyx.silverwulf.work [LAN] | onyx stack (10+) | AI assistant with semantic search. Cold start ~5 min |
| Agent Zero | https://agent.silverwulf.work [LAN] | agent-zero | General-purpose autonomous AI agent framework |
Public Tools & Utilities
| Service | Access | Container | What it does |
| SearXNG | https://search.silverwulf.com [PUB] | searxng | Private meta-search engine |
| SnapOtter | https://images.silverwulf.com [PUB] | snapotter | Image toolkit, 45+ tools, local AI |
| Terraink | https://maps.silverwulf.com [PUB] | terraink | Poster / print & map design |
| Excalidraw | https://draw.silverwulf.com [PUB] | excalidraw | Collaborative whiteboard / diagrams |
| Omni Tools | https://omnitools.silverwulf.com [PUB] | omnitools | Everyday utilities collection |
| IT-Tools | https://tools.silverwulf.work [LAN] | it-tools | Dev/sysadmin utility belt |
| BentoPDF | https://pdf.silverwulf.work [LAN] | bentopdf | PDF manipulation suite |
| VERT | https://vert.silverwulf.com [PUB] | vert | Local file-format converter |
| SkySend | https://skysend.silverwulf.com [PUB] | skysend | Secure file sharing / transfer |
| DropSync | https://drop.silverwulf.com [PUB] | dropsync | File drop / sync |
| Mazanoke | http://192.168.50.10:3474 [LAN][TS] | mazanoke | In-browser local image compression |
Network Documentation
| Service | Access | Container | What it does |
| NetBox | https://netbox.silverwulf.com [LAN][TS] | netbox stack | IPAM / DCIM, source of truth for IPs/racks/devices. Superuser: admin |
Monitoring, Reports & Security
| Service | Access | Container | What it does |
| WulfWatch | https://wulfwatch.silverwulf.com [LAN] | wulfwatch | CONTAINER UNHEALTHY — parses email backup reports |
| Honeypot | (passive) | honeypot-tarpit | Tarpit honeypot for unauthorized scanners |
Backing Services (internal only, no direct access)
| Category | Containers |
| Databases | calcom-db, jds-paperless-db, nextcloud-db, bayousafety-nextcloud-db, netbox-postgres-1, plane-db, onyx-relational_db-1 |
| Caches | paperless-redis, jds-paperless-redis, nextcloud-redis, bayousafety-nextcloud-redis, searxng-redis, plane-redis, onyx-cache-1, netbox-redis-1, netbox-redis-cache-1 |
| Onyx | onyx-api_server-1, onyx-web_server-1, onyx-background-1, onyx-inference_model_server-1, onyx-indexing_model_server-1, onyx-code-interpreter-1, onyx-index-1 (Vespa), onyx-opensearch-1, onyx-minio-1 |
| Plane | plane-api, plane-web, plane-space, plane-admin, plane-live, plane-bgworker, plane-beatworker, plane-mq (RabbitMQ), plane-minio |
| NetBox | netbox-netbox-worker-1 |
Quick Reference — Common Tech Tasks
| Task | Where |
| See / restart containers | Portainer https://192.168.50.10:9443 (or sudo docker ps) |
| Live logs of a service | Dozzle https://dozzle.silverwulf.org [TS] (or sudo docker logs <name>) |
| What's up / down | Uptime Kuma http://192.168.50.10:3002 |
| Verify a route / cert | Traefik https://traefik.silverwulf.work |
| DNS / LAN rewrites | AdGuard http://192.168.50.10:3080 |
| IP / rack / device data | NetBox https://netbox.silverwulf.com |
| Remote access to host | Tailscale → 100.84.81.43 (SSH or service ports) |
Compose stack paths: Most live under /home/silverwulf/ (portal, public-tools, nextcloud, netbox, leblanc-vaultwarden, etc.). Onyx is at /home/silverwulf/onyx/deployment and requires sudo for docker.
Alphawulf addendum last documented 2026-06-02.