# homeai-kit-test A full local AI stack for personal homelab use. Bundles Ollama (local LLM inference), Open WebUI (chat interface), ChromaDB (vector database), SearXNG (private search), and n8n (workflow automation) into a single Docker Compose deployment. This is a test/evaluation deployment of the **HomeAI Kit** stack on the Linux server. ## Stack ### Core Services (always started) | Service | Container | Port | Description | |---------|-----------|------|-------------| | Ollama | `homeai-ollama` | `11435` | Local LLM inference server | | Open WebUI | `homeai-open-webui` | `3000` | Chat UI connected to Ollama | | ChromaDB | `homeai-chromadb` | `8100` | Vector database (token-auth enabled) | | SearXNG | `homeai-searxng` | `8080` | Private meta-search engine | | PostgreSQL | `homeai-postgres` | `5432` | Database backend for n8n | | n8n | `homeai-n8n` | `5678` | Workflow automation | ### Optional Services (`--profile extras`) | Service | Container | Port | Description | |---------|-----------|------|-------------| | LibreTranslate | `homeai-libretranslate` | `5000` | ML translation API | | Redis | `homeai-redis` | `6379` | Caching layer | | ChromaDB Admin | `homeai-chromadb-admin` | `3002` | Vector DB admin UI | ## Running ```bash # Core stack only docker compose up -d # Core + optional extras docker compose --profile extras up -d # Stop everything docker compose down ``` ## Setup ```bash cp .env.example .env # Edit .env — at minimum change POSTGRES_PASSWORD and CHROMA_SERVER_AUTHN_CREDENTIALS ``` After startup, pull an LLM model: ```bash docker exec homeai-ollama ollama pull llama3.2:3b # Or use the helper script: ./scripts/pull-models.sh llama3.2:3b ``` Then open `http://localhost:3000` to create your Open WebUI admin account. ## Configuration All ports and credentials are set in `.env`. Key settings: | Variable | Default | Description | |----------|---------|-------------| | `OLLAMA_PORT` | `11435` | Ollama API port | | `WEBUI_PORT` | `3000` | Open WebUI port | | `POSTGRES_PASSWORD` | *(required)* | PostgreSQL password | | `N8N_PORT` | `5678` | n8n workflow UI | | `CHROMA_PORT` | `8100` | ChromaDB port | | `CHROMA_SERVER_AUTHN_CREDENTIALS` | *(required)* | ChromaDB auth token | | `SEARXNG_PORT` | `8080` | SearXNG port | ## Stacks The `stacks/` directory contains modular sub-stacks for selective deployment: | Stack | Description | |-------|-------------| | `stacks/llm/` | Ollama + Open WebUI only | | `stacks/rag/` | ChromaDB + SearXNG for RAG pipelines | | `stacks/automation/` | n8n + PostgreSQL | | `stacks/extras/` | LibreTranslate, Redis, ChromaDB Admin | ## SearXNG Config SearXNG settings are in `config/searxng/settings.yml` and `config/searxng/limiter.toml`. These are mounted read-only into the container. ## Data Persistence All service data is stored in named Docker volumes: | Volume | Service | |--------|---------| | `ollama_data` | Downloaded LLM models | | `openwebui_data` | Chat history, users | | `chromadb_data` | Vector embeddings | | `postgres_data` | n8n workflows | | `n8n_data` | n8n credentials | | `libretranslate_data` | Translation models | ## Deployment Runs on `192.168.0.241` (albert-MacBookPro Linux server). **Docker Compose:** `/opt/docker/homeai-kit-test/docker-compose.yml` | Service | URL | |---------|-----| | Open WebUI | `http://192.168.0.241:3000` | | n8n | `http://192.168.0.241:5678` | | Ollama API | `http://192.168.0.241:11435` | | SearXNG | `http://192.168.0.241:8080` | | ChromaDB | `http://192.168.0.241:8100` | > **Note:** This is a separate Ollama instance from the one used by ScraperControl (which runs as a systemd service on port `11434`). This stack uses port `11435` to avoid conflict.