144 lines
5.3 KiB
YAML
144 lines
5.3 KiB
YAML
# SPDX-License-Identifier: LicenseRef-ConusAI-Template-1.0
|
|
# Local development, and the one place the three Postgres roles of a linked managed database are
|
|
# created by hand: on ConusAI Cloud the platform provisions them (data-services DS21), and
|
|
# `dev/postgres-roles.sql` runs the same statements so what works here works there.
|
|
#
|
|
# pnpm dev # the whole app on this machine: Postgres in Docker, the fake platform, the
|
|
# # migrate job, the demo data, the worker and the web shell (scripts/dev.mjs)
|
|
# docker compose -f compose.yaml -f compose.dev.yaml up --build # all of it as containers
|
|
#
|
|
# Nothing here is deployed: the platform reads compose.yaml alone (conusai.json's `compose.file`).
|
|
#
|
|
# The platform is the fake one of @conusai-kit/testing, selected on purpose by CONUSAI_FAKE_PLATFORM=1
|
|
# in a development run: the app refuses that switch in a production run, and refuses to start in one
|
|
# without the real platform's variables (config/src/env.ts).
|
|
x-development: &development
|
|
NODE_ENV: development
|
|
CONUSAI_FAKE_PLATFORM: "1"
|
|
CONUSAI_API_URL: http://platform:4010/api
|
|
CONUSAI_API_TOKEN: dev-token
|
|
CONUSAI_PROJECT_ID: "1"
|
|
CONUSAI_ORG_ID: dev
|
|
# The development Postgres below has pgvector, so the knowledge module stores its vectors there.
|
|
KNOWLEDGE_VECTOR_STORE: pgvector
|
|
|
|
services:
|
|
postgres:
|
|
# Postgres 18 with pgvector: development chooses the pgvector store (KNOWLEDGE_VECTOR_STORE above),
|
|
# and the migrate job creates the table with the extension.
|
|
image: pgvector/pgvector:pg18
|
|
environment:
|
|
POSTGRES_PASSWORD: postgres
|
|
POSTGRES_DB: appdev
|
|
volumes:
|
|
# Postgres 18 keeps its data in a version subdirectory, so the volume belongs one level up:
|
|
# a mount at /var/lib/postgresql/data makes the image refuse the directory it finds.
|
|
- postgres-data:/var/lib/postgresql
|
|
- ./dev/postgres-roles.sql:/docker-entrypoint-initdb.d/10-roles.sql:ro
|
|
# Published on loopback only, for `pnpm dev`, which runs the processes on this machine.
|
|
ports: ["127.0.0.1:${DEV_POSTGRES_PORT:-55433}:5432"]
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U postgres -d appdev"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
restart: unless-stopped
|
|
|
|
# The platform's services as the app uses them -- Blob, OCR, the AI gateway, audit, usage -- in
|
|
# memory, from the same image: it is a dependency of the template's tests, so it is in the image.
|
|
platform:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
target: runtime
|
|
working_dir: /app
|
|
command: ["node", "node_modules/@conusai-kit/testing/dist/fake-platform/cli.js"]
|
|
environment:
|
|
PORT: "4010"
|
|
HOST: 0.0.0.0
|
|
PUBLIC_URL: http://platform:4010
|
|
expose: ["4010"]
|
|
healthcheck:
|
|
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:4010/__e2e/health').then(r=>process.exit(r.ok?0:1),()=>process.exit(1))"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
init: true
|
|
restart: unless-stopped
|
|
|
|
migrate:
|
|
environment: *development
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
|
|
# The demo data (apps/worker/src/seed.ts), once the schema is there. Safe to run again.
|
|
seed:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
target: runtime
|
|
working_dir: /app
|
|
command: ["node", "apps/worker/dist/seed-main.js"]
|
|
environment:
|
|
<<: *development
|
|
CONUSAI_PUBLIC_URL: ${CONUSAI_PUBLIC_URL:-http://127.0.0.1:3000}
|
|
POSTGRES_URL: ${POSTGRES_URL}
|
|
POSTGRES_READER_URL: ${POSTGRES_READER_URL}
|
|
depends_on:
|
|
migrate:
|
|
condition: service_completed_successfully
|
|
platform:
|
|
condition: service_healthy
|
|
restart: "no"
|
|
init: true
|
|
|
|
web:
|
|
environment:
|
|
<<: *development
|
|
AUTH_DEV_LOGIN: "1"
|
|
AUTH_INSECURE_COOKIES: "1"
|
|
# Published on loopback only, so the app opens at http://127.0.0.1:3000 and nowhere else.
|
|
ports: ["127.0.0.1:3000:3000"]
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
migrate:
|
|
condition: service_completed_successfully
|
|
# The demo data is there when the app opens.
|
|
seed:
|
|
condition: service_completed_successfully
|
|
platform:
|
|
condition: service_healthy
|
|
|
|
worker:
|
|
environment: *development
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
migrate:
|
|
condition: service_completed_successfully
|
|
platform:
|
|
condition: service_healthy
|
|
|
|
# kit:convex-better-auth:begin
|
|
# With AUTH_PROVIDER=convex-better-auth: a Better Auth deployment on this machine, from the
|
|
# platform's pinned self-hosted Convex image. Started only when asked for (better-auth/README.md):
|
|
# docker compose -f compose.yaml -f compose.dev.yaml --profile better-auth up -d better-auth-backend
|
|
better-auth-backend:
|
|
profiles: ["better-auth"]
|
|
image: build.conusai.com/conusai/convex-backend@sha256:1738f1673f8d63161043a7859710d2301b1e9d6271e06afbb7af31594ea3a58f
|
|
environment:
|
|
CONVEX_CLOUD_ORIGIN: http://127.0.0.1:3210
|
|
CONVEX_SITE_ORIGIN: http://127.0.0.1:3211
|
|
# Published on loopback only, for `pnpm dev` and `node better-auth/deploy.mjs` on this machine.
|
|
ports: ["127.0.0.1:3210:3210", "127.0.0.1:3211:3211"]
|
|
volumes:
|
|
- better-auth-data:/convex/data
|
|
restart: unless-stopped
|
|
# kit:convex-better-auth:end
|
|
|
|
volumes:
|
|
postgres-data:
|
|
better-auth-data: # kit:convex-better-auth
|