refactor(dokploy): prevent start worker when is cloud

This commit is contained in:
Mauricio Siu
2024-10-25 16:56:32 -06:00
parent 182f908c31
commit 421c93795b
11 changed files with 61 additions and 84 deletions

View File

@@ -1,6 +1,6 @@
import { db } from "@/server/db"; import { db } from "@/server/db";
import { applications } from "@/server/db/schema"; import { applications } from "@/server/db/schema";
import type { DeploymentJob } from "@/server/queues/deployments-queue"; import type { DeploymentJob } from "@/server/queues/queue-types";
import { myQueue } from "@/server/queues/queueSetup"; import { myQueue } from "@/server/queues/queueSetup";
import { deploy } from "@/server/utils/deploy"; import { deploy } from "@/server/utils/deploy";
import { IS_CLOUD } from "@dokploy/server"; import { IS_CLOUD } from "@dokploy/server";

View File

@@ -1,6 +1,6 @@
import { db } from "@/server/db"; import { db } from "@/server/db";
import { compose } from "@/server/db/schema"; import { compose } from "@/server/db/schema";
import type { DeploymentJob } from "@/server/queues/deployments-queue"; import type { DeploymentJob } from "@/server/queues/queue-types";
import { myQueue } from "@/server/queues/queueSetup"; import { myQueue } from "@/server/queues/queueSetup";
import { deploy } from "@/server/utils/deploy"; import { deploy } from "@/server/utils/deploy";
import { IS_CLOUD } from "@dokploy/server"; import { IS_CLOUD } from "@dokploy/server";

View File

@@ -1,6 +1,6 @@
import { db } from "@/server/db"; import { db } from "@/server/db";
import { applications, compose, github } from "@/server/db/schema"; import { applications, compose, github } from "@/server/db/schema";
import type { DeploymentJob } from "@/server/queues/deployments-queue"; import type { DeploymentJob } from "@/server/queues/queue-types";
import { myQueue } from "@/server/queues/queueSetup"; import { myQueue } from "@/server/queues/queueSetup";
import { deploy } from "@/server/utils/deploy"; import { deploy } from "@/server/utils/deploy";
import { IS_CLOUD } from "@dokploy/server"; import { IS_CLOUD } from "@dokploy/server";

View File

@@ -19,11 +19,8 @@ import {
apiUpdateApplication, apiUpdateApplication,
applications, applications,
} from "@/server/db/schema"; } from "@/server/db/schema";
import { import type { DeploymentJob } from "@/server/queues/queue-types";
type DeploymentJob, import { cleanQueuesByApplication, myQueue } from "@/server/queues/queueSetup";
cleanQueuesByApplication,
} from "@/server/queues/deployments-queue";
import { myQueue } from "@/server/queues/queueSetup";
import { deploy } from "@/server/utils/deploy"; import { deploy } from "@/server/utils/deploy";
import { uploadFileSchema } from "@/utils/schema"; import { uploadFileSchema } from "@/utils/schema";
import { import {

View File

@@ -9,11 +9,7 @@ import {
apiUpdateCompose, apiUpdateCompose,
compose, compose,
} from "@/server/db/schema"; } from "@/server/db/schema";
import { import { cleanQueuesByCompose, myQueue } from "@/server/queues/queueSetup";
type DeploymentJob,
cleanQueuesByCompose,
} from "@/server/queues/deployments-queue";
import { myQueue } from "@/server/queues/queueSetup";
import { templates } from "@/templates/templates"; import { templates } from "@/templates/templates";
import type { TemplatesKeys } from "@/templates/types/templates-data.type"; import type { TemplatesKeys } from "@/templates/types/templates-data.type";
import { import {
@@ -28,6 +24,7 @@ import _ from "lodash";
import { nanoid } from "nanoid"; import { nanoid } from "nanoid";
import { createTRPCRouter, protectedProcedure } from "../trpc"; import { createTRPCRouter, protectedProcedure } from "../trpc";
import type { DeploymentJob } from "@/server/queues/queue-types";
import { deploy } from "@/server/utils/deploy"; import { deploy } from "@/server/utils/deploy";
import { import {
IS_CLOUD, IS_CLOUD,
@@ -41,7 +38,6 @@ import {
createComposeByTemplate, createComposeByTemplate,
createDomain, createDomain,
createMount, createMount,
findAdmin,
findAdminById, findAdminById,
findComposeById, findComposeById,
findDomainsByComposeId, findDomainsByComposeId,

View File

@@ -11,29 +11,8 @@ import {
updateCompose, updateCompose,
} from "@dokploy/server"; } from "@dokploy/server";
import { type Job, Worker } from "bullmq"; import { type Job, Worker } from "bullmq";
import { myQueue, redisConfig } from "./queueSetup"; import type { DeploymentJob } from "./queue-types";
import { redisConfig } from "./redis-connection";
type DeployJob =
| {
applicationId: string;
titleLog: string;
descriptionLog: string;
server?: boolean;
type: "deploy" | "redeploy";
applicationType: "application";
serverId?: string;
}
| {
composeId: string;
titleLog: string;
descriptionLog: string;
server?: boolean;
type: "deploy" | "redeploy";
applicationType: "compose";
serverId?: string;
};
export type DeploymentJob = DeployJob;
export const deploymentWorker = new Worker( export const deploymentWorker = new Worker(
"deployments", "deployments",
@@ -114,25 +93,3 @@ export const deploymentWorker = new Worker(
connection: redisConfig, connection: redisConfig,
}, },
); );
export const cleanQueuesByApplication = async (applicationId: string) => {
const jobs = await myQueue.getJobs(["waiting", "delayed"]);
for (const job of jobs) {
if (job?.data?.applicationId === applicationId) {
await job.remove();
console.log(`Removed job ${job.id} for application ${applicationId}`);
}
}
};
export const cleanQueuesByCompose = async (composeId: string) => {
const jobs = await myQueue.getJobs(["waiting", "delayed"]);
for (const job of jobs) {
if (job?.data?.composeId === composeId) {
await job.remove();
console.log(`Removed job ${job.id} for compose ${composeId}`);
}
}
};

View File

@@ -0,0 +1,21 @@
type DeployJob =
| {
applicationId: string;
titleLog: string;
descriptionLog: string;
server?: boolean;
type: "deploy" | "redeploy";
applicationType: "application";
serverId?: string;
}
| {
composeId: string;
titleLog: string;
descriptionLog: string;
server?: boolean;
type: "deploy" | "redeploy";
applicationType: "compose";
serverId?: string;
};
export type DeploymentJob = DeployJob;

View File

@@ -1,8 +1,6 @@
import { type ConnectionOptions, Queue } from "bullmq"; import { Queue } from "bullmq";
import { redisConfig } from "./redis-connection";
export const redisConfig: ConnectionOptions = {
host: process.env.NODE_ENV === "production" ? "dokploy-redis" : "127.0.0.1",
};
const myQueue = new Queue("deployments", { const myQueue = new Queue("deployments", {
connection: redisConfig, connection: redisConfig,
}); });
@@ -21,4 +19,26 @@ myQueue.on("error", (error) => {
} }
}); });
export const cleanQueuesByApplication = async (applicationId: string) => {
const jobs = await myQueue.getJobs(["waiting", "delayed"]);
for (const job of jobs) {
if (job?.data?.applicationId === applicationId) {
await job.remove();
console.log(`Removed job ${job.id} for application ${applicationId}`);
}
}
};
export const cleanQueuesByCompose = async (composeId: string) => {
const jobs = await myQueue.getJobs(["waiting", "delayed"]);
for (const job of jobs) {
if (job?.data?.composeId === composeId) {
await job.remove();
console.log(`Removed job ${job.id} for compose ${composeId}`);
}
}
};
export { myQueue }; export { myQueue };

