Skip to content

Latest commit

 

History

History
106 lines (72 loc) · 3.28 KB

File metadata and controls

106 lines (72 loc) · 3.28 KB

Deploy

Single-compose, self-hosted, LAN-only. Assumes Docker + Docker Compose v2 on the target machine.

One-time setup

git clone <repo>
cd overtchat
cp .env.example .env
echo "BETTER_AUTH_SECRET=$(openssl rand -hex 32)" >> .env
echo "SEARXNG_SECRET=$(openssl rand -hex 32)" >> .env

Edit .env:

  • BETTER_AUTH_URL — the URL the browser will hit (scheme + host + port). For LAN access from other devices, set it to your host's LAN IP, e.g. http://192.168.1.50:4718.

Then:

docker compose up -d --build

First boot takes ~30s because the Kokoro TTS container downloads its model. Subsequent boots are fast.

Open the URL. First user signs up → becomes admin. Add more users from /settings/users.

Development

Run the app on the host and Redis in Docker:

npm install
docker compose -f compose.yml -f compose.dev.yml up -d redis
npm run dev

Open http://localhost:4717. Add searxng or kokoro to the Compose command when working on search or text-to-speech.

Deploying updates

git pull
docker compose up -d --build

Compose only recreates the container if the image changed. Migrations run automatically on boot. Data in the overtchat-data volume persists across rebuilds.

Pointing at your LLM

The app container makes the upstream LLM calls, so the base URL you set in Settings → API endpoint needs to be reachable from inside the container, not from your browser.

  • LLM running on the host (not in docker): use http://host.docker.internal:<port>/v1. Baked into compose.yml via extra_hosts, works on Linux / macOS / Windows.
  • Public provider (OpenAI / Groq / etc.): use the provider's base URL + API key.

Reusing sidecars

SearXNG and Kokoro are bundled by default. To point the app at existing services, set container-reachable URLs in .env:

OVERTCHAT_SEARXNG_URL=http://host.docker.internal:8088
OVERTCHAT_KOKORO_URL=http://host.docker.internal:8880
OVERTCHAT_STT_URL=http://host.docker.internal:5092

This changes where the app connects. To also stop the bundled containers from starting, add this to your local compose.override.yml:

services:
  searxng:
    profiles: ["disabled"]
  kokoro:
    profiles: ["disabled"]

Docker Compose loads compose.override.yml automatically; this repo ignores it. If you already use that file for local networks or other overrides, merge these service entries into it.

Then run the usual command:

docker compose up -d

Use host.docker.internal for services running on the Docker host, or a LAN/container URL for services running elsewhere.

Common ops

# Tail logs
docker compose logs -f app

# Stop everything
docker compose down

# Backup the DB (safe while running)
docker compose exec app sqlite3 /app/data/chat.db ".backup /app/data/backup.db"
docker compose cp app:/app/data/backup.db ./backup.db

Troubleshooting

  • curl -I http://localhost:4718 returns 307 — healthy (redirect to /login).
  • Login succeeds, next page redirects back to loginBETTER_AUTH_URL mismatch with what the browser sees. Fix in .env, then docker compose up -d.
  • Port already in use — change APP_PORT in .env.
  • Schema errors after pull — you didn't rebuild. docker compose up -d --build.