Dokploy lets you manage an entire fleet of servers from a single dashboard. Rather than SSH-ing into each machine manually, you register remote servers in Dokploy, attach an SSH key, and then deploy any application, database, or Docker Compose stack to any server in your fleet — all without leaving the UI.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Nettalco/dokploy/llms.txt
Use this file to discover all available pages before exploring further.
How Multi-Server Works
Your primary Dokploy installation acts as the control plane. When you add a remote server, Dokploy stores its host address, SSH port, and a reference to an SSH key. Every subsequent operation — setup, validation, deployment — is performed by Dokploy over SSH from the primary node to the remote host. Applications and databases created inside Dokploy all carry an optionalserverId. When a serverId is present, Dokploy executes Docker commands on the remote host via execAsyncRemote. When no serverId is set, commands run on the local (primary) server.
The multi-server feature requires a valid Enterprise license. The API will return a
FORBIDDEN error if you try to list servers for permission-management purposes without a valid license.Adding a Remote Server
Open the Servers page
In the Dokploy dashboard, navigate to Settings → Servers, then click Add Server.
Enter connection details
Fill in:
- Name – a friendly label for the server
- IP Address / Host – the public IP or hostname of the remote VPS
- Port – SSH port (default:
22) - Username – the OS user Dokploy will SSH as (e.g.,
rootorubuntu)
Attach an SSH key
Select an existing SSH key from the drop-down, or create a new one (see SSH Key Management below). The key must already be authorised on the remote server.
Validate the connection
Click Validate. Dokploy calls
server.validate internally (serverValidate), which checks that all required tools are reachable. The response includes the versions and enabled state of:| Component | Field |
|---|---|
| Docker | docker.enabled, docker.version |
| Rclone | rclone.enabled, rclone.version |
| Nixpacks | nixpacks.enabled, nixpacks.version |
| Buildpacks | buildpacks.enabled, buildpacks.version |
| Railpack | railpack.enabled, railpack.version |
| Dokploy network | isDokployNetworkInstalled |
| Swarm | isSwarmInstalled |
| Main directory | isMainDirectoryInstalled |
SSH Key Management
Dokploy uses SSH key pairs to authenticate against remote servers. Keys are stored per-organisation and can be reused across multiple servers.Generating a key
Use Settings → SSH Keys → Generate (callssshKey.generate → generateSSHKey). You can choose the key algorithm type. Dokploy returns the private key and the corresponding public key.
Adding a key manually
If you already have a key pair, use Add SSH Key and paste the private key. The public key portion is derived automatically. This callssshKey.create on the backend.
Authorising the key on the remote server
Copy the public key and append it to~/.ssh/authorized_keys on the remote host:
Key lifecycle
| Operation | API call |
|---|---|
| List all keys | sshKey.all |
| Read one key | sshKey.one |
| Update key | sshKey.update |
| Delete key | sshKey.remove |
Server Setup
server.setup (internally serverSetup) performs a full provisioning run on the remote host over SSH. It installs:
- Docker Engine – container runtime
- Dokploy network – an overlay Docker network used for internal service communication
- Build tooling – Nixpacks, Buildpacks, Railpack for image building
- Rclone – used for backup destination access
- Main Dokploy working directories
server.setupWithLogs, a TRPC subscription that emits each log line as it arrives.
Server Validation
Runserver.validate at any time to confirm that a remote server is correctly configured. The check is non-destructive and returns a structured health snapshot:
Deploying to a Specific Server
When creating an application, Docker Compose stack, or managed database, you will see a Server selector. Choose the registered remote server you want to deploy to. Dokploy stores theserverId on the resource and routes all subsequent deploy, restart, and log operations to that host.
You can query which server a resource belongs to at any time via server.one.
Build Servers
A server can be designated as a build server (serverType: "build"). Build servers are used exclusively for building Docker images — the resulting image is pushed to a registry and then pulled by the deploy server. This offloads CPU-intensive compilation away from production hosts.
Call server.buildServers to retrieve the list of all active build servers associated with your organisation. When creating an application, select a build server to route image builds to that host.
Build concurrency per server can be tuned with server.updateBuildsConcurrency.
Server Monitoring
Per-server resource metrics are available viaserver.getServerMetrics. This endpoint fetches time-series data from the monitoring sidecar (see Monitoring):
Removing a Server
Before removing a server, all active services running on it must be deleted. Dokploy enforces this viahaveActiveServices — if any applications, databases, or compose stacks are still assigned to the server, the removal will be blocked with:
Server has active services, please delete them first
Once the server is empty, call server.remove. Dokploy will:
- Audit-log the deletion event
- Remove all deployment records associated with the server (
removeDeploymentsByServerId) - Delete the server record from the database