# ============================================================================= # 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