The Ollama URL was leaking via:
- prose in /en/, /de/, /ja/, /es/, /fr/ docs (oracle, deployment,
local-testing, ai/module/{overview,embed,training})
- code blocks teaching users to curl the host directly
- .env.example, Dockerfile, docker-compose.yml defaults
- providers.mjs, translate-docs.mjs, build-oracle-index.mjs defaults
- LandingScripts.astro comment
- lora-runbook.md prose + SSH host
- the GET handler at /api/oracle which echoed `ollamaUrl` back to public callers
- the "Oracle is silent" fallback message at /api/oracle POST
Replacements:
- prose: "neuronetz.ai" → "your Ollama instance"
- example URLs in code blocks: https://api.neuronetz.ai → https://your-ollama-host.example
- code-level defaults: → http://localhost:11434 (Ollama's standard local port)
- GET /api/oracle: dropped the `ollamaUrl` field; provider + model still exposed
- runbook SSH host: neuronetz@cloud.neuronetz.ai → <gpu-user>@<gpu-host>
Production chat is unaffected: docs/.env (gitignored) on the production
host still pins OLLAMA_BASE_URL=https://api.neuronetz.ai. The only
change in the running container is that the GET handler no longer
echoes the URL.
analytics.neuronetz.ai (Umami tracking) is intentionally left intact —
it's a public, brand-owned subdomain meant to be visible.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
106 lines
3.8 KiB
YAML
106 lines
3.8 KiB
YAML
# =============================================================================
|
|
# Nibiru docs site — production compose for jwilder/nginx-proxy
|
|
#
|
|
# Two containers: one for the apex domain, one for the www. variant.
|
|
# jwilder/nginx-proxy + acme-companion don't accept comma-separated values
|
|
# on this host, so each hostname needs its own container with a single
|
|
# VIRTUAL_HOST + LETSENCRYPT_HOST. Both serve identical content from the
|
|
# same image.
|
|
#
|
|
# Default LLM backend: Ollama at https://your-ollama-host.example (your own
|
|
# instance). No paid API keys required for normal operation.
|
|
#
|
|
# Prereqs (one-time, on the host):
|
|
# docker network create nginx-proxy
|
|
#
|
|
# Bring up:
|
|
# docker compose up -d --build
|
|
#
|
|
# Update after a docs change:
|
|
# git pull && docker compose up -d --build
|
|
# =============================================================================
|
|
|
|
# Shared environment block — referenced by both services via YAML anchors so
|
|
# the Oracle/LLM/Anthropic config stays in lockstep across the two domains.
|
|
x-docs-shared-env: &docs-shared-env
|
|
# --- Oracle: LLM provider (default = your own Ollama on your Ollama instance) ---
|
|
LLM_PROVIDER: ${LLM_PROVIDER:-ollama}
|
|
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://localhost:11434}
|
|
OLLAMA_CHAT_MODEL: ${OLLAMA_CHAT_MODEL:-qwen2.5-coder:14b}
|
|
OLLAMA_EMBED_MODEL: ${OLLAMA_EMBED_MODEL:-nomic-embed-text}
|
|
EMBED_PROVIDER: ${EMBED_PROVIDER:-ollama}
|
|
|
|
# --- Optional fallbacks (only used if LLM_PROVIDER=anthropic / EMBED_PROVIDER=openai) ---
|
|
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
|
|
ANTHROPIC_MODEL: ${ANTHROPIC_MODEL:-claude-haiku-4-5-20251001}
|
|
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
|
OPENAI_EMBED_MODEL: ${OPENAI_EMBED_MODEL:-text-embedding-3-small}
|
|
|
|
ORACLE_TOP_K: ${ORACLE_TOP_K:-6}
|
|
ORACLE_MAX_TOKENS: ${ORACLE_MAX_TOKENS:-800}
|
|
|
|
HOST: 0.0.0.0
|
|
PORT: "4321"
|
|
|
|
# Healthcheck shared between both containers.
|
|
x-docs-healthcheck: &docs-healthcheck
|
|
test: ["CMD", "wget", "--quiet", "--spider", "http://127.0.0.1:4321/"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 20s
|
|
|
|
services:
|
|
# --- Apex: nibiru-framework.com -------------------------------------------
|
|
# Builds the image once. The www service below reuses the same tag.
|
|
docs:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
args:
|
|
# Used at build time only — to embed docs into the Oracle index.
|
|
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://localhost:11434}
|
|
OLLAMA_EMBED_MODEL: ${OLLAMA_EMBED_MODEL:-nomic-embed-text}
|
|
EMBED_PROVIDER: ${EMBED_PROVIDER:-ollama}
|
|
image: nibiru-framework/docs:latest
|
|
container_name: nibiru-docs
|
|
restart: unless-stopped
|
|
expose:
|
|
- "4321"
|
|
environment:
|
|
<<: *docs-shared-env
|
|
VIRTUAL_HOST: nibiru-framework.com
|
|
VIRTUAL_PORT: "4321"
|
|
VIRTUAL_PROTO: "http"
|
|
LETSENCRYPT_HOST: nibiru-framework.com
|
|
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-stephan.kasdorf@bittomine.com}
|
|
healthcheck: *docs-healthcheck
|
|
networks:
|
|
- nginx-proxy
|
|
|
|
# --- www. variant: www.nibiru-framework.com -------------------------------
|
|
# Same image as `docs`. Started after `docs` so the build is reused (Docker
|
|
# would otherwise build it again from scratch).
|
|
docs-www:
|
|
image: nibiru-framework/docs:latest
|
|
container_name: nibiru-docs-www
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- docs
|
|
expose:
|
|
- "4321"
|
|
environment:
|
|
<<: *docs-shared-env
|
|
VIRTUAL_HOST: www.nibiru-framework.com
|
|
VIRTUAL_PORT: "4321"
|
|
VIRTUAL_PROTO: "http"
|
|
LETSENCRYPT_HOST: www.nibiru-framework.com
|
|
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-stephan.kasdorf@bittomine.com}
|
|
healthcheck: *docs-healthcheck
|
|
networks:
|
|
- nginx-proxy
|
|
|
|
networks:
|
|
nginx-proxy:
|
|
external: true
|