| name | dokploy-management |
| description | Use when deploying, managing, or troubleshooting Dokploy instances via the CLI (https://github.com/Dokploy/cli).
Triggers: "dokploy deploy", "manage dokploy", "dokploy app", "dokploy database", "push to dokploy",
"dokploy CI/CD", "dokploy authentication", "zero-downtime deployment", "dokploy docker-compose",
"dokploy environment variables", "dokploy health checks".
Provides comprehensive workflows for authentication, project/app/database management, environment variable
sync, and production-ready CI/CD patterns with GitHub Actions.
|
Dokploy Management
Comprehensive guide for managing Dokploy instances via CLI, API, and production deployment patterns.
CLI Options
This skill includes two CLI options:
| CLI | Coverage | Runtime | Best For |
|---|
Custom CLI (./cli/) | ~90% of API | Deno (single binary) | Full control, CI/CD, automation |
Official CLI (@dokploy/cli) | ~8% of API | Node.js 18+ | Basic operations |
Recommendation: Use the custom CLI for comprehensive API access and zero-dependency deployment.
Quick Reference (Custom CLI)
| Task | Command | Notes |
|---|
| Authenticate | dokploy auth login --url <url> --token <token> | Saves to ~/.config/dokploy/ |
| Deploy app | dokploy app deploy <appId> | No interactive prompts |
| Create compose | dokploy compose create --name <n> --environment <id> | Full compose support |
| Manage domains | dokploy domain create --host <h> --app <id> | SSL, paths, ports |
| Database ops | dokploy db create postgres --name <n> --environment <id> | All 5 DB types |
| CI/CD | DOKPLOY_TOKEN=x dokploy app deploy <id> | Env var auth |
Installation
Custom CLI (Recommended)
deno run --allow-all ./cli/mod.ts [command]
cd cli && deno task compile
./dist/dokploy --help
deno install --allow-all -n dokploy ./cli/mod.ts
Official CLI (Limited)
npm install -g @dokploy/cli
Authentication
Custom CLI
dokploy auth login --url https://panel.example.com --token YOUR_TOKEN
export DOKPLOY_URL="https://panel.example.com"
export DOKPLOY_TOKEN="YOUR_TOKEN"
dokploy auth status
Config File Location
~/.config/dokploy/config.json:
{
"url": "https://panel.example.com",
"token": "your-token",
"defaultProjectId": "optional",
"defaultEnvironmentId": "optional"
}
Core Workflows
Workflow 1: Project Setup
dokploy auth login --url https://panel.example.com --token TOKEN
dokploy project create --name "Production"
dokploy project get <projectId>
dokploy app create --name "web-app" --environment <envId>
dokploy app env <appId> --file .env.production
dokploy app deploy <appId>
Workflow 2: Docker Compose Stack
dokploy compose create \
--name "full-stack" \
--environment <envId> \
--file docker-compose.yml
dokploy compose deploy <composeId>
dokploy domain create \
--host app.example.com \
--compose <composeId> \
--service web \
--https \
--port 80
dokploy compose deploy <composeId>
Workflow 3: Database Setup
dokploy db create postgres \
--name "Production DB" \
--environment <envId> \
--db-name myapp \
--db-user postgres \
--db-password "$DB_PASSWORD"
dokploy db deploy postgres <postgresId>
Workflow 4: Domain Configuration
dokploy domain create \
--host api.example.com \
--app <appId> \
--https \
--cert letsencrypt
dokploy domain generate --app-name myapp
Workflow 5: CI/CD with GitHub Actions
name: Deploy to Dokploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
- name: Deploy
env:
DOKPLOY_URL: ${{ secrets.DOKPLOY_URL }}
DOKPLOY_TOKEN: ${{ secrets.DOKPLOY_TOKEN }}
run: |
deno run --allow-all ./cli/mod.ts app deploy ${{ secrets.APP_ID }}
Or with direct API call:
- name: Deploy to Dokploy
run: |
curl -X POST "${{ secrets.DOKPLOY_URL }}/api/application.deploy" \
-H "x-api-key: ${{ secrets.DOKPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"applicationId": "${{ secrets.APP_ID }}"}'
Command Reference (Custom CLI)
Auth Commands
dokploy auth login --url <url> --token <token>
dokploy auth logout
dokploy auth status
dokploy auth set-default --project <id> --environment <id>
Project Commands
dokploy project list
dokploy project get <projectId>
dokploy project create --name <name> [--description <desc>]
dokploy project delete <projectId> [--force]
Application Commands
dokploy app get <appId>
dokploy app create --name <name> --environment <envId> [--app-name <slug>]
dokploy app deploy <appId> [--title <title>]
dokploy app redeploy <appId>
dokploy app start <appId>
dokploy app stop <appId>
dokploy app delete <appId> [--force]
dokploy app env <appId>
dokploy app env <appId> --set KEY=value
dokploy app env <appId> --file .env
Compose Commands
dokploy compose get <composeId>
dokploy compose create --name <name> --environment <envId> [--file <path>] [--type docker-compose|stack]
dokploy compose deploy <composeId>
dokploy compose start <composeId>
dokploy compose stop <composeId>
dokploy compose delete <composeId> [--force]
dokploy compose file <composeId>
dokploy compose file <composeId> --set <path>
Domain Commands
dokploy domain list --app <appId>
dokploy domain list --compose <composeId>
dokploy domain get <domainId>
dokploy domain create --host <host> --app <appId> [--https] [--port <port>] [--path <path>]
dokploy domain create --host <host> --compose <composeId> --service <name>
dokploy domain delete <domainId> [--force]
dokploy domain generate --app-name <name>
Database Commands
dokploy db create <type> --name <name> --environment <envId> \
[--db-name <name>] [--db-user <user>] [--db-password <pass>] [--image <image>]
dokploy db deploy <type> <databaseId>
dokploy db start <type> <databaseId>
dokploy db stop <type> <databaseId>
dokploy db delete <type> <databaseId> [--force]
Server Commands
dokploy server list
dokploy server get <serverId>
dokploy server create --name <name> --ip <ip> --port <port> --user <user> --ssh-key <keyId> --type deploy|build
dokploy server validate <serverId>
dokploy server delete <serverId> [--force]
Docker Commands
dokploy docker containers [--server <serverId>]
dokploy docker restart <containerId> [--server <serverId>]
JSON Output
All commands support --json for machine-readable output:
dokploy project list --json | jq '.[].projectId'
dokploy app get abc123 --json > app-config.json
API Reference
The custom CLI uses these API endpoints:
| Category | Endpoints | Coverage |
|---|
| Auth | user.get | ✅ |
| Projects | project.all, project.one, project.create, project.remove | ✅ |
| Applications | application.* (27 endpoints) | ✅ |
| Compose | compose.* (26 endpoints) | ✅ |
| Domains | domain.* (9 endpoints) | ✅ |
| Databases | postgres.*, mysql.*, mariadb.*, mongo.*, redis.* | ✅ |
| Servers | server.* (16 endpoints) | ✅ |
| Docker | docker.* (7 endpoints) | ✅ |
See ./cli/lib/client.ts for the full typed API client.
Important Gotchas
Compose Source Types
When creating a compose stack, the default sourceType is github. For raw compose files (no git repo), you must update to sourceType: "raw":
import { DokployClient } from "./cli/lib/client.ts";
const client = await DokployClient.create();
await client.updateCompose("<composeId>", { sourceType: "raw" });
await client.updateCompose("<composeId>", {
env: `VAR1=value1
VAR2=value2`
});
Without this, deployment will fail with "Github Provider not found".
Compose File Compatibility
Dokploy does NOT support env_file directive in docker-compose.yml. You must:
- Inline all environment variables in the
environment section
- Use YAML anchors (
&anchor / *anchor) for shared env vars
- Set sensitive values via Dokploy's env var system (compose.update with
env field)
Before (won't work):
services:
app:
env_file:
- .env
After (works):
services:
app:
environment:
DB_HOST: "${DB_HOST}"
DB_PASS: "${DB_PASS}"
Domain + Deploy Order
After adding a domain to an application or compose stack, you must redeploy for Traefik to pick up the new routing:
dokploy domain create --host example.com --compose <id> --service web --https
dokploy compose deploy <id>
Network Requirements
All services must be on dokploy-network (external) to be routable:
services:
web:
networks:
- dokploy-network
networks:
dokploy-network:
external: true
Troubleshooting
Authentication Issues
dokploy auth status
dokploy auth login --url https://... --token ...
env | grep DOKPLOY
Deployment Failures
- Check application/compose status:
dokploy compose get <id> or dokploy app get <id>
- Check deployment history via API for error messages
- Common errors:
- "Github Provider not found" → Set
sourceType: "raw" for direct compose files
- "env_file not found" → Inline env vars, Dokploy doesn't support env_file
- Container not routing → Ensure service is on
dokploy-network and redeploy after adding domain
- Verify health endpoint responds
- Check Dokploy web UI for deployment logs
- Ensure
dokploy-network exists: docker network ls
Missing IDs
Run list commands to find IDs:
dokploy project list --json | jq '.[] | {id: .projectId, name: .name}'
dokploy project get <projectId> --json | jq '.environments[] | {id: .environmentId, name: .name}'
Resources
Example: Full Compose Deployment
Complete example deploying a multi-service app with database:
dokploy compose create --name "MyApp" --environment <envId> --file docker-compose.yml
deno run --allow-all - <<'EOF'
import { DokployClient } from "./cli/lib/client.ts";
const client = await DokployClient.create();
await client.updateCompose("<composeId>", {
sourceType: "raw",
env: `DB_PASSWORD=secretpass123
REDIS_URL=redis://redis:6379`
});
console.log("Updated!");
EOF
dokploy compose deploy <composeId>
dokploy docker containers | grep <app-name>
dokploy domain create --host myapp.example.com --compose <composeId> --service web --https --port 80
dokploy compose deploy <composeId>
curl https://myapp.example.com/health