Files
zeekay cf4d0b027e templates.hanzo.ai: 1030-blueprint one-click deploy catalog
Aggregates five OSS one-click/self-hosting catalogs into the Dokploy blueprint
shape the Hanzo PaaS consumes (meta.json array + blueprints/<id>/{template.toml,
docker-compose.yml,meta.json,logo}):

  Dokploy 500 (MIT, verbatim) · Coolify 174 (Apache-2.0) · CapRover 161
  (Apache-2.0) · CasaOS 85 (Apache-2.0) · Runtipi 110 (GPL-3.0)

Deduped by app identity; each source + app keeps its upstream license
(ATTRIBUTION.md). Deterministic aggregators + a hard validator (every
template.toml parses with the platform's toml lib, every compose parses as YAML,
meta.json is the expected array, and an over-HTTP fetch probe exercises all
1030) — 0 hard failures. Served natively by hanzoai/static on DOKS (no CDN/Pages/
Vercel); CI builds on the hanzo-build-linux-amd64 arc pool; operator App CR in
crs/ serves it at templates.hanzo.ai.
2026-07-24 01:46:23 -07:00

119 lines
3.2 KiB
TOML

[variables]
main_domain = "${domain}"
karakeep_version = "release"
[config]
[[config.domains]]
serviceName = "web"
port = 3000
host = "${main_domain}"
[config.env]
# Core required configuration
"NEXTAUTH_URL" = "http://${main_domain}"
# "NEXTAUTH_SECRET" = "${password:36}"
# DATA_DIR is already set to /data by default in docker-compose
# "DATA_DIR" = "/data"
# Optional: common configs
# "ASSETS_DIR" = ""
"MEILI_MASTER_KEY" = "${password:36}"
# "MAX_ASSET_SIZE_MB" = "50"
# "DISABLE_NEW_RELEASE_CHECK" = "false"
# "PROMETHEUS_AUTH_TOKEN" = ""
# "RATE_LIMITING_ENABLED" = "false"
# "DB_WAL_MODE" = "false"
# "SEARCH_NUM_WORKERS" = "1"
# "WEBHOOK_NUM_WORKERS" = "1"
# "ASSET_PREPROCESSING_NUM_WORKERS" = "1"
# "RULE_ENGINE_NUM_WORKERS" = "1"
# --- Asset Storage (S3) ---
# "ASSET_STORE_S3_ENDPOINT" = ""
# "ASSET_STORE_S3_REGION" = ""
# "ASSET_STORE_S3_BUCKET" = ""
# "ASSET_STORE_S3_ACCESS_KEY_ID" = ""
# "ASSET_STORE_S3_SECRET_ACCESS_KEY" = ""
# "ASSET_STORE_S3_FORCE_PATH_STYLE" = "false"
# --- Authentication / Signup ---
# "DISABLE_SIGNUPS" = "false"
# "DISABLE_PASSWORD_AUTH" = "false"
# "EMAIL_VERIFICATION_REQUIRED" = "false"
# "OAUTH_WELLKNOWN_URL" = ""
# "OAUTH_CLIENT_SECRET" = ""
# "OAUTH_CLIENT_ID" = ""
# "OAUTH_SCOPE" = "openid email profile"
# "OAUTH_PROVIDER_NAME" = "Custom Provider"
# "OAUTH_ALLOW_DANGEROUS_EMAIL_ACCOUNT_LINKING" = "false"
# "OAUTH_TIMEOUT" = "3500"
# --- Inference Configs ---
# "OPENAI_API_KEY" = ""
# "OPENAI_BASE_URL" = ""
# "OLLAMA_BASE_URL" = ""
# "OLLAMA_KEEP_ALIVE" = ""
# "INFERENCE_TEXT_MODEL" = "gpt-4.1-mini"
# "INFERENCE_IMAGE_MODEL" = "gpt-4o-mini"
# "EMBEDDING_TEXT_MODEL" = "text-embedding-3-small"
# "INFERENCE_CONTEXT_LENGTH" = "2048"
# "INFERENCE_LANG" = "english"
# "INFERENCE_NUM_WORKERS" = "1"
# "INFERENCE_ENABLE_AUTO_TAGGING" = "true"
# "INFERENCE_ENABLE_AUTO_SUMMARIZATION" = "false"
# "INFERENCE_JOB_TIMEOUT_SEC" = "30"
# "INFERENCE_FETCH_TIMEOUT_SEC" = "300"
# "INFERENCE_OUTPUT_SCHEMA" = "structured"
# --- Crawler Configs ---
# "CRAWLER_NUM_WORKERS" = "1"
# "BROWSER_WEB_URL" = "http://chrome:9222"
# "BROWSER_WEBSOCKET_URL" = ""
# "BROWSER_CONNECT_ONDEMAND" = "false"
# "CRAWLER_DOWNLOAD_BANNER_IMAGE" = "true"
# "CRAWLER_STORE_SCREENSHOT" = "true"
# "CRAWLER_FULL_PAGE_SCREENSHOT" = "false"
# "CRAWLER_SCREENSHOT_TIMEOUT_SEC" = "5"
# "CRAWLER_FULL_PAGE_ARCHIVE" = "false"
# "CRAWLER_JOB_TIMEOUT_SEC" = "60"
# "CRAWLER_NAVIGATE_TIMEOUT_SEC" = "30"
# "CRAWLER_VIDEO_DOWNLOAD" = "false"
# "CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE" = "50"
# "CRAWLER_VIDEO_DOWNLOAD_TIMEOUT_SEC" = "600"
# "CRAWLER_ENABLE_ADBLOCKER" = "true"
# "CRAWLER_YTDLP_ARGS" = "[]"
# --- OCR Configs ---
# "OCR_CACHE_DIR" = ""
# "OCR_LANGS" = "eng"
# "OCR_CONFIDENCE_THRESHOLD" = "50"
# --- Webhook Configs ---
# "WEBHOOK_TIMEOUT_SEC" = "5"
# "WEBHOOK_RETRY_TIMES" = "3"
# "WEBHOOK_TOKEN" = ""
# --- SMTP Configuration ---
# "SMTP_HOST" = ""
# "SMTP_PORT" = "587"
# "SMTP_SECURE" = "false"
# "SMTP_USER" = ""
# "SMTP_PASSWORD" = ""
# "SMTP_FROM" = ""
# --- Proxy Configuration ---
# "CRAWLER_HTTP_PROXY" = ""
# "CRAWLER_HTTPS_PROXY" = ""
# "CRAWLER_NO_PROXY" = ""
[[config.mounts]]
# Persistent data directory for Karakeep
volumeName = "data"
mountPath = "/data"
[[config.mounts]]
# Meilisearch data directory
volumeName = "meilisearch"
mountPath = "/meili_data"