managarten/docs/PORT_SCHEMA.md
Till JS 4cb1bc1827 fix(mana-voice-bot): move default port 3050 → 3024 + Windows GPU deployment notes
mana-voice-bot's source default was 3050, which collided with mana-sync.
Today the collision is latent (voice-bot isn't deployed anywhere), but
sooner or later someone is going to start it on a host that's already
running mana-sync and the second one will refuse to bind. Moving to
3024 puts it inside the AI/ML port range alongside its dependencies
(stt 3020, tts 3022, image-gen 3023, llm 3025) and away from sync.

Updated:
- app/main.py — PORT default 3050 → 3024
- start.sh, setup.sh — same fix in the example commands
- CLAUDE.md — full rewrite. Old version described "Mac Mini deployment"
  with launchd; the new version explicitly says "not deployed yet" and
  documents the seven concrete steps to deploy on the Windows GPU box
  alongside the other AI services (Scheduled Task, service.pyw, .env,
  firewall rule, cloudflared route, WINDOWS_GPU_SERVER_SETUP.md update).

docs/WINDOWS_GPU_SERVER_SETUP.md:
- Added the missing ManaVideoGen scheduled task to all four
  Start-ScheduledTask snippets — video-gen has been running on the
  Windows GPU but the doc had never picked it up.
- Added a "mana-video-gen (Port 3026)" service section parallel to the
  existing image-gen one, with venv path, repo pointer, model, etc.
- Added a repo-pendants table mapping C:\mana\services\<svc>\ to the
  corresponding services/<svc>/ directory in the repo, plus a note that
  changes should flow repo→Windows, not the other way around.

docs/PORT_SCHEMA.md:
- Reconciled the warning block with the post-cleanup reality: no more
  active or latent port collisions (image-gen ↔ video-gen and
  voice-bot ↔ sync are both resolved). Listed the actual ports per host
  with public URLs. Kept the planned-vs-actual disclaimer for the
  services that still don't match the aspirational ranges (mana-credits
  3061 vs planned 3002, etc).
2026-04-08 13:14:57 +02:00

7.7 KiB
Raw Blame History

Port Schema

⚠️ PARTIALLY ASPIRATIONAL. The clean range layout below (30003009 core, 30103019 infra, 30203029 AI/ML, …) was drafted 2026-03-28 as a target state. Many services do match it; many don't. Authoritative per-service ports live in each services/*/CLAUDE.md alongside the source defaults in app/main.py / config.ts / etc.

Real ports today (2026-04-08)

Windows GPU server (192.168.178.11):

  • mana-stt 3020 (Scheduled Task ManaSTT, public: gpu-stt.mana.how)
  • mana-tts 3022 (Task ManaTTS, public: gpu-tts.mana.how)
  • mana-image-gen 3023 (Task ManaImageGen, public: gpu-img.mana.how)
  • mana-llm 3025 (Task ManaLLM, public: gpu-llm.mana.how)
  • mana-video-gen 3026 (Task ManaVideoGen, public: gpu-video.mana.how)
  • Ollama 11434 (public: gpu-ollama.mana.how)

Mac Mini (production):

  • mana-auth 3001
  • mana-media 3015
  • mana-search 3021 (overlaps with the planned range slot, not a host collision since search runs on Mac Mini and stt runs on the GPU box)
  • mana-crawler 3023 (same — Mac Mini, no host collision with image-gen on GPU)
  • mana-notify 3040
  • mana-sync 3050
  • mana-credits 3061, mana-user 3062, mana-subscriptions 3063, mana-analytics 3064, mana-events 3065

Not deployed: mana-voice-bot (default port 3024, no scheduled task, no cloudflared route, no launchd plist).

No production port collisions exist today. The two latent collisions that PORT_SCHEMA.md previously warned about (image-gen ↔ video-gen on 3026, voice-bot ↔ sync on 3050) were resolved on 2026-04-08 by:

  • Moving the only mana-image-gen to be the Windows-only diffusers variant on port 3023 (the Mac flux2.c variant was deleted)
  • Moving mana-voice-bot's source default from 3050 to 3024

Some services still don't match the planned range layout below (mana-credits is at 3061 not 3002, mana-user 3062 not 3004, etc). Either execute the move and update this doc, or accept reality and rewrite the planned tables to reflect what's actually running.

Originally drafted: 2026-03-28 Reality reconciled: 2026-04-08

Principles

  1. Each range has a clear purpose (100 ports per range)
  2. Backend 30xx and Frontend 50xx use matching last digits where possible
  3. No conflicts - every port assigned exactly once
  4. Room for growth in each range

3000-3009: Core Platform Services

