Custom Service — write any docker-compose.yml
Deploy any Compose stack to your node. Start from one of 20+ built-in templates (Postgres, Redis, Kafka, ELK, n8n, Mattermost, Vault…) or paste your own YAML in a full Monaco editor.
What you'll build
- An arbitrary multi-service Compose stack running on your node
- A reusable template as a starting point instead of a blank file
- A .env file kept out of the YAML and out of Git
Before you begin
- A registered node with Docker (installed by the node agent)
- A docker-compose.yml — or a template you want to start from
- Any private-registry credentials, if your images aren’t public
Open the Custom Service wizard
Go to Development → Deploy → Custom Service. Step 1 is the target node. Step 2 is an optional Docker registry login — fill it only if you pull private images.
Custom Service — Server configuration
Start from a template (or paste YAML)
Step 3 is a full Monaco editor with YAML highlighting and a template picker. Choosing a template drops a working, opinionated stack into the editor that you can tweak.
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes: [pgdata:/var/lib/postgresql/data]
pgadmin:
image: dpage/pgadmin4
ports: ["5050:80"]
volumes: { pgdata: {} }20+ templates ship in the box
Databases (Postgres, MySQL, Mongo), cache (Redis), messaging (Kafka), observability (ELK, Prometheus), dev tools (n8n, Mattermost, Vault, Traefik) and more — all maintained alongside the product.Keep secrets in the .env, not the YAML
Step 4 sets the stack name and a separate environment file. Reference variables in the Compose file with ${VAR} and put the values here — they stay out of the YAML you might commit.
Custom Service — Stack settings
Deploy the stack
Deploy submits to POST /api/v2/tenant/provision/docker-compose/custom with your YAML, stack name, and node details. The agent runs docker compose up -d on the box and streams the result.
- Validate compose YAML20%
- Pull images (registry auth if set)55%
- Apply .env + docker compose up -d85%
- Containers healthy100%
$ ssh ubuntu@<node-ip> "docker compose -p data-platform ps"NAME STATUS PORTSdata-platform-db-1 Up (healthy) 5432/tcpdata-platform-pga-1 Up 0.0.0.0:5050->80/tcpAny stack, your node
If it runs in Compose, it runs here. For a managed, backed-up Postgres specifically, prefer the MetalDB tutorial over a raw Postgres container.Nice work — you're done!
You completed Custom Service — write any docker-compose.yml. Keep the momentum going with the next walkthrough, or jump back to the full catalog.