mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-09-12 19:51:00 +05:00
fix(compose): add migration for serviceScales and strengthen command escaping (#2579)
This commit is contained in:
parent
193e8e2682
commit
30368d5297
1
apps/dokploy/drizzle/0197_breezy_mentallo.sql
Normal file
1
apps/dokploy/drizzle/0197_breezy_mentallo.sql
Normal file
@ -0,0 +1 @@
|
||||
ALTER TABLE "compose" ADD COLUMN "serviceScales" jsonb DEFAULT '[]'::jsonb;
|
||||
9177
apps/dokploy/drizzle/meta/0197_snapshot.json
Normal file
9177
apps/dokploy/drizzle/meta/0197_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1380,6 +1380,13 @@
|
||||
"when": 1788995453103,
|
||||
"tag": "0196_worthless_ravenous",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 197,
|
||||
"version": "7",
|
||||
"when": 1789141420032,
|
||||
"tag": "0197_breezy_mentallo",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -219,7 +219,10 @@ const createSchema = createInsertSchema(compose, {
|
||||
serviceScales: z
|
||||
.array(
|
||||
z.object({
|
||||
serviceName: z.string(),
|
||||
serviceName: z
|
||||
.string()
|
||||
.min(1)
|
||||
.regex(/^[a-zA-Z0-9._-]+$/, "Invalid service name"),
|
||||
replicas: z.number().int().min(0),
|
||||
}),
|
||||
)
|
||||
@ -304,7 +307,10 @@ export const apiRandomizeCompose = createSchema
|
||||
|
||||
export const apiScaleComposeService = z.object({
|
||||
composeId: z.string().min(1),
|
||||
serviceName: z.string().min(1),
|
||||
serviceName: z
|
||||
.string()
|
||||
.min(1)
|
||||
.regex(/^[a-zA-Z0-9._-]+$/, "Invalid service name"),
|
||||
replicas: z.number().int().min(0),
|
||||
});
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { join } from "node:path";
|
||||
import { dirname, join } from "node:path";
|
||||
import { paths } from "@dokploy/server/constants";
|
||||
import { db } from "@dokploy/server/db";
|
||||
import {
|
||||
@ -603,7 +603,15 @@ export const scaleComposeService = async (
|
||||
if (compose.composeType === "docker-compose") {
|
||||
const { COMPOSE_PATH } = paths(!!compose.serverId);
|
||||
const projectPath = join(COMPOSE_PATH, compose.appName, "code");
|
||||
const scaleCommand = `cd ${quote([projectPath])} && env -i PATH="$PATH" HOME="$HOME" docker compose -p ${quote([compose.appName])} up -d --no-build --scale ${quote([`${serviceName}=${replicas}`])} ${quote([serviceName])}`;
|
||||
const path =
|
||||
compose.sourceType === "raw"
|
||||
? "docker-compose.yml"
|
||||
: compose.composePath || "docker-compose.yml";
|
||||
const projectDirectoryFlag = `--project-directory ${quote([projectPath])} `;
|
||||
const envFileFlag = compose.createEnvFile
|
||||
? `--env-file ${quote([join(dirname(compose.composePath || "docker-compose.yml"), ".env")])} `
|
||||
: "";
|
||||
const scaleCommand = `cd ${quote([projectPath])} && env -i PATH="$PATH" HOME="$HOME" docker compose -p ${quote([compose.appName])} ${projectDirectoryFlag}${envFileFlag}-f ${quote([path])} up -d --no-build --scale ${quote([`${serviceName}=${replicas}`])} ${quote([serviceName])}`;
|
||||
if (compose.serverId) {
|
||||
await execAsyncRemote(compose.serverId, scaleCommand);
|
||||
} else {
|
||||
|
||||
@ -72,7 +72,7 @@ Compose Type: ${composeType} ✅`;
|
||||
.sort((a, b) => a.serviceName.localeCompare(b.serviceName))
|
||||
.map(
|
||||
(s) =>
|
||||
`docker service scale ${compose.appName}_${s.serviceName}=${s.replicas} >/dev/null 2>&1 || true;`,
|
||||
`docker service scale ${compose.appName}_${s.serviceName}=${s.replicas};`,
|
||||
)
|
||||
.join("\n\t\t")
|
||||
: ""
|
||||
|
||||
Loading…
Reference in New Issue
Block a user