Port Service Runtime Description
3001 mana-auth Hono/Bun Authentication, JWT, sessions
3002 mana-credits Go Credit system, billing
3003 mana-subscriptions Go Stripe subscriptions
3004 mana-user Go User profiles, settings
3005 mana-analytics Go Usage analytics, DuckDB
3006-3009 (reserved)

3010-3019: Core Infrastructure Services

Port Service Runtime Description
3010 mana-sync Go Local-first data sync (WebSocket + HTTP)
3011 mana-media NestJS Content-addressable storage, thumbnails
3012 mana-search Go Web search via SearXNG
3013 mana-notify Go Notifications (email, push, Matrix)
3014 mana-crawler Go Web crawler, content extraction
3015 mana-landing-builder NestJS Org landing page builder
3016 mana-api-gateway Go API keys, rate limiting, usage tracking
3017-3019 (reserved)

3020-3029: AI/ML Services

Port Service Runtime Description
3020 mana-llm Python LLM abstraction (Ollama, OpenRouter)
3021 mana-stt Python Speech-to-Text (Whisper)
3022 mana-tts Python Text-to-Speech (Kokoro, Piper)
3023 mana-image-gen Python Image generation (FLUX)
3024 mana-voice-bot Python Voice-to-voice assistant
3025-3029 (reserved)

3030-3059: App Compute Servers

Only apps that need server-side compute (AI, external APIs, file operations). Pure CRUD apps use mana-sync directly.

Port Service Runtime Description
3030 chat-server Hono/Bun AI chat, streaming, spaces
3031 todo-server Hono/Bun RRULE expansion, reminders
3032 calendar-server Hono/Bun CalDAV sync, Google Calendar, notifications
3033 contacts-server Hono/Bun Google Contacts, vCard import/export
3034 storage-server Hono/Bun S3 file ops, versioning, shares
3035 picture-server Hono/Bun Replicate AI, generation orchestration
3036 cards-server Hono/Bun AI card generation
3037 mukke-server Hono/Bun Audio processing, BPM, ID3 tags
3038 nutriphi-server Hono/Bun Gemini meal analysis
3039 planta-server Hono/Bun Gemini plant analysis
3040 presi-server Hono/Bun Share links
3041-3059 (reserved)

4000-4099: Matrix/Chat Stack

Port Service Description
4000 synapse Matrix homeserver
4001 mana-matrix-bot Go bot (health/metrics)
4010 element-web Element web client
4011 matrix-web SvelteKit Matrix client
4400 landings Nginx static landing pages

5000-5059: Web Frontends (SvelteKit)

Port Service Corresponds to Server
5000 mana-web Hub/Dashboard
5010 chat-web 3030 chat-server
5011 todo-web 3031 todo-server
5012 calendar-web 3032 calendar-server
5013 clock-web (local-first only)
5014 contacts-web 3033 contacts-server
5015 storage-web 3034 storage-server
5016 presi-web 3040 presi-server
5017 nutriphi-web 3038 nutriphi-server
5018 zitare-web (local-first only)
5019 photos-web (local-first + mana-media)
5020 skilltree-web (local-first only)
5021 picture-web 3035 picture-server
5022 citycorners-web (local-first only)
5023 cards-web 3036 cards-server
5024 mukke-web 3037 mukke-server
5025 inventar-web (local-first only)
5026 context-web (local-first only)
5027 questions-web (local-first only)
5028 planta-web 3039 planta-server
5029 moodlit-web (future)
5030-5049 (reserved)

5050-5059: Playground/Dev Tools

Port Service Description
5050 llm-playground LLM testing UI

5100-5199: Games

Port Service Description
5100 whopixels Pixel art game

8000-8099: Monitoring Dashboards

Port Service Description
8000 grafana Metrics dashboards
8010 umami Web analytics
8020 glitchtip Error tracking

9000-9199: Infrastructure & Exporters

Port Service Description
5432 postgres PostgreSQL
6379 redis Redis cache
9000 minio (S3 API) Object storage
9001 minio (Console) MinIO admin UI
9090 victoriametrics Metrics storage
9091 pushgateway Deploy metrics
9093 alertmanager Alert routing
9095 alert-notifier Matrix alert bridge
9100 node-exporter Host metrics
9110 cadvisor Container metrics
9121 redis-exporter Redis metrics
9187 postgres-exporter Postgres metrics

SearXNG (Internal Only)

Port Service Description
8080 searxng Meta-search (not exposed to host)

Adding a New Service

  1. Pick the next free port in the appropriate range
  2. Update this document
  3. Update docker-compose.macmini.yml
  4. Update scripts/generate-env.mjs if the service has a dev env
  5. Update docker/prometheus/prometheus.yml if the service exposes metrics