From 1fa5c5e0213bd6b93f4b8248f8f8e580b5e35f02 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Sat, 14 May 2022 15:23:41 +0200 Subject: [PATCH] WIP: Traefik migration --- src/lib/haproxy/index.ts | 2 +- src/lib/queues/proxyTcpHttp.ts | 8 +++-- src/routes/settings/index.svelte | 2 +- src/routes/traefik.json.ts | 55 +++++++++++++++++++++++--------- 4 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/lib/haproxy/index.ts b/src/lib/haproxy/index.ts index 77a61974e..8f7d59592 100644 --- a/src/lib/haproxy/index.ts +++ b/src/lib/haproxy/index.ts @@ -343,7 +343,7 @@ export async function startTraefikProxy(engine: string): Promise { ); const ip = JSON.parse(Config)[0].Gateway; await asyncExecShell( - `DOCKER_HOST="${host}" docker run --restart always --label "traefik.http.middlewares.dashboard.basicauth.users=${proxyUser}:${proxyPassword}" --label "traefik.http.routers.dashboard.service=api@internal" --label "traefik.http.routers.dashboard.middlewares=auth" --add-host 'host.docker.internal:host-gateway' --add-host 'host.docker.internal:${ip}' -v coolify-ssl-certs:/usr/local/etc/haproxy/ssl -v /var/run/docker.sock:/var/run/docker.sock --network coolify-infra -p "80:80" -p "443:443" -p "8080:8080" --name coolify-proxy -d ${defaultTraefikImage} --api.dashboard=true --entrypoints.web.address=:80 --entrypoints.websecure.address=:443 --providers.docker=false --providers.docker.exposedbydefault=false --providers.http.endpoint=${coolifyEndpoint} --providers.http.pollTimeout=5s --log.level=error` + `DOCKER_HOST="${host}" docker run --restart always --add-host 'host.docker.internal:host-gateway' --add-host 'host.docker.internal:${ip}' -v coolify-ssl-certs:/usr/local/etc/haproxy/ssl -v /var/run/docker.sock:/var/run/docker.sock --network coolify-infra -p "80:80" -p "443:443" -p "8080:8080" --name coolify-proxy -d ${defaultTraefikImage} --entrypoints.web.address=:80 --entrypoints.websecure.address=:443 --providers.docker=true --providers.docker.exposedbydefault=false --providers.http.endpoint=${coolifyEndpoint} --providers.http.pollTimeout=5s --log.level=error` ); await db.prisma.setting.update({ where: { id }, data: { proxyHash: null } }); await db.setDestinationSettings({ engine, isCoolifyProxyUsed: true }); diff --git a/src/lib/queues/proxyTcpHttp.ts b/src/lib/queues/proxyTcpHttp.ts index b23b1119f..b120c2f74 100644 --- a/src/lib/queues/proxyTcpHttp.ts +++ b/src/lib/queues/proxyTcpHttp.ts @@ -57,10 +57,14 @@ export default async function (): Promise
-
+
New Proxy Available!
{ const type = event.url.searchParams.get('type'); let traefik = {}; if (publicPort) { - traefik = { - [type]: { - routers: { - [id]: { - entrypoints: [type], - rule: `HostSNI(\`*\`)`, - service: id - } - }, - services: { - [id]: { - loadbalancer: { - servers: [] + if (type === 'tcp') { + traefik = { + [type]: { + routers: { + [id]: { + entrypoints: [type], + rule: `HostSNI(\`*\`)`, + service: id + } + }, + services: { + [id]: { + loadbalancer: { + servers: [] + } } } } + }; + } else if (type === 'http') { + const service = await db.prisma.service.findFirst({ where: { id } }); + if (service?.fqdn) { + const domain = getDomain(service.fqdn); + traefik = { + [type]: { + routers: { + [id]: { + entrypoints: [type], + rule: `Host(\`${domain}\`)`, + service: id + } + }, + services: { + [id]: { + loadbalancer: { + servers: [] + } + } + } + } + }; } - }; + } } if (type === 'tcp') { traefik[type].services[id].loadbalancer.servers.push({ address: `${id}:${privatePort}` }); - } else { + } else if (type === 'http') { traefik[type].services[id].loadbalancer.servers.push({ url: `http://${id}:${privatePort}` }); } return {