From 8c260eff72c424eeb05f01ad9eb28509a33d68d5 Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Wed, 19 Mar 2025 00:51:27 -0600
Subject: [PATCH 1/2] feat(cluster): enhance AddNode and ShowNodes components
for better user guidance and functionality
- Added an AlertBlock in AddNode to inform users about architecture compatibility when adding nodes.
- Updated ShowNodes to correctly handle node deletion actions based on ManagerStatus.
- Refactored cluster API to remove cloud-specific checks and improve command execution for remote servers.
---
.../settings/cluster/nodes/add-node.tsx | 5 ++
.../settings/cluster/nodes/show-nodes.tsx | 2 +-
apps/dokploy/server/api/routers/cluster.ts | 55 +++++++++----------
3 files changed, 32 insertions(+), 30 deletions(-)
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,
};
}),
From 03bd4398d0b37d282cdfce5df75413ef2b538b6d Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Wed, 19 Mar 2025 00:51:49 -0600
Subject: [PATCH 2/2] chore(package): bump version to v0.20.8
---
apps/dokploy/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json
index 1d7ad131..22649f92 100644
--- a/apps/dokploy/package.json
+++ b/apps/dokploy/package.json
@@ -1,6 +1,6 @@
{
"name": "dokploy",
- "version": "v0.20.7",
+ "version": "v0.20.8",
"private": true,
"license": "Apache-2.0",
"type": "module",