# Homelab Deployment ## Overview NexusAI is distributed across three nodes. Each node runs only the services appropriate for its hardware. ## Mini PC 1 — 192.168.0.81 Runs: Qdrant, Memory Service, Embedding Service ```bash ssh username@192.168.0.81 cd ~/nexusai docker compose -f docker-compose.mini1.yml up -d # Qdrant npm run memory npm run embedding ``` ## Mini PC 2 — 192.168.0.205 Runs: Gitea, Orchestration Service, Chat Client (via Caddy) ```bash ssh username@192.168.0.205 cd ~/gitea docker compose up -d # Gitea cd /opt/stacks/network docker compose up -d # Caddy, Authelia, and other network services cd ~/nexusai npm run orchestration ``` ## Main PC Runs: Ollama, Inference Service ```bash ollama serve npm run inference ``` ## Chat Client Deployment The chat client is a React + Vite app build to static files and served by Caddy on Mini PC 2 (Infrastructure node). It does not run as a Node process ```bash # On dev machine or Mini PC 2 after git pull cd ~/nexusAI/packages/chat-client npm run build # Output lands in packages/chat-client/dist/ # Caddy serves this directory directly via volume mount ``` Caddy config (`/opt/docker/caddy/Caddyfile`): ```caddy nexus.jellystorm.com { import authelia handle /chat* { reverse_proxy 192.168.0.205:4000 } handle /sessions* { reverse_proxy 192.168.0.205:4000 } handle { root * /srv/nexusai try_files {path} /index.html file_server } } ``` The Caddy container mounts the dist directory via Docker volume: ```yaml - /home/storme/nexusAI/packages/chat-client/dist:/srv/nexusai ``` > After adding or changing volume mounts, a full `docker compose down caddy && docker compose up -d caddy` > is required. Caddyfile-only changes only need `docker compose restart caddy`. ## Environment Files Each node needs a `.env` file in the relevant service package directory. These are not committed to git. See each service's documentation for required variables.