# Ciaren — Visual ETL Builder # # Quick start: # docker compose up --build # open http://localhost:8055 # # To enable optional feature bundles, pass EXTRAS at build time: # EXTRAS=ml docker compose build # ML nodes (scikit-learn, XGBoost, MLflow) # EXTRAS=postgres docker compose build # PostgreSQL connector # EXTRAS=ml,postgres docker compose build # both # EXTRAS=all-connectors docker compose build # common DB/object-storage connectors # # All CIAREN_* env vars below map to `ciaren serve` flags. # Run `docker compose exec ciaren ciaren info` to inspect resolved settings. services: ciaren: build: context: . dockerfile: Dockerfile args: # Comma-separated optional extras: ml, postgres, mysql, mongo, s3, gcs, # azure, signing, all-connectors, all EXTRAS: ${EXTRAS:-} image: ciaren:latest ports: - "${CIAREN_PORT:-8055}:8055" volumes: - ciaren-data:/data environment: CIAREN_ENVIRONMENT: ${CIAREN_ENVIRONMENT:-production} # ── Dataframe engine & execution ──────────────────────────────────────── CIAREN_DEFAULT_ENGINE: ${CIAREN_DEFAULT_ENGINE:-polars} CIAREN_EXECUTION_MODE: ${CIAREN_EXECUTION_MODE:-thread} CIAREN_RUN_TIMEOUT_SECONDS: ${CIAREN_RUN_TIMEOUT_SECONDS:-0} # ── Scheduler ─────────────────────────────────────────────────────────── CIAREN_SCHEDULER_ENABLED: ${CIAREN_SCHEDULER_ENABLED:-true} CIAREN_SCHEDULER_POLL_INTERVAL_SECONDS: ${CIAREN_SCHEDULER_POLL_INTERVAL_SECONDS:-30} CIAREN_SCHEDULER_MAX_CONCURRENT_RUNS: ${CIAREN_SCHEDULER_MAX_CONCURRENT_RUNS:-1} CIAREN_SCHEDULER_MAX_CONSECUTIVE_FAILURES: ${CIAREN_SCHEDULER_MAX_CONSECUTIVE_FAILURES:-5} # ── ML extension (requires EXTRAS=ml at build time) ───────────────────── CIAREN_ML_ENABLED: ${CIAREN_ML_ENABLED:-true} CIAREN_MLFLOW_TRACKING_URI: ${CIAREN_MLFLOW_TRACKING_URI:-/data/mlruns} # ── Database (SQLite default, zero setup) ─────────────────────────────── # PostgreSQL: set DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/db # and rebuild with EXTRAS=postgres or EXTRAS=all-connectors CIAREN_DATABASE_URL: ${CIAREN_DATABASE_URL:-sqlite+aiosqlite:////data/ciaren.db} # ── Upload limit ──────────────────────────────────────────────────────── CIAREN_MAX_UPLOAD_SIZE_MB: ${CIAREN_MAX_UPLOAD_SIZE_MB:-100} # ── CORS (unset = same-origin; set if API is accessed from other origins) # CIAREN_CORS_ORIGINS: '["https://your-domain.com"]' restart: unless-stopped healthcheck: test: - CMD - python - -c - "import urllib.request; urllib.request.urlopen('http://localhost:8055/health')" interval: 30s timeout: 10s retries: 3 start_period: 60s volumes: ciaren-data: