You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Duplicate Services dialog currently allows selecting a new project or an existing environment, but it does not allow selecting a different deployment server.
The duplicate API also has no targetServerId. Because each source service record is copied into the create call, its existing serverId is retained. As a result, duplicated applications, Compose services, and databases are always assigned to the same server as their source, even when other registered remote servers are available.
This makes it unnecessarily difficult to use duplication for staging, load distribution, or creating a stateless copy on another host.
Describe the solution you'd like
Add an optional Target server selector to the existing Duplicate Services dialog.
Default to the source server to preserve current behavior.
List only accessible, active deployment servers with a usable SSH key, plus the local Dokploy server where supported.
Add an optional targetServerId to the duplicate API and explicitly override the copied serverId for every selected service.
Validate target-server access on the server side rather than trusting the submitted ID.
Handle server-specific settings such as custom Docker networks by resetting them or requiring an explicit mapping when they are unavailable on the target.
Clearly explain mount behavior:
file mounts can be recreated from stored configuration;
named-volume configuration may be duplicated, but volume contents are not copied;
bind mounts require the configured host path to exist on the target server.
Show a confirmation summary containing the target project, environment, and server before duplication.
Full stateful migration and automatic volume transfer should remain separate from duplication and is already covered by #2260.
Suggested acceptance criteria:
A user can duplicate supported services to a different registered remote server.
Omitting the target server keeps the current source-server behavior.
Unauthorized, inactive, non-deployment, and source-equivalent targets are rejected appropriately.
The resulting service records contain the selected target serverId.
The UI warns that persistent volume data and bind-mount contents are not copied.
Server-specific network references cannot silently point to networks unavailable on the target.
Describe alternatives you've considered
Duplicate on the current server and then manually edit the database: unsafe and unsupported because normal update schemas intentionally do not expose serverId.
Recreate every service manually on the target server: works, but is slow and error-prone for services with substantial configuration.
components/dashboard/project/duplicate-project.tsx only collects project/environment destination data.
server/api/routers/project.ts duplicates service records by spreading the source entity into the corresponding create call, which retains serverId.
Applications, Compose services, and supported database create schemas already accept serverId, so an explicit validated override fits the existing data model.
What problem will this feature address?
The Duplicate Services dialog currently allows selecting a new project or an existing environment, but it does not allow selecting a different deployment server.
The duplicate API also has no
targetServerId. Because each source service record is copied into the create call, its existingserverIdis retained. As a result, duplicated applications, Compose services, and databases are always assigned to the same server as their source, even when other registered remote servers are available.This makes it unnecessarily difficult to use duplication for staging, load distribution, or creating a stateless copy on another host.
Describe the solution you'd like
Add an optional Target server selector to the existing Duplicate Services dialog.
targetServerIdto the duplicate API and explicitly override the copiedserverIdfor every selected service.Full stateful migration and automatic volume transfer should remain separate from duplication and is already covered by #2260.
Suggested acceptance criteria:
serverId.Describe alternatives you've considered
serverId.Additional context
Current implementation observations:
components/dashboard/project/duplicate-project.tsxonly collects project/environment destination data.server/api/routers/project.tsduplicates service records by spreading the source entity into the corresponding create call, which retainsserverId.serverId, so an explicit validated override fits the existing data model.Will you send a PR to implement it?
Maybe, need help