feat: add support for custom entry point

This commit is contained in:
mkarpats
2025-10-19 14:50:17 +03:00
parent ceb4cc453e
commit 84d311802f
9 changed files with 6775 additions and 9 deletions

View File

@@ -31,6 +31,7 @@ export const domains = pgTable("domain", {
host: text("host").notNull(),
https: boolean("https").notNull().default(false),
port: integer("port").default(3000),
customEntrypoint: text("customEntrypoint"),
path: text("path").default("/"),
serviceName: text("serviceName"),
domainType: domainType("domainType").default("application"),
@@ -76,6 +77,7 @@ export const apiCreateDomain = createSchema.pick({
host: true,
path: true,
port: true,
customEntrypoint: true,
https: true,
applicationId: true,
certificateType: true,
@@ -111,6 +113,7 @@ export const apiUpdateDomain = createSchema
host: true,
path: true,
port: true,
customEntrypoint: true,
https: true,
certificateType: true,
customCertResolver: true,

View File

@@ -220,8 +220,8 @@ export const addDomainToCompose = async (
throw new Error(`The service ${serviceName} not found in the compose`);
}
const httpLabels = createDomainLabels(appName, domain, "web");
if (https) {
const httpLabels = createDomainLabels(appName, domain, domain.customEntrypoint || "web");
if (domain.customEntrypoint == null && https) {
const httpsLabels = createDomainLabels(appName, domain, "websecure");
httpLabels.push(...httpsLabels);
}
@@ -299,11 +299,12 @@ export const writeComposeFile = async (
export const createDomainLabels = (
appName: string,
domain: Domain,
entrypoint: "web" | "websecure",
entrypoint: string,
) => {
const {
host,
port,
customEntrypoint,
https,
uniqueConfigKey,
certificateType,
@@ -360,7 +361,7 @@ export const createDomainLabels = (
}
// Add TLS configuration for websecure
if (entrypoint === "websecure") {
if (entrypoint === "websecure" || (customEntrypoint != null && https)) {
if (certificateType === "letsencrypt") {
labels.push(
`traefik.http.routers.${routerName}.tls.certresolver=letsencrypt`,

View File

@@ -32,10 +32,10 @@ export const manageDomain = async (app: ApplicationNested, domain: Domain) => {
config.http.routers[routerName] = await createRouterConfig(
app,
domain,
"web",
domain.customEntrypoint || "web",
);
if (domain.https) {
if (domain.customEntrypoint == null && domain.https) {
config.http.routers[routerNameSecure] = await createRouterConfig(
app,
domain,
@@ -107,12 +107,12 @@ export const removeDomain = async (
export const createRouterConfig = async (
app: ApplicationNested,
domain: Domain,
entryPoint: "web" | "websecure",
entryPoint: string,
) => {
const { appName, redirects, security } = app;
const { certificateType } = domain;
const { host, path, https, uniqueConfigKey, internalPath, stripPath } =
const { host, path, https, uniqueConfigKey, internalPath, stripPath, customEntrypoint } =
domain;
const routerConfig: HttpRouter = {
rule: `Host(\`${host}\`)${path !== null && path !== "/" ? ` && PathPrefix(\`${path}\`)` : ""}`,
@@ -162,7 +162,7 @@ export const createRouterConfig = async (
}
}
if (entryPoint === "websecure") {
if (entryPoint === "websecure" || (customEntrypoint != null && https)) {
if (certificateType === "letsencrypt") {
routerConfig.tls = { certResolver: "letsencrypt" };
} else if (certificateType === "custom" && domain.customCertResolver) {