diff --git a/apps/dokploy/components/dashboard/settings/cluster/nodes/add-node.tsx b/apps/dokploy/components/dashboard/settings/cluster/nodes/add-node.tsx index a59681ba..966055b4 100644 --- a/apps/dokploy/components/dashboard/settings/cluster/nodes/add-node.tsx +++ b/apps/dokploy/components/dashboard/settings/cluster/nodes/add-node.tsx @@ -12,6 +12,7 @@ import { ExternalLink, PlusIcon } from "lucide-react"; import Link from "next/link"; import { AddManager } from "./manager/add-manager"; import { AddWorker } from "./workers/add-worker"; +import { AlertBlock } from "@/components/shared/alert-block"; interface Props { serverId?: string; @@ -48,6 +49,10 @@ export const AddNode = ({ serverId }: Props) => { Architecture + + Make sure you use the same architecture as the node you are + adding. +
diff --git a/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes.tsx b/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes.tsx index 46cf3058..827fc520 100644 --- a/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes.tsx +++ b/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes.tsx @@ -144,7 +144,7 @@ export const ShowNodes = ({ serverId }: Props) => { Actions - {node?.ManagerStatus?.Leader && ( + {!node?.ManagerStatus?.Leader && ( { - if (IS_CLOUD) { - return []; - } - const docker = await getRemoteDocker(input.serverId); const workers: DockerNode[] = await docker.listNodes(); @@ -33,17 +30,17 @@ export const clusterRouter = createTRPCRouter({ }), ) .mutation(async ({ input }) => { - if (IS_CLOUD) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "Functionality not available in cloud version", - }); - } try { - await execAsync( - `docker node update --availability drain ${input.nodeId}`, - ); - await execAsync(`docker node rm ${input.nodeId} --force`); + const drainCommand = `docker node update --availability drain ${input.nodeId}`; + const removeCommand = `docker node rm ${input.nodeId} --force`; + + if (input.serverId) { + await execAsyncRemote(input.serverId, drainCommand); + await execAsyncRemote(input.serverId, removeCommand); + } else { + await execAsync(drainCommand); + await execAsync(removeCommand); + } return true; } catch (error) { throw new TRPCError({ @@ -60,20 +57,20 @@ export const clusterRouter = createTRPCRouter({ }), ) .query(async ({ input }) => { - if (IS_CLOUD) { - return { - command: "", - version: "", - }; - } const docker = await getRemoteDocker(input.serverId); const result = await docker.swarmInspect(); const docker_version = await docker.version(); + let ip = await getPublicIpWithFallback(); + if (input.serverId) { + const server = await findServerById(input.serverId); + ip = server?.ipAddress; + } + return { command: `docker swarm join --token ${ result.JoinTokens.Worker - } ${await getPublicIpWithFallback()}:2377`, + } ${ip}:2377`, version: docker_version.Version, }; }), @@ -84,19 +81,19 @@ export const clusterRouter = createTRPCRouter({ }), ) .query(async ({ input }) => { - if (IS_CLOUD) { - return { - command: "", - version: "", - }; - } const docker = await getRemoteDocker(input.serverId); const result = await docker.swarmInspect(); const docker_version = await docker.version(); + + let ip = await getPublicIpWithFallback(); + if (input.serverId) { + const server = await findServerById(input.serverId); + ip = server?.ipAddress; + } return { command: `docker swarm join --token ${ result.JoinTokens.Manager - } ${await getPublicIpWithFallback()}:2377`, + } ${ip}:2377`, version: docker_version.Version, }; }),