Run container services (server, database, workers) for a site
deploy_appDeploy or update the site's container services: the user's own backend server, a database (Postgres, MySQL, MongoDB, ...), Redis, background workers, from any public image. Applies the whole config: services missing from it are stopped (their volumes and data are kept). Waits until every service is ready, then returns per-service status; on failure call get_app_status with logs to debug. Each call restarts the services, which also picks up new source files. App config: { "services": { "": { "image": "postgres:16-alpine", "port": 5432, "public": false, "command": [...], "args": [...], "workingDir": "/app", "env": { "KEY": "value" }, "volumes": { "/var/lib/postgresql/data": "1Gi" }, "source": false, "sourcePath": "/app", "memory": "256Mi", "cpu": "500m" } } }. Any public image works. Services reach each other by service name (e.g. host "db", port 5432). Exactly one service may be "public": true; it receives all HTTP traffic for the site's domains on its "port" (plain HTTP, TLS is terminated for you). "source": true copies the site's source tree (write_source_files) into sourcePath (default /app, writable) on every start, so e.g. {"image":"node:22-alpine","source":true,"command":["sh","-c","npm ci && node server.js"],"port":3000,"public":true}. "${generated:NAME}" as an env value is a random secret generated once and shared by every service that references it (use it for database passwords); "$(OTHER)" embeds an earlier variable of the same service, e.g. "DATABASE_URL": "postgres://app:$(DB_PASSWORD)@db:5432/app". Secrets from outside (API keys, OAuth client secrets, tokens) never go in the config, the source or the chat: the user adds them in the VibeDeploy dashboard (the site's Settings tab, section Secrets; get_app_status returns the direct link as secrets.manageUrl). Every service gets them as env vars and restarts automatically; an explicit env entry with the same name wins. get_app_status lists the secret names that are set, never their values. Volumes persist across deploys; everything else is recreated. For Postgres set PGDATA to a subdirectory of the volume. Outbound internet works (not SMTP port 25); private networks are blocked. Limits per site: 6 services, 2048Mi memory and 2000m CPU in total (default 256Mi / 500m per service), 4 volumes, 3Gi storage.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| config | No | The app config object. Omit it to use vibedeploy.json from the site's source tree. App config: { "services": { "<name>": { "image": "postgres:16-alpine", "port": 5432, "public": false, "command": [...], "args": [...], "workingDir": "/app", "env": { "KEY": "value" }, "volumes": { "/var/lib/postgresql/data": "1Gi" }, "source": false, "sourcePath": "/app", "memory": "256Mi", "cpu": "500m" } } }. Any public image works. Services reach each other by service name (e.g. host "db", port 5432). Exactly one service may be "public": true; it receives all HTTP traffic for the site's domains on its "port" (plain HTTP, TLS is terminated for you). "source": true copies the site's source tree (write_source_files) into sourcePath (default /app, writable) on every start, so e.g. {"image":"node:22-alpine","source":true,"command":["sh","-c","npm ci && node server.js"],"port":3000,"public":true}. "${generated:NAME}" as an env value is a random secret generated once and shared by every service that references it (use it for database passwords); "$(OTHER)" embeds an earlier variable of the same service, e.g. "DATABASE_URL": "postgres://app:$(DB_PASSWORD)@db:5432/app". Secrets from outside (API keys, OAuth client secrets, tokens) never go in the config, the source or the chat: the user adds them in the VibeDeploy dashboard (the site's Settings tab, section Secrets; get_app_status returns the direct link as secrets.manageUrl). Every service gets them as env vars and restarts automatically; an explicit env entry with the same name wins. get_app_status lists the secret names that are set, never their values. Volumes persist across deploys; everything else is recreated. For Postgres set PGDATA to a subdirectory of the volume. Outbound internet works (not SMTP port 25); private networks are blocked. Limits per site: 6 services, 2048Mi memory and 2000m CPU in total (default 256Mi / 500m per service), 4 volumes, 3Gi storage. | |
| siteId | No |