# STCourses with Docker Compose. Project name "stc", so containers are stc-app-1 and stc-postgres-1. # # SQLite (default): STC_SECRET=... docker compose up -d # Postgres: STC_SECRET=... STC_DATABASE_URL=postgres://stc:stc@postgres:5432/stc \ # docker compose --profile postgres up -d # # Course repos go in ./courses (or set STC_COURSES_HOST); files to import go in ./import-inbox (or STC_IMPORT_HOST). # Both are mounted read-only: originals are never changed. See docs/operations.md. name: stc services: app: build: . image: stc-app restart: unless-stopped ports: - "${STC_HOST_PORT:-3000}:3000" environment: STC_SECRET: ${STC_SECRET:?set STC_SECRET to a long random string} STC_PUBLIC_URL: ${STC_PUBLIC_URL:-http://localhost:3000} STC_DATABASE_URL: ${STC_DATABASE_URL:-sqlite:///data/stcourses.db} STC_UPLOAD_MAX_MB: ${STC_UPLOAD_MAX_MB:-100} STC_AI_ALLOWED_BASE_URLS: ${STC_AI_ALLOWED_BASE_URLS:-} STC_TRANSCRIBE_URL: ${STC_TRANSCRIBE_URL:-} depends_on: postgres: condition: service_healthy required: false # only with --profile postgres volumes: - stc-data:/data - ${STC_COURSES_HOST:-./courses}:/courses:ro - ${STC_IMPORT_HOST:-./import-inbox}:/import:ro postgres: image: postgres:17 profiles: ["postgres"] restart: unless-stopped environment: POSTGRES_USER: stc POSTGRES_PASSWORD: ${STC_PG_PASSWORD:-stc} POSTGRES_DB: stc volumes: - stc-pg:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U stc -d stc"] interval: 5s retries: 20 volumes: stc-data: stc-pg: