mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
refactor: used docker stack config
This commit is contained in:
@@ -15,7 +15,7 @@ import {
|
|||||||
writeDomainsToComposeRemote,
|
writeDomainsToComposeRemote,
|
||||||
} from "../docker/domain";
|
} from "../docker/domain";
|
||||||
import { encodeBase64, prepareEnvironmentVariables } from "../docker/utils";
|
import { encodeBase64, prepareEnvironmentVariables } from "../docker/utils";
|
||||||
import { execAsyncRemote } from "../process/execAsync";
|
import { execAsync, execAsyncRemote } from "../process/execAsync";
|
||||||
import { spawnAsync } from "../process/spawnAsync";
|
import { spawnAsync } from "../process/spawnAsync";
|
||||||
|
|
||||||
export type ComposeNested = InferResultType<
|
export type ComposeNested = InferResultType<
|
||||||
@@ -30,7 +30,7 @@ export const buildCompose = async (compose: ComposeNested, logPath: string) => {
|
|||||||
const command = createCommand(compose);
|
const command = createCommand(compose);
|
||||||
await writeDomainsToCompose(compose, domains);
|
await writeDomainsToCompose(compose, domains);
|
||||||
createEnvFile(compose);
|
createEnvFile(compose);
|
||||||
processComposeFile(compose);
|
await processComposeFile(compose);
|
||||||
|
|
||||||
const logContent = `
|
const logContent = `
|
||||||
App Name: ${appName}
|
App Name: ${appName}
|
||||||
@@ -194,44 +194,34 @@ const createEnvFile = (compose: ComposeNested) => {
|
|||||||
writeFileSync(envFilePath, envFileContent);
|
writeFileSync(envFilePath, envFileContent);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const processComposeFile = (compose: ComposeNested) => {
|
export const processComposeFile = async (compose: ComposeNested) => {
|
||||||
const { COMPOSE_PATH } = paths();
|
const { COMPOSE_PATH } = paths();
|
||||||
const { env, appName, sourceType, composeType } = compose;
|
let command = getProcessComposeFileCommand(compose);
|
||||||
|
|
||||||
const inputPath =
|
if (compose.serverId) {
|
||||||
sourceType === "raw" ? "docker-compose.yml" : compose.composePath;
|
command = `cd ${join(COMPOSE_PATH, compose.appName, "code")} && ${command}`;
|
||||||
const composeInputFilePath =
|
await execAsyncRemote(compose.serverId, command);
|
||||||
join(COMPOSE_PATH, appName, "code", inputPath) ||
|
} else {
|
||||||
join(COMPOSE_PATH, appName, "code", "docker-compose.yml");
|
await execAsync(command, {
|
||||||
|
cwd: join(COMPOSE_PATH, compose.appName, "code"),
|
||||||
const outputPath = "docker-compose.processed.yml";
|
});
|
||||||
const composeOutputFilePath =
|
|
||||||
join(COMPOSE_PATH, appName, "code", outputPath) ||
|
|
||||||
join(COMPOSE_PATH, appName, "code", "docker-compose.processed.yml");
|
|
||||||
|
|
||||||
let templateContent = readFileSync(composeInputFilePath, "utf8");
|
|
||||||
|
|
||||||
if (composeType === "stack") {
|
|
||||||
const envContent = prepareEnvironmentVariables(env || "").join("\n");
|
|
||||||
const envVariables = dotenv.parse(envContent);
|
|
||||||
|
|
||||||
templateContent = templateContent.replace(
|
|
||||||
/\$\{([^}]+)\}/g,
|
|
||||||
(_, varName) => {
|
|
||||||
return envVariables[varName] || "";
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
writeFileSync(composeOutputFilePath, templateContent);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getProcessComposeFileCommand = (compose: ComposeNested) => {
|
export const getProcessComposeFileCommand = (compose: ComposeNested) => {
|
||||||
const { composeType } = compose;
|
const { composeType } = compose;
|
||||||
|
|
||||||
|
let command = "";
|
||||||
|
|
||||||
if (composeType === "stack") {
|
if (composeType === "stack") {
|
||||||
return "set -a; source .env; set +a; envsubst < docker-compose.yml > docker-compose.processed.yml";
|
command = `export $(grep -v '^#' .env | xargs) && docker stack config -c docker-compose.yml > docker-compose.processed.yml`;
|
||||||
}
|
}
|
||||||
return "cp docker-compose.yml docker-compose.processed.yml";
|
|
||||||
|
if (composeType === "docker-compose") {
|
||||||
|
command = "cp docker-compose.yml docker-compose.processed.yml";
|
||||||
|
}
|
||||||
|
|
||||||
|
return command;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getCreateEnvFileCommand = (compose: ComposeNested) => {
|
export const getCreateEnvFileCommand = (compose: ComposeNested) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user