Quick Start#

This page takes you from a clean machine to a running DEEIX Chat instance you can sign in to. Start with the lightweight profile, then move to PostgreSQL and Redis before you open it to real users.

Before you start#

ItemRequirement
Container installDocker Engine with Docker Compose v2
Local developmentNode.js 20.9+, pnpm 10.17.0, Go 1.26.8, and a local PostgreSQL and Redis
Config filedeploy/config.yaml, copied from a profile template
SecretsReplace security.jwt_secret and security.data_encryption_key before any public deployment

terminal

Choose an installation profile#

All Docker assets live in deploy/. You can copy that directory to a server without the application source. Run every compose command from inside deploy/.

ProfileUse caseTemplateCompose fileDependencies
LightweightLocal evaluation, personal use, small single-node deploymentsdeploy/config.sqlite.example.yamldeploy/docker-compose.sqlite.ymlApp only, SQLite + sqlite-vec + in-memory cache
DefaultPostgreSQL and Redis already existdeploy/config.example.yamldeploy/docker-compose.ymlApp only
FullSingle machine running app, PostgreSQL, and Redisdeploy/config.full.example.yamldeploy/docker-compose.full.ymlApp, PostgreSQL, Redis

1. Lightweight installation (SQLite)#

The lightweight profile starts only the app container. Data and vector indexes use SQLite, and the cache runs in process. Use it to evaluate the product or host a small single-node instance.

terminal

Open the service:

ServiceURL
Web apphttp://localhost:8080
Livenesshttp://localhost:8080/healthz
Readinesshttp://localhost:8080/readyz
Versionhttp://localhost:8080/api/v1/version
Swaggerhttp://localhost:8080/swagger/index.html

The template sets app.env: dev, so Swagger is enabled. Before a public deployment, set app.env: prod, replace the two secrets, and set the public URLs and CORS origins.

SQLite + memory cache is single-process only. Use PostgreSQL + Redis for multi-node or high-concurrency deployments.

Use a local image#

The default image is ghcr.io/deeix-ai/deeix-chat:latest. Build a local image from the repository root, then select it:

terminal

2. Default installation (external PostgreSQL + Redis)#

Use this profile when PostgreSQL and Redis are managed outside the compose stack. Set the addresses to values the container can reach. If the services run on the Docker host, host.docker.internal is usually the right hostname.

terminal

docker-compose.yml starts only the app container. Do not add matching environment values unless you intend them to override config.yaml.

3. Full installation (PostgreSQL + Redis containers)#

Use this profile to start the app, PostgreSQL, and Redis together on one machine.

terminal

docker-compose.full.yml sets POSTGRES_DSN, REDIS_ADDR, REDIS_USERNAME, and REDIS_PASSWORD in the app container. These environment variables override the matching values in config.yaml so the app connects to the bundled services.

Check the containers:

terminal

4. Local development#

Local development runs the frontend and backend from the repository. The default config connects to a local PostgreSQL and Redis, so start those first.

terminal

make dev starts the workspace dev tasks. To run only the API and the web app, run make api and make web in two terminals. make help lists every target.

ServiceURL
Frontendhttp://localhost:3000
APIhttp://localhost:8080
Livenesshttp://localhost:8080/healthz
Readinesshttp://localhost:8080/readyz
Versionhttp://localhost:8080/api/v1/version
Swaggerhttp://localhost:8080/swagger/index.html

Confirm apps/web/.env.local points at the backend:

env

5. Separated deployment#

Use separated deployment when the frontend and API have different public origins, for example https://chat.example.com and https://api.example.com. Align the frontend build variable, the backend public URLs, and CORS, then read Configuration before release.

terminal

The static output is apps/web/out. Serve it from a CDN or static server, or point server.frontend_dist_dir at it so the Go service serves it.

Startup checks#

terminal

CheckExpected resultLook at first when it fails
Liveness{"status":"ok",...}Config parsing, port conflicts
ReadinessReady responseDatabase and cache connections
Config mount/app/config.yaml existsWorking directory, volume path, permissions
Startup logsNo migration or initialization errorsDatabase version, secret length, environment overrides

First login#

If the database has no superadmin, the backend creates one on first startup and prints the password once.

ItemValue
Initial usernameadmin
Initial passwordSearch the backend startup logs for bootstrap superadmin created and read the password field.
First sign-inThe onboarding requires a new username and password, and offers 2FA setup.
After onboardingSign in again with the new credentials, then enter the admin console.

The onboarding walks through these steps:

  1. Welcome and interface language.
  2. Account: set the new administrator username and password.
  3. Two-factor authentication: bind an authenticator, or skip.
  4. Theme preset.
  5. Personalization: timezone and color mode.
  6. Ready: review recovery codes if 2FA was enabled, then sign in again.

If a superadmin already exists, the service does not create or print an initial password again. Credentials are not managed through config.yaml.

Optional file processing services#

Document extraction and OCR are optional. Start a service only when you enable the matching capability in the admin console. Each service attaches to the external deeix-chat-network, so start an application profile first or create the network:

terminal

Run from inside deploy/:

terminal

ServiceURLPurpose
Tikahttp://127.0.0.1:9998Document text extraction
Tesseract OCRhttp://127.0.0.1:8004/ocrOCR service
Doclinghttp://127.0.0.1:8005/ocrDocument and OCR extraction

deploy/services/rapidocr has a Dockerfile and entrypoint but no compose file.

Desktop app#

If you do not want to run a server, the desktop client bundles the Go backend. Install it from GitHub Releases, then choose Use on this computer for local mode or Connect to a server for an existing deployment. See Desktop App.

Next steps#

Configure the runtime business settings in the admin console before you invite users.

AreaAction
Upstreams and modelsAdd upstream channels, platform models, and route bindings.
Files and retrievalConfirm storage, extraction, OCR, embedding, and retrieval settings.
Login and securityCheck public URLs, CORS, trusted proxies, registration, and 2FA.
BillingChoose the billing mode and configure pricing, plans, payments, and webhooks.
OperationsCheck logs, audit events, backups, GeoIP, and OpenTelemetry.