View File

@@ -0,0 +1,5 @@
import type { ConnectionOptions } from "bullmq";
export const redisConfig: ConnectionOptions = {
host: process.env.NODE_ENV === "production" ? "dokploy-redis" : "127.0.0.1",
};

View File

@@ -19,10 +19,7 @@ import { setupDockerContainerLogsWebSocketServer } from "./wss/docker-container-
import { setupDockerContainerTerminalWebSocketServer } from "./wss/docker-container-terminal"; import { setupDockerContainerTerminalWebSocketServer } from "./wss/docker-container-terminal";
import { setupDockerStatsMonitoringSocketServer } from "./wss/docker-stats"; import { setupDockerStatsMonitoringSocketServer } from "./wss/docker-stats";
import { setupDeploymentLogsWebSocketServer } from "./wss/listen-deployment"; import { setupDeploymentLogsWebSocketServer } from "./wss/listen-deployment";
import { import { setupTerminalWebSocketServer } from "./wss/terminal";
getPublicIpWithFallback,
setupTerminalWebSocketServer,
} from "./wss/terminal";
config({ path: ".env" }); config({ path: ".env" });
const PORT = Number.parseInt(process.env.PORT || "3000", 10); const PORT = Number.parseInt(process.env.PORT || "3000", 10);
@@ -55,7 +52,6 @@ void app.prepare().then(async () => {
await initializeRedis(); await initializeRedis();
initCronJobs(); initCronJobs();
welcomeServer();
// Timeout to wait for the database to be ready // Timeout to wait for the database to be ready
await new Promise((resolve) => setTimeout(resolve, 7000)); await new Promise((resolve) => setTimeout(resolve, 7000));
@@ -78,18 +74,3 @@ void app.prepare().then(async () => {
console.error("Main Server Error", e); console.error("Main Server Error", e);
} }
}); });
async function welcomeServer() {
const ip = await getPublicIpWithFallback();
console.log(
[
"",
"",
"Dokploy server is up and running!",
"Please wait for 15 seconds before opening the browser.",
` http://${ip}:${PORT}`,
"",
"",
].join("\n"),
);
}

View File

@@ -1,5 +1,5 @@
import { findServerById } from "@dokploy/server"; import { findServerById } from "@dokploy/server";
import type { DeploymentJob } from "../queues/deployments-queue"; import type { DeploymentJob } from "../queues/queue-types";
export const deploy = async (jobData: DeploymentJob) => { export const deploy = async (jobData: DeploymentJob) => {
try { try {