- Reset master to upstream/main (16,697 commits) - Overlay 2,271 local-only files (skills, tools, workspace, configs, apps) - Restore IDENTITY.md and USER.md templates - Build verified, gateway running, Discord working Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
11 KiB
Host Service Documentation — 2026-02-23
Snapshot: 2026-02-23T07:44Z
Host: ubu-server-laptop (Tailscale: 100.101.151.46)
Uptime: 14 days (since Feb 9)
Kernel: Linux 6.17.0-14-generic
Disk: 144G / 468G used (33%) on /dev/nvme0n1p2
Memory: 6.3G / 15G used (9.1G available) — Swap: 594M / 4G
Load: 1.26, 0.61, 0.52
Runtimes
| Runtime | Version |
|---|---|
| Node.js | v22.22.0 |
| pnpm | 10.23.0 |
| Bun | 1.3.9 |
| Python | 3.12.3 |
| nginx | 1.24.0 |
| MariaDB | 10.11.14 |
| PostgreSQL | 16.11 |
1. OpenClaw Services
1.1 openclaw.service — Main Gateway
| Field | Value |
|---|---|
| Status | active (running) since 08:40 today |
| Enabled | yes |
| Port | 18789 (LAN bind) |
| User | alex |
| Working dir | /home/alex |
| ExecStart | /usr/bin/openclaw gateway --port 18789 --bind lan |
| Restart | always |
| Memory | ~1.7 GB |
| Version | 2026.2.21-2 |
| Channels | Discord (@James-Assistant) — enabled, configured, running |
Primary gateway instance. Binds to LAN so it's reachable from Tailscale peers. Runs as user alex with the globally installed openclaw binary.
Manage:
sudo systemctl restart openclaw
journalctl -u openclaw -f
1.2 openclaw-gateway.service — Secondary Gateway (openclaw2)
| Field | Value |
|---|---|
| Status | active (running) since 21:16 yesterday |
| Enabled | yes |
| User | openclaw2 |
| Working dir | /home/openclaw2/openclaw2 |
| ExecStart | /home/openclaw2/openclaw2/scripts/gateway-entrypoint.sh |
| Restart | on-failure (5s) |
| Memory | ~557 MB |
| LimitNOFILE | 65536 |
Secondary gateway running from the openclaw2 user's repo checkout via a custom entrypoint script.
Manage:
sudo systemctl restart openclaw-gateway
journalctl -u openclaw-gateway -f
1.3 openclaw2-gateway.service — Mike's Gateway (disabled/failed)
| Field | Value |
|---|---|
| Status | failed |
| Enabled | yes (but failing) |
| User | alex |
| Config | OPENCLAW_STATE_DIR=/home/alex/openclaw2/.openclaw |
| ExecStart | /usr/bin/openclaw gateway run |
| Restart | on-failure (5s) |
Configured for Mike's separate OpenClaw state dir. Currently failing — likely port conflict with openclaw.service (both target 18789).
1.4 openclaw-backup.service — Backup Gateway
| Field | Value |
|---|---|
| Status | inactive |
| Enabled | yes |
| Port | 18790 (force) |
| User | openclaw2 |
| ExecStart | /usr/bin/openclaw gateway run --port 18790 --force |
| Restart | on-failure (5s) |
Standby backup gateway on port 18790. Not currently running.
1.5 openclaw-dashboard.service — Usage Dashboard
| Field | Value |
|---|---|
| Status | active (running) since Feb 20 (3 days) |
| Enabled | yes |
| Port | 8888 |
| User | alex |
| Working dir | /opt/openclaw-dashboard |
| ExecStart | /usr/bin/node /opt/openclaw-dashboard/server.js |
| Restart | on-failure (5s) |
| Memory | ~29 MB |
| Disk | 312K |
| Security | NoNewPrivileges, PrivateTmp |
Web dashboard for monitoring OpenClaw usage metrics. Plain Node.js server, production mode.
Manage:
sudo systemctl restart openclaw-dashboard
journalctl -u openclaw-dashboard -f
2. Voice Surface
2.1 voice-surface.service
| Field | Value |
|---|---|
| Status | active (running) since 08:11 today |
| Enabled | yes |
| Port | 3030 (0.0.0.0, TLS) |
| User | alex |
| Working dir | tools/voice-surface (in clawd repo) |
| ExecStartPre | pnpm install --frozen-lockfile |
| ExecStart | pnpm start |
| Restart | on-failure (10s) |
| Memory | ~136 MB |
| TLS | cert/key from ~/.openclaw/credentials/voice-surface-tls/ |
Browser-based voice interface for OpenClaw. Runs with TLS enabled. Installs deps on each start to stay current.
Manage:
sudo systemctl restart voice-surface
journalctl -u voice-surface -f
3. Kanban Board
3.1 kanban-board.service
| Field | Value |
|---|---|
| Status | active (running) since 16:47 yesterday |
| Enabled | yes |
| Port | 5003 |
| User | alex |
| Working dir | /home/alex/kanban-board |
| ExecStart | python3 /home/alex/kanban-board/kanban_mariadb.py |
| Restart | always (5s) |
| Memory | ~26 MB |
| Database | MariaDB (see section 7.1) |
Python web app serving a task/kanban board backed by MariaDB.
Manage:
sudo systemctl restart kanban-board
journalctl -u kanban-board -f
4. Cold Case — Mordmysterium
4.1 coldcase.service
| Field | Value |
|---|---|
| Status | active (running) since 23:50 yesterday |
| Enabled | yes |
| Port | 3099 (backend API) |
| User | alex |
| Working dir | /opt/coldcase/backend |
| ExecStart | node with tsx loader → src/index.ts |
| Restart | always (3s) |
| Memory | ~57 MB |
| Disk | 76 MB |
| Depends on | mariadb.service |
| Database | MariaDB coldcase |
| AI provider | NVIDIA (configurable: OpenAI, Gemini) |
Murder mystery web game. Backend is TypeScript (tsx), frontend is static files served by nginx.
4.2 Nginx config (/etc/nginx/sites-enabled/coldcase)
:8080— frontend + API reverse proxy/api/*→ proxied to127.0.0.1:3099(SSE streaming enabled, 300s timeout)/→ static files from/opt/coldcase/frontend- Gzip enabled
Manage:
sudo systemctl restart coldcase
journalctl -u coldcase -f
# Frontend: edit /opt/coldcase/frontend/*
# Nginx: sudo nginx -t && sudo systemctl reload nginx
5. Kamoer Plant Watering System
5.1 kamoer-daemon.service — Bluetooth Daemon
| Field | Value |
|---|---|
| Status | active (running) since 16:48 yesterday |
| Enabled | yes |
| Port | 18788 (127.0.0.1) |
| User | alex |
| Working dir | /home/alex/kamoer-web |
| ExecStart | python3 pump_daemon.py |
| Restart | always (10s) |
| Memory | ~13 MB |
| Depends on | bluetooth.target |
Low-level Bluetooth daemon that communicates with the Kamoer dosing pump hardware.
5.2 kamoer-pump.service — Web Control Interface
| Field | Value |
|---|---|
| Status | active (running) since 16:48 yesterday |
| Enabled | yes |
| Ports | 5000 (kamoer_improved.py) + 5001 (start_kamoer.sh) |
| User | alex |
| Working dir | /home/alex/kamoer-web |
| ExecStart | start_kamoer.sh |
| Restart | always (10s) |
| Memory | ~27 MB |
| Logs | /home/alex/kamoer-web/kamoer.log |
| Security | NoNewPrivileges, PrivateTmp |
Web UI for scheduling and controlling plant watering pumps.
Manage:
sudo systemctl restart kamoer-daemon kamoer-pump
journalctl -u kamoer-pump -f
# Or: tail -f /home/alex/kamoer-web/kamoer.log
6. Nginx
6.1 nginx.service
| Field | Value |
|---|---|
| Status | active (running) |
| Enabled | yes |
| Version | 1.24.0 |
| Memory | ~13 MB |
| Restart | no (manual) |
Sites enabled:
coldcase—:8080reverse proxy + static frontend
Ports:
- 8080 → Cold Case
- 18790 → OpenClaw backup proxy (upstream)
Manage:
sudo nginx -t && sudo systemctl reload nginx
ls /etc/nginx/sites-enabled/
7. Databases
7.1 MariaDB (mariadb.service)
| Field | Value |
|---|---|
| Status | active |
| Version | 10.11.14 |
| Port | 3306 (127.0.0.1 only) |
| Memory | ~43 MB |
| Restart | on-abnormal |
Databases:
| Database | Used by |
|---|---|
coldcase |
Cold Case game |
kamoer_plants |
Kamoer watering system |
test |
Testing |
7.2 PostgreSQL (postgresql@16-main.service)
| Field | Value |
|---|---|
| Status | active |
| Version | 16.11 |
| Port | 5432 (127.0.0.1 only) |
| Memory | ~19 MB |
Databases:
| Database | Notes |
|---|---|
llm_council |
LLM council/evaluation data |
postgres |
Default |
7.3 Redis (redis-server.service)
| Field | Value |
|---|---|
| Status | active |
| Port | 6379 (localhost only) |
| Memory | ~3 MB |
| Restart | always |
| Auth | Required (password protected) |
8. AI / LLM
8.1 Ollama (ollama.service)
| Field | Value |
|---|---|
| Status | active |
| Port | 11434 (127.0.0.1 only) |
| Memory | ~522 MB |
| Restart | on-failure |
Loaded models:
| Model | Size |
|---|---|
qwen2.5:0.5b |
397 MB |
9. Docker
9.1 docker.service
| Field | Value |
|---|---|
| Status | active |
| Memory | ~92 MB |
| Restart | always |
Running containers:
| Container | Image | Status |
|---|---|---|
portainer_agent |
portainer/agent:2.20.3 | Up 3 days |
Stopped containers (2+ weeks):
ai-agent_tools-1,ai-open_webui-1,ai-code_server-1,ai-frontend-1,ai-backend-1,ai-ollama-1— AI stack (all stopped)james-redis— Created but never started- Old portainer agent replicas (exited)
10. Networking & Security
10.1 Tailscale (tailscaled.service)
| Field | Value |
|---|---|
| Status | active |
| Memory | ~82 MB |
| This host | ubu-server-laptop (100.101.151.46) |
Peers:
| Name | IP | OS | Status |
|---|---|---|---|
| ubu-server-laptop | 100.101.151.46 | linux | online (self) |
| pixel-10 | 100.115.32.19 | android | offline (25m ago) |
| raspii | 100.76.212.107 | linux | online |
| ubu | 100.124.249.93 | linux | online |
| ubugpu | 100.103.154.119 | linux | online |
10.2 Fail2ban (fail2ban.service)
| Field | Value |
|---|---|
| Status | active |
| Memory | ~32 MB |
| Jails | sshd (1 jail) |
10.3 SSH (ssh.service)
| Field | Value |
|---|---|
| Status | active |
| Port | 22 |
11. Port Map (complete)
| Port | Service | Bind | Public? |
|---|---|---|---|
| 22 | SSH | 0.0.0.0 | yes |
| 3030 | Voice Surface | 0.0.0.0 (TLS) | yes |
| 3099 | Cold Case backend | :: | yes |
| 3306 | MariaDB | 127.0.0.1 | no |
| 3456 | node (standalone, unknown) | 127.0.0.1 | no |
| 5000 | Kamoer improved (python) | 0.0.0.0 | yes |
| 5001 | Kamoer web (python) | 0.0.0.0 | yes |
| 5003 | Kanban board (python) | 0.0.0.0 | yes |
| 5432 | PostgreSQL | 127.0.0.1 | no |
| 6379 | Redis | 127.0.0.1 | no |
| 8080 | nginx (Cold Case frontend) | 0.0.0.0 | yes |
| 8888 | OpenClaw Dashboard | 0.0.0.0 | yes |
| 9001 | Portainer Agent | 0.0.0.0 | yes |
| 9443 | Docker Swarm | * | yes |
| 11434 | Ollama | 127.0.0.1 | no |
| 18788 | Kamoer daemon | 127.0.0.1 | no |
| 18789 | OpenClaw gateway (main) | 0.0.0.0 | yes |
| 18790 | nginx proxy (backup gw) | 0.0.0.0 | yes |
| 18792 | OpenClaw gateway (internal) | 127.0.0.1 | no |
| 18793 | Unknown | 127.0.0.1 | no |
12. Quick Reference — Service Management
# View status of all custom services
sudo systemctl status openclaw openclaw-gateway openclaw-dashboard voice-surface kanban-board coldcase kamoer-daemon kamoer-pump
# Restart a service
sudo systemctl restart <service-name>
# View logs (follow)
journalctl -u <service-name> -f
# View logs (last 100 lines)
journalctl -u <service-name> -n 100
# Enable/disable on boot
sudo systemctl enable <service-name>
sudo systemctl disable <service-name>
# Reload nginx config
sudo nginx -t && sudo systemctl reload nginx
# OpenClaw version + channels
openclaw --version
openclaw channels status