Files
Curio/docker-compose.prod.yml
T

153 lines
5.1 KiB
YAML

services:
postgres:
image: pgvector/pgvector:pg16
restart: unless-stopped
environment:
POSTGRES_DB: curio
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
- ./docker/init.sql:/docker-entrypoint-initdb.d/01_init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redisdata:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
migrate:
build:
context: .
target: worker
command: ["node_modules/.bin/drizzle-kit", "migrate"]
environment:
DATABASE_URL: ${DATABASE_URL}
depends_on:
postgres:
condition: service_healthy
restart: on-failure
app:
build:
context: .
target: runner
restart: unless-stopped
depends_on:
migrate:
condition: service_completed_successfully
redis:
condition: service_healthy
environment:
DATABASE_URL: ${DATABASE_URL}
REDIS_URL: ${REDIS_URL}
AUTH_SECRET: ${AUTH_SECRET}
AUTH_URL: ${AUTH_URL}
AUTH_GITHUB_ID: ${AUTH_GITHUB_ID:-}
AUTH_GITHUB_SECRET: ${AUTH_GITHUB_SECRET:-}
AUTH_GOOGLE_ID: ${AUTH_GOOGLE_ID:-}
AUTH_GOOGLE_SECRET: ${AUTH_GOOGLE_SECRET:-}
AUTH_OIDC_ISSUER: ${AUTH_OIDC_ISSUER:-}
AUTH_OIDC_CLIENT_ID: ${AUTH_OIDC_CLIENT_ID:-}
AUTH_OIDC_CLIENT_SECRET: ${AUTH_OIDC_CLIENT_SECRET:-}
AUTH_OIDC_DISPLAY_NAME: ${AUTH_OIDC_DISPLAY_NAME:-}
LLM_GENERATOR_PROVIDER: ${LLM_GENERATOR_PROVIDER}
LLM_GENERATOR_MODEL: ${LLM_GENERATOR_MODEL}
LLM_GRADER_PROVIDER: ${LLM_GRADER_PROVIDER}
LLM_GRADER_MODEL: ${LLM_GRADER_MODEL}
LLM_CHEAP_GRADER_PROVIDER: ${LLM_CHEAP_GRADER_PROVIDER:-}
LLM_CHEAP_GRADER_MODEL: ${LLM_CHEAP_GRADER_MODEL:-}
LLM_EMBED_PROVIDER: ${LLM_EMBED_PROVIDER:-}
LLM_EMBED_MODEL: ${LLM_EMBED_MODEL:-}
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
GOOGLE_GENERATIVE_AI_API_KEY: ${GOOGLE_GENERATIVE_AI_API_KEY:-}
GROQ_API_KEY: ${GROQ_API_KEY:-}
MISTRAL_API_KEY: ${MISTRAL_API_KEY:-}
XAI_API_KEY: ${XAI_API_KEY:-}
AZURE_API_KEY: ${AZURE_API_KEY:-}
AZURE_OPENAI_RESOURCE_NAME: ${AZURE_OPENAI_RESOURCE_NAME:-}
COHERE_API_KEY: ${COHERE_API_KEY:-}
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-}
LANGFUSE_HOST: ${LANGFUSE_HOST:-}
LANGFUSE_PUBLIC_KEY: ${LANGFUSE_PUBLIC_KEY:-}
LANGFUSE_SECRET_KEY: ${LANGFUSE_SECRET_KEY:-}
UPSTASH_REDIS_REST_URL: ${UPSTASH_REDIS_REST_URL:-}
UPSTASH_REDIS_REST_TOKEN: ${UPSTASH_REDIS_REST_TOKEN:-}
SESSION_TOKEN_BUDGET: ${SESSION_TOKEN_BUDGET:-}
CONTENT_SAFETY_MODE: ${CONTENT_SAFETY_MODE:-}
SMTP_HOST: ${SMTP_HOST:-}
SMTP_PORT: ${SMTP_PORT:-}
SMTP_USER: ${SMTP_USER:-}
SMTP_PASS: ${SMTP_PASS:-}
EMAIL_FROM: ${EMAIL_FROM:-}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-}
AWS_REGION: ${AWS_REGION:-}
PORT: ${PORT:-3000}
HOSTNAME: "0.0.0.0"
labels:
- "traefik.enable=true"
- "traefik.http.routers.curio.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.curio.entrypoints=websecure"
- "traefik.http.routers.curio.tls=true"
- "traefik.http.routers.curio.tls.certresolver=letsencrypt"
- "traefik.http.services.curio.loadbalancer.server.port=${PORT:-3000}"
worker:
build:
context: .
target: worker
restart: unless-stopped
depends_on:
migrate:
condition: service_completed_successfully
redis:
condition: service_healthy
environment:
DATABASE_URL: ${DATABASE_URL}
REDIS_URL: ${REDIS_URL}
LLM_GENERATOR_PROVIDER: ${LLM_GENERATOR_PROVIDER}
LLM_GENERATOR_MODEL: ${LLM_GENERATOR_MODEL}
LLM_GRADER_PROVIDER: ${LLM_GRADER_PROVIDER}
LLM_GRADER_MODEL: ${LLM_GRADER_MODEL}
LLM_CHEAP_GRADER_PROVIDER: ${LLM_CHEAP_GRADER_PROVIDER:-}
LLM_CHEAP_GRADER_MODEL: ${LLM_CHEAP_GRADER_MODEL:-}
LLM_EMBED_PROVIDER: ${LLM_EMBED_PROVIDER:-}
LLM_EMBED_MODEL: ${LLM_EMBED_MODEL:-}
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
GOOGLE_GENERATIVE_AI_API_KEY: ${GOOGLE_GENERATIVE_AI_API_KEY:-}
GROQ_API_KEY: ${GROQ_API_KEY:-}
MISTRAL_API_KEY: ${MISTRAL_API_KEY:-}
XAI_API_KEY: ${XAI_API_KEY:-}
AZURE_API_KEY: ${AZURE_API_KEY:-}
AZURE_OPENAI_RESOURCE_NAME: ${AZURE_OPENAI_RESOURCE_NAME:-}
COHERE_API_KEY: ${COHERE_API_KEY:-}
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-}
LANGFUSE_HOST: ${LANGFUSE_HOST:-}
LANGFUSE_PUBLIC_KEY: ${LANGFUSE_PUBLIC_KEY:-}
LANGFUSE_SECRET_KEY: ${LANGFUSE_SECRET_KEY:-}
SESSION_TOKEN_BUDGET: ${SESSION_TOKEN_BUDGET:-}
CONTENT_SAFETY_MODE: ${CONTENT_SAFETY_MODE:-}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-}
AWS_REGION: ${AWS_REGION:-}
volumes:
pgdata:
redisdata:
networks:
default:
external: true
name: ${TRAEFIK_NETWORK:-traefik}