From 9379d4a31d42474d283c97faa1df6a91810627c9 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Thu, 15 Aug 2024 01:25:36 -0600 Subject: [PATCH] refactor(domains): update labels --- apps/dokploy/server/api/services/compose.ts | 1 + apps/dokploy/server/utils/builders/compose.ts | 16 +++++++++---- apps/dokploy/server/utils/docker/domain.ts | 24 +++++++++++++++++-- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/apps/dokploy/server/api/services/compose.ts b/apps/dokploy/server/api/services/compose.ts index b212a7e7..bd949bc3 100644 --- a/apps/dokploy/server/api/services/compose.ts +++ b/apps/dokploy/server/api/services/compose.ts @@ -91,6 +91,7 @@ export const findComposeById = async (composeId: string) => { project: true, deployments: true, mounts: true, + domains: true, }, }); if (!result) { diff --git a/apps/dokploy/server/utils/builders/compose.ts b/apps/dokploy/server/utils/builders/compose.ts index 9212cf60..4f72f46d 100644 --- a/apps/dokploy/server/utils/builders/compose.ts +++ b/apps/dokploy/server/utils/builders/compose.ts @@ -8,20 +8,28 @@ import { dirname, join } from "node:path"; import { COMPOSE_PATH } from "@/server/constants"; import type { InferResultType } from "@/server/types/with"; import boxen from "boxen"; +import { writeDomainsToCompose } from "../docker/domain"; import { prepareEnvironmentVariables } from "../docker/utils"; import { spawnAsync } from "../process/spawnAsync"; export type ComposeNested = InferResultType< "compose", - { project: true; mounts: true } + { project: true; mounts: true; domains: true } >; export const buildCompose = async (compose: ComposeNested, logPath: string) => { const writeStream = createWriteStream(logPath, { flags: "a" }); - const { sourceType, appName, mounts, composeType, env, composePath } = - compose; + const { + sourceType, + appName, + mounts, + composeType, + env, + composePath, + domains, + } = compose; try { const command = createCommand(compose); - + await writeDomainsToCompose(compose, domains); createEnvFile(compose); const logContent = ` diff --git a/apps/dokploy/server/utils/docker/domain.ts b/apps/dokploy/server/utils/docker/domain.ts index 934d0058..7b189306 100644 --- a/apps/dokploy/server/utils/docker/domain.ts +++ b/apps/dokploy/server/utils/docker/domain.ts @@ -1,4 +1,5 @@ -import fs, { existsSync, readFileSync } from "node:fs"; +import fs, { existsSync, readFileSync, writeSync } from "node:fs"; +import { writeFile } from "node:fs/promises"; import { join } from "node:path"; import type { Compose } from "@/server/api/services/compose"; import type { Domain } from "@/server/api/services/domain"; @@ -8,6 +9,7 @@ import { cloneGitRawRepository } from "../providers/git"; import { cloneRawGithubRepository } from "../providers/github"; import { createComposeFileRaw } from "../providers/raw"; import type { ComposeSpecification } from "./types"; + export const cloneCompose = async (compose: Compose) => { if (compose.sourceType === "github") { await cloneRawGithubRepository(compose); @@ -53,6 +55,24 @@ export const readComposeFile = async (compose: Compose) => { return null; }; +export const writeDomainsToCompose = async ( + compose: Compose, + domains: Domain[], +) => { + if (!domains.length) { + return; + } + const composeConverted = await addDomainToCompose(compose, domains); + + const path = getComposePath(compose); + const composeString = dump(composeConverted, { lineWidth: 1000 }); + try { + await writeFile(path, composeString, "utf8"); + } catch (error) { + throw error; + } +}; + export const addDomainToCompose = async ( compose: Compose, domains: Domain[], @@ -125,7 +145,7 @@ export const createDomainLabels = async ( const { host, port, https, uniqueConfigKey, certificateType } = domain; const labels = [ - `traefik.http.routers.${appName}-${uniqueConfigKey}-${entrypoint}.ruleHost(\`${host}\`)`, + `traefik.http.routers.${appName}-${uniqueConfigKey}-${entrypoint}.rule=Host(\`${host}\`)`, `traefik.http.services.${appName}-${uniqueConfigKey}-${entrypoint}.loadbalancer.server.port=${port}`, `traefik.http.routers.${appName}-${uniqueConfigKey}-${entrypoint}.entrypoints=${entrypoint}`, ];