docs: update FreeCAD MCP README to document dual-service architecture
This commit is contained in:
141
docs/ouranos.md
141
docs/ouranos.md
@@ -13,7 +13,50 @@ Infrastructure-as-Code project managing the **Ouranos Lab** — a development sa
|
||||
|
||||
> **DNS Domain**: Incus resolves containers via the `.incus` domain suffix (e.g., `oberon.incus`, `portia.incus`). IPv4 addresses are dynamically assigned — always use DNS names, never hardcode IPs.
|
||||
|
||||
---
|
||||
## Project Numbers
|
||||
- External Apps
|
||||
- Well known: Postgresl, ssh, web, prometheus
|
||||
- 220: External Apps (legacy)
|
||||
- 290: External App 1
|
||||
- 299: External App 9
|
||||
- Django Projects:
|
||||
- 221: Zelus
|
||||
- 222: Angelia
|
||||
- 224: Athena
|
||||
- 225: Kairos
|
||||
- 226: Icarlos
|
||||
- 227: MCP Switchboard (227), Spelunker (228), Peitho (229), Mnemosyne (230)
|
||||
- FastAgent Projects:
|
||||
- 240: Pallas Iolaus
|
||||
- 241: Pallas Kottos
|
||||
- 242: Pallas Mentor
|
||||
- FastAPI Projects:
|
||||
- 200: Daedalus
|
||||
- 201: Arke
|
||||
- 202: Kernos
|
||||
- 203: Rommie
|
||||
- 204: Orpheus
|
||||
- 205: Periplus
|
||||
- 206: Nike
|
||||
- 207: Stentor
|
||||
- 208: Argos
|
||||
- 209: Hecate
|
||||
- 210: Rhema
|
||||
- 211: Synesis
|
||||
|
||||
## Port Numbering
|
||||
|
||||
Well-known ports running as a service may be used: Postgresql 5432, Prometheus Metrics 9100.
|
||||
|
||||
However inside a docker project, the number plan needs to be followed to avoid port conflicts and confusion:
|
||||
XXXYZ
|
||||
XXX Project Number or 290-299 for external project (host specific)
|
||||
Y Service: 0 reserved, 1-4 flexible, 5 database, 6 MCP, 7 API, 8 Web App, 9 Prometheus metrics
|
||||
Z Instance: The running instance of this app on the same host, starting at 1. May also be used to handle exceptions.
|
||||
|
||||
255 Incus port forwarding: Ports in ths range are forwarded from the Incus host to Incus containers (defined in Terraform), but HAProxy through Titania
|
||||
|
||||
514ZZ is the syslog port. Docker containers send their syslog to an Alloy syslog collector port. ZZ is the application instance, they just need to be different on the same host and increment from 01.
|
||||
|
||||
## Uranian Host Architecture
|
||||
|
||||
@@ -40,12 +83,6 @@ This is the host that runs Python projects in the Ouranos sandbox.
|
||||
It has an RDP server and is generally where application development happens.
|
||||
Each project has a number that is used to determine port numbers.
|
||||
|
||||
- Docker engine
|
||||
- JupyterLab (port 22071 via OAuth2-Proxy)
|
||||
- Gitea Runner (CI/CD agent)
|
||||
- Django Projects: Zelus (221), Angelia (222), Athena (224), Kairos (225), Icarlos (226), MCP Switchboard (227), Spelunker (228), Peitho (229), Mnemosyne (230)
|
||||
- FastAgent Projects: Pallas (240)
|
||||
- FastAPI Projects: Daedalus (200), Arke (201) Kernos (202), Rommie (203), Orpheus (204), Periplus (205), Nike (206), Stentor (207), Argos (208),
|
||||
|
||||
### caliban — Agent Automation
|
||||
|
||||
@@ -53,20 +90,19 @@ Autonomous computer agent learning through environmental interaction.
|
||||
|
||||
- Docker engine
|
||||
- Agent S MCP Server (MATE desktop, AT-SPI automation)
|
||||
- Kernos MCP Shell Server (port 22062)
|
||||
- Rommie MCP Server (port 20361) — agent-to-agent GUI automation via Agent S
|
||||
- FreeCAD Robust MCP Server (port 22061) — CAD automation via FreeCAD XML-RPC
|
||||
- Kernos MCP Shell Server
|
||||
- Rommie MCP Server — agent-to-agent GUI automation via Agent S
|
||||
- FreeCAD Robust MCP Server — CAD automation via FreeCAD XML-RPC
|
||||
- GPU passthrough
|
||||
- RDP access (port 25521)
|
||||
- RDP access
|
||||
|
||||
### oberon — Container Orchestration & Dockerized Shared Services
|
||||
|
||||
King of the Fairies orchestrating containers and managing MCP infrastructure.
|
||||
|
||||
- Docker engine
|
||||
- MCP Switchboard (port 22781) — Django app routing MCP tool calls
|
||||
- RabbitMQ message queue
|
||||
- smtp4dev SMTP test server (port 22025)
|
||||
- smtp4dev SMTP test server
|
||||
|
||||
### portia — Relational Database
|
||||
|
||||
@@ -78,10 +114,7 @@ Intelligent and resourceful — the reliability of relational databases.
|
||||
### ariel — Graph Database
|
||||
|
||||
Air spirit — ethereal, interconnected nature mirroring graph relationships.
|
||||
|
||||
- Neo4j 5.26.0 (Docker)
|
||||
- HTTP API: port 25554
|
||||
- Bolt: port 7687 (reached as `ariel.incus:7687` on the internal network)
|
||||
- Neo4j (Docker)
|
||||
|
||||
### umbriel — Graph Database (Mnemosyne)
|
||||
|
||||
@@ -91,20 +124,18 @@ instance so Mnemosyne's `Library`/`Collection`/`Item`/`Chunk`/`Concept` labels,
|
||||
vector indexes, and schema migrations can't collide with another tenant's
|
||||
graph on Ariel.
|
||||
|
||||
- Neo4j 5.26.0 (Docker)
|
||||
- HTTP Browser: port 25555
|
||||
- Bolt: port 7687 (reached as `umbriel.incus:7687` on the internal network)
|
||||
- Neo4j (Docker)
|
||||
|
||||
### miranda — MCP Docker Host
|
||||
|
||||
Curious bridge between worlds — hosting MCP server containers.
|
||||
|
||||
- Docker engine (API exposed on port 2375 for MCP Switchboard)
|
||||
- MCPO OpenAI-compatible MCP proxy 22071
|
||||
- Argos MCP Server — web search via SearXNG (port 20861)
|
||||
- Grafana MCP Server (port 22063)
|
||||
- Neo4j MCP Server (port 22064)
|
||||
- Gitea MCP Server (port 22062)
|
||||
- Docker engine
|
||||
- MCPO OpenAI-compatible MCP
|
||||
- Argos MCP Server — web search via SearXNG
|
||||
- Grafana MCP Server
|
||||
- Neo4j MCP Server
|
||||
- Gitea MCP Server
|
||||
|
||||
### prospero — Observability Stack
|
||||
|
||||
@@ -121,11 +152,9 @@ Master magician observing all events.
|
||||
|
||||
Witty and resourceful moon for PHP, Go, and Node.js runtimes.
|
||||
|
||||
- SearXNG privacy search (port 22083, behind OAuth2-Proxy)
|
||||
- Gitea self-hosted Git (port 22082, SSH on 22022)
|
||||
- LobeChat AI chat interface (port 22081)
|
||||
- Nextcloud file sharing and collaboration (port 22083)
|
||||
- AnythingLLM document AI workspace (port 22084)
|
||||
- SearXNG privacy search
|
||||
- Gitea self-hosted Git
|
||||
- Nextcloud file sharing and collaboration
|
||||
- Jellyfin media server (port 22086, NVIDIA transcoding, Casdoor SSO)
|
||||
- Nextcloud data on dedicated Incus storage volume
|
||||
- Open WebUI LLM interface (port 22088, PostgreSQL backend on Portia
|
||||
@@ -135,7 +164,7 @@ Witty and resourceful moon for PHP, Go, and Node.js runtimes.
|
||||
|
||||
Original magical power wielding language magic.
|
||||
|
||||
- Arke LLM API Proxy (port 25540)
|
||||
- Arke LLM API Proxy
|
||||
- Multi-provider support (OpenAI, Anthropic, etc.)
|
||||
- Session management with Memcached
|
||||
- Database backend on Portia
|
||||
@@ -144,7 +173,7 @@ Original magical power wielding language magic.
|
||||
|
||||
Queen of the Fairies managing access control and authentication.
|
||||
|
||||
- HAProxy 3.x with TLS termination (port 443)
|
||||
- HAProxy 3.x with TLS termination
|
||||
- Let's Encrypt wildcard certificate via certbot DNS-01 (Namecheap)
|
||||
- HTTP to HTTPS redirect (port 80)
|
||||
- Gitea SSH proxy (port 22022)
|
||||
@@ -153,21 +182,6 @@ Queen of the Fairies managing access control and authentication.
|
||||
|
||||
---
|
||||
|
||||
## Port Numbering
|
||||
|
||||
Well-known ports running as a service may be used: Postgresql 5432, Prometheus Metrics 9100.
|
||||
|
||||
However inside a docker project, the number plan needs to be followed to avoid port conflicts and confusion:
|
||||
XXXYZ
|
||||
XXX Project Number or 220 for external project
|
||||
Y Service: 0 reserved, 1-4 flexible, 5 database, 6 MCP, 7 API, 8 Web App, 9 Prometheus metrics
|
||||
Z Instance: The running instance of this app on the same host, starting at 1. May also be used to handle exceptions.
|
||||
|
||||
255 Incus port forwarding: Ports in ths range are forwarded from the Incus host to Incus containers (defined in Terraform)
|
||||
|
||||
514ZZ is the syslog port. Docker containers send their syslog to an Alloy syslog collector port. ZZ is the application instance, they just need to be different on the same host and increment from 01.
|
||||
|
||||
---
|
||||
|
||||
## Application Conventions
|
||||
|
||||
@@ -256,36 +270,9 @@ Titania provides TLS termination and reverse proxy for all services.
|
||||
- **HTTP**: port 80 (redirects to HTTPS)
|
||||
- **Certificate**: Let's Encrypt wildcard via certbot DNS-01
|
||||
|
||||
### Route Table
|
||||
### Subdomains
|
||||
|
||||
| Subdomain | Backend | Service |
|
||||
|-----------|---------|---------|
|
||||
| `ouranos.helu.ca` (root) | puck.incus:22281 | Angelia (Django) |
|
||||
| `alertmanager.ouranos.helu.ca` | prospero.incus:443 (SSL) | AlertManager |
|
||||
| `angelia.ouranos.helu.ca` | puck.incus:22281 | Angelia (Django) |
|
||||
| `anythingllm.ouranos.helu.ca` | rosalind.incus:22084 | AnythingLLM |
|
||||
| `arke.ouranos.helu.ca` | sycorax.incus:25540 | Arke LLM Proxy |
|
||||
| `athena.ouranos.helu.ca` | puck.incus:22481 | Athena (Django) |
|
||||
| `gitea.ouranos.helu.ca` | rosalind.incus:22082 | Gitea |
|
||||
| `grafana.ouranos.helu.ca` | prospero.incus:443 (SSL) | Grafana |
|
||||
| `hass.ouranos.helu.ca` | oberon.incus:8123 | Home Assistant |
|
||||
| `id.ouranos.helu.ca` | titania.incus:22081 | Casdoor SSO |
|
||||
| `jellyfin.ouranos.helu.ca` | rosalind.incus:22086 | Jellyfin |
|
||||
| `icarlos.ouranos.helu.ca` | puck.incus:22681 | Icarlos (Django) |
|
||||
| `jupyterlab.ouranos.helu.ca` | puck.incus:22071 | JupyterLab (OAuth2-Proxy) |
|
||||
| `kairos.ouranos.helu.ca` | puck.incus:22581 | Kairos (Django) |
|
||||
| `lobechat.ouranos.helu.ca` | rosalind.incus:22081 | LobeChat |
|
||||
| `loki.ouranos.helu.ca` | prospero.incus:443 (SSL) | Loki |
|
||||
| `mcp-switchboard.ouranos.helu.ca` | oberon.incus:22781 | MCP Switchboard |
|
||||
| `nextcloud.ouranos.helu.ca` | rosalind.incus:22083 | Nextcloud |
|
||||
| `openwebui.ouranos.helu.ca` | oberon.incus:22088 | Open WebUI |
|
||||
| `peitho.ouranos.helu.ca` | puck.incus:22981 | Peitho (Django) |
|
||||
| `periplus.ouranos.helu.ca` | puck.incus:20681 | Periplus (FastAPI + MCP via nginx) |
|
||||
| `pgadmin.ouranos.helu.ca` | prospero.incus:443 (SSL) | PgAdmin 4 |
|
||||
| `prometheus.ouranos.helu.ca` | prospero.incus:443 (SSL) | Prometheus |
|
||||
| `searxng.ouranos.helu.ca` | oberon.incus:22073 | SearXNG (OAuth2-Proxy) |
|
||||
| `smtp4dev.ouranos.helu.ca` | oberon.incus:22085 | smtp4dev |
|
||||
| `spelunker.ouranos.helu.ca` | puck.incus:22881 | Spelunker (Django) |
|
||||
Refer to the Ansible Titania host inventory (`inventory/host_vars/titania.incus.yml`) for current backend routing configuration.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user