88 lines
2.0 KiB
Markdown
88 lines
2.0 KiB
Markdown
# 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. |