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,
};
}),