# Miget Compose Templates Service catalogue of multi-node clusters and backing services, deployable to [Miget](https://miget.com) as Compose Stacks, and runnable locally with plain `docker compose up`. Each template's README carries a **Deploy to Miget** button for one-click deploy. ## Convention Every template is a subdirectory with: - **`compose.yaml`**: portable, vanilla Docker Compose. Works locally with no platform tooling. - **`compose.miget.yaml`**: Miget platform overrides (RAM, privacy, disk sizes via `x-miget`), auto-layered on top of the base file by Miget at detect and deploy time. Plain `docker compose` ignores it. - A `README.md` with topology, connection strings, and scaling notes. When creating a stack on Miget, point it at this repository and set the stack's *path* to the template directory (e.g. `rabbitmq`). Platform ground rules baked into every template: - The public HTTP entrypoint of a stack listens on **port 5000** (the only port Miget's ingress reaches); everything else is `private: true`. - One service block per cluster node: nodes need stable identity and their own volume, so scale by adding blocks, **not** `replicas`. - Per-node named volumes become RWO block PVCs; sizes set in `compose.miget.yaml`. - Image-only services must be configurable via **environment variables** (compose `command:` overrides do not reach per-app deploys); flag-driven images get a thin Dockerfile wrapper with a baked start script. ## Templates | Template | What you get | Public entry | |---|---|---| | [`rabbitmq`](rabbitmq/) | 3-node RabbitMQ 4.x cluster (quorum-queue ready) | management UI | | [`kafka`](kafka/) | 3-node Apache Kafka KRaft cluster (official image, env-only) | Kafbat UI | | [`redpanda`](redpanda/) | 3-broker Redpanda cluster (Kafka-compatible, no JVM) | Redpanda Console | | [`kong`](kong/) | Kong API Gateway backed by a **managed Postgres** service | gateway proxy + Kong Manager | | [`mongodb`](mongodb/) | 3-node MongoDB replica set (rs0, stock image) | none (internal) | | [`n8n`](n8n/) | n8n queue mode: editor + scalable workers, **managed Postgres + Valkey** | editor | | [`glitchtip`](glitchtip/) | GlitchTip error tracking (Sentry-compatible), **managed Postgres + Valkey** | web UI | | [`bugsink`](bugsink/) | Bugsink error tracking (Sentry SDKs, single container), **managed Postgres** | web UI | | [`pocketbase`](pocketbase/) | Pocketbase backend-in-one-file (SQLite, auth, realtime) | app + admin | | [`cronicle`](cronicle/) | Cronicle, cron with a UI, history, chaining | web UI | | [`chromadb`](chromadb/) | Chroma vector database | none (internal) | | [`qdrant`](qdrant/) | Qdrant vector database + dashboard | none (internal) | | [`meilisearch`](meilisearch/) | Meilisearch instant search (master-key protected) | search API | | [`minio`](minio/) | MinIO S3-compatible object storage (single node) | console | | [`keycloak`](keycloak/) | Keycloak IAM (OIDC/SAML), **managed Postgres** | Keycloak | | [`clickhouse`](clickhouse/) | 3-node ClickHouse cluster (embedded Keeper) | none (internal) | | [`openclaw`](openclaw/) | OpenClaw autonomous AI agent + dashboard | dashboard (basic auth) | | [`agent-box`](agent-box/) | Claude Code + opencode + Kilo CLI in a persistent web terminal | terminal (basic auth) | | [`hermes`](hermes/) | Hermes Agent (Nous Research), self-improving agent + dashboard | dashboard (basic auth) | | [`kilo`](kilo/) | Kilo headless agent server (`kilo serve`) | API (password) | | [`convex`](convex/) | Convex self-hosted backend + dashboard (multi-origin proxies) | api / site / dashboard | | [`supabase`](supabase/) | Full Supabase stack behind Kong (uses **compose profiles**), experimental | Kong gateway | | [`supabase-lite`](supabase-lite/) | Supabase core (Postgres/Auth/REST + Studio) on a 2 GiB plan | Kong gateway | | [`supabase-nano`](supabase-nano/) | supabase-lite memory-tuned into 1 GiB, dashboard included | Kong gateway | | [`supabase-pico`](supabase-pico/) | headless Supabase API (Postgres/Auth/REST) in 512 MiB, nginx gateway | nginx gateway | | [`appsmith`](appsmith/) | Appsmith CE internal-tool builder (all-in-one image + nginx proxy) | builder UI | | [`tooljet`](tooljet/) | ToolJet CE low-code builder, **managed Postgres** | builder UI | | [`budibase`](budibase/) | Budibase low-code platform (all-in-one image + nginx proxy) | builder UI | | [`timescaledb`](timescaledb/) | TimescaleDB time-series Postgres (single node) | none (internal) | | [`uptime-kuma`](uptime-kuma/) | Uptime Kuma v2 monitoring + status pages (slim, SQLite) | web UI | | [`umami`](umami/) | Umami v3 privacy-first analytics, **managed Postgres** | dashboard | | [`vaultwarden`](vaultwarden/) | Vaultwarden Bitwarden-compatible password server | web vault | | [`langfuse`](langfuse/) | Langfuse v3 LLM observability (web/worker/ClickHouse/Valkey/MinIO), **managed Postgres** | web UI | | [`litellm`](litellm/) | LiteLLM gateway - virtual keys + budgets, **managed Postgres** | proxy + admin UI | | [`mssql`](mssql/) | Microsoft SQL Server 2025 (Express - free production license) | none (internal) | | [`oracle`](oracle/) | Oracle Database Free 26ai (FUTC - production-legal caps) | none (internal) | | [`ghost`](ghost/) | Ghost 6 publishing (blog/newsletter/memberships), **self-hosted MySQL** | site + admin | | [`wordpress`](wordpress/) | WordPress (official image + nginx proxy), **self-hosted MySQL** | site | | [`metabase`](metabase/) | Metabase OSS BI dashboards, **managed Postgres** app DB | web UI | | [`directus`](directus/) | Directus 11 headless CMS + data studio, **managed Postgres** | studio + API | | [`nocodb`](nocodb/) | NocoDB Airtable alternative, **managed Postgres** | web UI | | [`forgejo`](forgejo/) | Forgejo git forge (Gitea fork), **managed Postgres** | web UI + HTTPS git | | [`prestashop`](prestashop/) | PrestaShop 9 storefront (auto-install + nginx proxy), **self-hosted MySQL** | shop + /admin | | [`open-mercato`](open-mercato/) | Open Mercato CRM/ERP foundation (builds from upstream repo), experimental | app + /backend | | [`code-server`](code-server/) | code-server, VS Code in the browser, persistent workspace | IDE (password) | | [`saleor`](saleor/) | Saleor headless GraphQL commerce (api+worker+dashboard), **managed Postgres** | api / dashboard | | [`grafana-stack`](grafana-stack/) | Grafana + Prometheus + Loki, datasources pre-provisioned | Grafana | | [`open-webui`](open-webui/) | Open WebUI - team AI chat over any OpenAI-compatible API | web UI | | [`flowise`](flowise/) | Flowise visual LLM app builder, **managed Postgres** | builder UI | | [`jenkins`](jenkins/) | Jenkins LTS controller (built-in node) | web UI | | [`github-runner`](github-runner/) | GitHub Actions self-hosted runner (PAT auto-registration) | none (outbound) | | [`gitlab-runner`](gitlab-runner/) | GitLab Runner, shell executor, self-registering (glrt token) | none (outbound) | | [`forgejo-runner`](forgejo-runner/) | Forgejo Actions runner, host mode - serves Forgejo or Codeberg | none (outbound) | | [`azp-agent`](azp-agent/) | Azure Pipelines agent (official Dockerfile recipe) | none (outbound) | | [`buildkite-agent`](buildkite-agent/) | Buildkite agent - hybrid CI, one token | none (outbound) | | [`mailpit`](mailpit/) | Mailpit dev mail catcher (SMTP sink + UI) | UI (basic auth) | | [`listmonk`](listmonk/) | listmonk newsletters/mailing lists, **managed Postgres** | admin + public pages | | [`authentik`](authentik/) | authentik IdP (server+worker, Redis-free), **managed Postgres** | web UI | | [`zitadel`](zitadel/) | Zitadel passkeys-first IdP (single binary), **managed Postgres** | web UI | | [`docuseal`](docuseal/) | DocuSeal document signing (+ nginx proxy), **managed Postgres** | web UI | | [`documenso`](documenso/) | Documenso e-signatures (PKCS#12 sealing), **managed Postgres** | web UI | | [`typebot`](typebot/) | Typebot conversational forms (builder + viewer), **managed Postgres** | builder / viewer | | [`twenty`](twenty/) | Twenty CRM (server + worker + noeviction Valkey), **managed Postgres** | web UI | | [`kestra`](kestra/) | Kestra workflow orchestration (standalone, PROCESS runner), **managed Postgres** | web UI (basic auth) | | [`filebrowser`](filebrowser/) | FileBrowser web file manager + share links | web UI | | [`roundcube`](roundcube/) | Roundcube webmail over any IMAP (+ nginx proxy), **managed Postgres** | webmail | | [`tei`](tei/) | HuggingFace TEI embeddings API on CPU (bge-small) | none (internal) | | [`phoenix`](phoenix/) | Arize Phoenix LLM tracing/evals (single container) | web UI (auth) | | [`filestash`](filestash/) | Filestash web file manager over **Miget Buckets** (+ proxy) | web UI | | [`sftpgo`](sftpgo/) | SFTPGo S3 upload portal (share-upload links, optional SFTP) | web UI | | [`mariadb-galera`](mariadb-galera/) | 3-node MariaDB Galera cluster (official image, bootstrap-once wrapper) | none (internal) | | [`minecraft`](minecraft/) | Minecraft Java server (itzg; Paper/Fabric/Forge) | custom TCP port | | [`factorio`](factorio/) | Factorio headless server | custom UDP port | | [`chatwoot`](chatwoot/) | Chatwoot CE support inbox (web+sidekiq, pgvector PG, noeviction Valkey) | web UI | | [`superset`](superset/) | Apache Superset BI (app+worker+beat+init, baked config), **managed Postgres** | web UI | | [`prefect`](prefect/) | Prefect 3 server (outbound workers as separate apps), **managed Postgres** | web UI (basic auth) | | [`logto`](logto/) | Logto developer auth (auth + admin domains via proxies), **managed Postgres** | auth / admin | | [`livekit`](livekit/) | LiveKit WebRTC server (muxed UDP 7882 + TCP 7881) | ws :5000 + custom ports | | [`livekit-agents`](livekit-agents/) | LiveKit voice agent worker (ElevenLabs/Deepgram/LLM), experimental | none (outbound) | | [`usesend`](usesend/) | useSend open-source Resend (SES delivery, + proxy), **managed Postgres** | dashboard + API | | [`cognee`](cognee/) | Cognee agent memory engine (graph + vector, self-contained) | API (JWT) | | [`garage`](garage/) | Garage S3-compatible store + webui (the MinIO successor) | web UI | | [`letta`](letta/) | Letta/MemGPT agent server (pgvector PG, + proxy), experimental | API (password) | | [`dify`](dify/) | Dify LLM app platform (11 services, faithful upstream shape), experimental | entry router | | [`changedetection`](changedetection/) | changedetection.io page-change monitoring | web UI | | [`ntfy`](ntfy/) | ntfy push notifications (deny-all auth, declarative users) | web + API | | [`memos`](memos/) | Memos lightweight markdown notes (SQLite) | web UI | | [`actual`](actual/) | Actual Budget E2EE sync server | web app | | [`stirling-pdf`](stirling-pdf/) | Stirling-PDF 50+ PDF tools (login enforced) | web UI | | [`node-red`](node-red/) | Node-RED with bcrypt adminAuth enforced at boot | editor (auth) | | [`outline`](outline/) | Outline team wiki (stateless: **managed Postgres** + **Miget Buckets**) | web UI | | [`hasura`](hasura/) | Hasura v2 CE instant GraphQL, **managed Postgres** | API + console | | [`typesense`](typesense/) | Typesense instant search (env-only, in-memory) | API (keys) | | [`infisical`](infisical/) | Infisical secrets manager, **managed Postgres** | web UI | | [`paperless-ngx`](paperless-ngx/) | Paperless-ngx document management + OCR, **managed Postgres** | web UI | | [`nats`](nats/) | 3-node NATS cluster with JetStream (flags-only) | none (internal) | | [`linkwarden`](linkwarden/) | Linkwarden bookmark manager + archiving (+ proxy), **managed Postgres** | web UI | | [`penpot`](penpot/) | Penpot design platform (frontend+backend+exporter, + proxy), **managed Postgres** | web UI | | [`temporal`](temporal/) | Temporal durable execution + UI, **managed Postgres**, experimental | UI (gRPC internal) | | [`openobserve`](openobserve/) | OpenObserve logs/metrics/traces (S3-native → **Miget Buckets**) | web UI + OTLP | | [`parseable`](parseable/) | Parseable S3-native log lake (single binary) | web UI + ingest | | [`mattermost`](mattermost/) | Mattermost team chat, **managed Postgres** | web UI | | [`rocketchat`](rocketchat/) | Rocket.Chat team chat (stateless; uses the `mongodb` template) | web UI | | [`odoo`](odoo/) | Odoo Community 18 ERP/CRM/ecommerce (threaded), **managed Postgres** | web UI | | [`bagisto`](bagisto/) | Bagisto Laravel ecommerce (+ nginx proxy), **self-hosted MySQL** | shop + /admin | | [`activepieces`](activepieces/) | Activepieces automation (AI agents), **managed Postgres** + noeviction Valkey | web UI | | [`freescout`](freescout/) | FreeScout help desk (listens on 5000 directly), **self-hosted MySQL** | web UI | | [`miniflux`](miniflux/) | Miniflux minimalist RSS reader (single Go binary), **managed Postgres** | reader + API | | [`navidrome`](navidrome/) | Navidrome music streaming server (Subsonic, SQLite) | web player | | [`unleash`](unleash/) | Unleash feature flags (LaunchDarkly alternative), **managed Postgres** | flag API + admin | | [`docmost`](docmost/) | Docmost collaborative wiki (Confluence/Notion alt), **managed Postgres + Valkey** + Buckets | web UI | | [`docker-registry`](docker-registry/) | Private container registry (CNCF Distribution, native :5000, S3 to **Miget Buckets**) | registry API | | [`owncast`](owncast/) | Owncast live streaming server (RTMP ingest 1935, port-5000 wrapper) | player + admin | | [`shlink`](shlink/) | Shlink URL shortener (REST API, GeoIP analytics), **managed Postgres** | redirects + API | | [`plane`](plane/) | Plane project management (Jira/Linear alt, community AIO + RabbitMQ + MinIO), **managed Postgres + Valkey** - experimental | web UI | | [`immich`](immich/) | Immich photos (Google Photos alt, ML worker + VectorChord Postgres, self-contained) - experimental | web UI | | [`writebook`](writebook/) | Writebook (37signals) free book/docs publisher (Rails + Thruster, SQLite, `HTTP_PORT=5000`) | reader + admin | | [`fizzy`](fizzy/) | Fizzy (37signals) free kanban (Trello/Asana alt, Rails + Thruster, SQLite) | web UI | | [`campfire`](campfire/) | Campfire (37signals) free group chat (Slack alt, MIT, self-contained Rails, SQLite) | web UI | | [`buzz`](buzz/) | Buzz (Block) agent-native workspace on a Nostr relay, **managed Postgres + Valkey**, experimental | relay ws + invite page | | [`calcom`](calcom/) | Cal.com scheduling (Calendly alt, stateless), **managed Postgres** (citext) | booking app | | [`jellyfin`](jellyfin/) | Jellyfin media server (Plex alt, SQLite, network.xml port-5000 wrapper) | web player | | [`plausible`](plausible/) | Plausible CE web analytics (GA alt), **managed Postgres** + ClickHouse sidecar | dashboard | | [`bookstack`](bookstack/) | BookStack wiki (Confluence alt, nginx port-5000 wrapper), **self-hosted MariaDB** | web UI | | [`audiobookshelf`](audiobookshelf/) | AudioBookshelf audiobook + podcast server (SQLite, `PORT=5000`) | web player | | [`karakeep`](karakeep/) | Karakeep (ex-Hoarder) AI bookmarks (SQLite + Meilisearch + headless Chrome) | web UI | | [`beszel`](beszel/) | Beszel server monitoring **hub** (PocketBase/SQLite, port-5000 wrapper; agents self-installed) | dashboard | | [`dawarich`](dawarich/) | Dawarich location history (Google Timeline alt, web + worker + **PostGIS** + Valkey) - experimental | web UI | | [`searxng`](searxng/) | SearXNG private metasearch (200+ engines; RAG backend), `SEARXNG_PORT=5000` | search UI | | [`ollama`](ollama/) | Ollama local LLM server (OpenAI-compatible API, `OLLAMA_HOST`) - GPU recommended, experimental | API (private) | | [`redis`](redis/) | Redis standalone (password + AOF persistence) | none (internal) | | [`redis-sentinel`](redis-sentinel/) | Redis HA: master + 2 replicas + 3 sentinels, automatic failover | none (internal) | | [`redis-cluster`](redis-cluster/) | Redis Cluster: 3 masters + 3 replicas, sharded (hostname-announced) - experimental | none (internal) | | [`valkey`](valkey/) | Valkey standalone (BSD Redis-compatible, password + AOF) | none (internal) | | [`valkey-sentinel`](valkey-sentinel/) | Valkey HA: master + 2 replicas + 3 sentinels, automatic failover | none (internal) | | [`valkey-cluster`](valkey-cluster/) | Valkey Cluster: 3 masters + 3 replicas, sharded - experimental | none (internal) | | [`mysql`](mysql/) | MySQL 8.4 standalone (env-configured) | none (internal) | | [`mariadb`](mariadb/) | MariaDB 11.8 standalone (env-configured) | none (internal) | | [`mariadb-replication`](mariadb-replication/) | MariaDB async primary/replica (image-wired replication) | none (internal) | | [`percona-server`](percona-server/) | Percona Server for MySQL standalone (MySQL drop-in + instrumentation) | none (internal) | | [`percona-xtradb-cluster`](percona-xtradb-cluster/) | Percona XtraDB Cluster: 3-node synchronous multi-primary (Galera) - experimental | none (internal) | | [`mysql-innodb-cluster`](mysql-innodb-cluster/) | MySQL InnoDB Cluster: 3-node Group Replication, auto-failover - experimental | none (internal) | A multi-node Elasticsearch template lives in its own repo for now: [ktaraszk/elasticsearch](https://github.com/ktaraszk/elasticsearch). ## Roadmap 1. Distributed variants: MinIO (4+ nodes), Qdrant distributed, multi-shard ClickHouse 2. Platform follow-ups feeding templates: valkey/mysql credential lookup for `${{...}}` refs on later deploys; required-vars keyed by template variable (Supabase currently prompts the same JWT secret under several per-service env keys); one-shot job semantics (`x-miget.type: job`) ## License MIT, see [LICENSE](LICENSE). The templates themselves are MIT-licensed. Each upstream project bundled or referenced by a template keeps its own license.