From ccd3d4aded20558eac80327db660991512c245c6 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 8 Nov 2022 10:40:11 +0100 Subject: [PATCH 1/2] fix: preview webhooks --- .github/workflows/staging-release.yml | 32 ++----------------- .../src/routes/webhooks/traefik/handlers.ts | 2 +- 2 files changed, 3 insertions(+), 31 deletions(-) diff --git a/.github/workflows/staging-release.yml b/.github/workflows/staging-release.yml index 2280167d8..8f4ff52b6 100644 --- a/.github/workflows/staging-release.yml +++ b/.github/workflows/staging-release.yml @@ -6,34 +6,6 @@ on: - next jobs: - arm64: - runs-on: [self-hosted, arm64] - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: "next" - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Get current package version - uses: martinbeentjes/npm-get-version-action@v1.2.3 - id: package-version - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - platforms: linux/arm64 - push: true - tags: coollabsio/coolify:next-arm64 - cache-from: type=registry,ref=coollabsio/coolify:buildcache-next-arm64 - cache-to: type=registry,ref=coollabsio/coolify:buildcache-next-arm64,mode=max amd64: runs-on: ubuntu-latest steps: @@ -64,7 +36,7 @@ jobs: cache-to: type=registry,ref=coollabsio/coolify:buildcache-next-amd64,mode=max merge-manifest: runs-on: ubuntu-latest - needs: [arm64, amd64] + needs: [amd64] steps: - name: Checkout uses: actions/checkout@v3 @@ -79,7 +51,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Create & publish manifest run: | - docker manifest create coollabsio/coolify:next --amend coollabsio/coolify:next-amd64 --amend coollabsio/coolify:next-arm64 + docker manifest create coollabsio/coolify:next --amend coollabsio/coolify:next-amd64 docker manifest push coollabsio/coolify:next - uses: sarisia/actions-status-discord@v1 if: always() diff --git a/apps/api/src/routes/webhooks/traefik/handlers.ts b/apps/api/src/routes/webhooks/traefik/handlers.ts index d079902c9..7f94973ec 100644 --- a/apps/api/src/routes/webhooks/traefik/handlers.ts +++ b/apps/api/src/routes/webhooks/traefik/handlers.ts @@ -345,7 +345,7 @@ export async function proxyConfiguration(request: FastifyRequest, remote const nakedDomain = previewDomain.replace(/^www\./, ''); const pathPrefix = '/' const serviceId = `${id}-${port || 'default'}` - traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${serviceId}-${pathPrefix}`, `${id}-${port || 'default'}`, previewDomain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } + traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${container}-${pathPrefix}`, `${id}-${port || 'default'}`, previewDomain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } traefik.http.services = { ...traefik.http.services, ...generateServices(container, container, port) } } } From 62e60fc7abcd809fbf82eeeef03b09409d6dd666 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 8 Nov 2022 11:15:56 +0100 Subject: [PATCH 2/2] fix: simplify webhooks --- .dockerignore | 7 +++- .../src/routes/webhooks/traefik/handlers.ts | 40 +++++++++---------- package.json | 2 +- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/.dockerignore b/.dockerignore index 7e5eecf8e..66ff0bf1f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,6 @@ .DS_Store node_modules +.pnpm-store build .svelte-kit package @@ -9,4 +10,8 @@ package dist client apps/api/db/*.db -local-serve \ No newline at end of file +local-serve +apps/api/db/migration.db-journal +apps/api/core* +logs +others/certificates diff --git a/apps/api/src/routes/webhooks/traefik/handlers.ts b/apps/api/src/routes/webhooks/traefik/handlers.ts index 7f94973ec..5d5876fef 100644 --- a/apps/api/src/routes/webhooks/traefik/handlers.ts +++ b/apps/api/src/routes/webhooks/traefik/handlers.ts @@ -16,7 +16,7 @@ function generateServices(serviceId, containerId, port) { } } } -function generateRouters(id, serviceId, domain, nakedDomain, pathPrefix, isHttps, isWWW, isDualCerts, isCustomSSL) { +function generateRouters(serviceId, domain, nakedDomain, pathPrefix, isHttps, isWWW, isDualCerts, isCustomSSL) { let http: any = { entrypoints: ['web'], rule: `Host(\`${nakedDomain}\`)${pathPrefix ? ` && PathPrefix(\`${pathPrefix}\`)` : ''}`, @@ -129,10 +129,10 @@ function generateRouters(id, serviceId, domain, nakedDomain, pathPrefix, isHttps } } return { - [id]: { ...http }, - [`${id}-secure`]: { ...https }, - [`${id}-www`]: { ...httpWWW }, - [`${id}-secure-www`]: { ...httpsWWW }, + [serviceId]: { ...http }, + [`${serviceId}-secure`]: { ...https }, + [`${serviceId}-www`]: { ...httpWWW }, + [`${serviceId}-secure-www`]: { ...httpsWWW }, } } export async function proxyConfiguration(request: FastifyRequest, remote: boolean = false) { @@ -310,9 +310,9 @@ export async function proxyConfiguration(request: FastifyRequest, remote const pathPrefix = '/' const isCustomSSL = false; const dualCerts = false; - const serviceId = `${id}-${port || 'default'}` + const serviceId = `${id}-${port || 'default'}-${pathPrefix}` - traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${serviceId}-${pathPrefix}`, `${id}-${port || 'default'}`, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } + traefik.http.routers = { ...traefik.http.routers, ...generateRouters(serviceId, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } traefik.http.services = { ...traefik.http.services, ...generateServices(serviceId, containerId, port) } } } @@ -329,8 +329,8 @@ export async function proxyConfiguration(request: FastifyRequest, remote const isHttps = fqdn.startsWith('https://'); const isWWW = fqdn.includes('www.'); const pathPrefix = '/' - const serviceId = `${id}-${port || 'default'}` - traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${serviceId}-${pathPrefix}`, `${id}-${port || 'default'}`, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } + const serviceId = `${id}-${port || 'default'}-${pathPrefix}` + traefik.http.routers = { ...traefik.http.routers, ...generateRouters(serviceId, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } traefik.http.services = { ...traefik.http.services, ...generateServices(serviceId, id, port) } if (previews) { const { stdout } = await executeDockerCmd({ dockerId, command: `docker container ls --filter="status=running" --filter="network=${network}" --filter="name=${id}-" --format="{{json .Names}}"` }) @@ -344,9 +344,9 @@ export async function proxyConfiguration(request: FastifyRequest, remote const previewDomain = `${container.split('-')[1]}.${domain}`; const nakedDomain = previewDomain.replace(/^www\./, ''); const pathPrefix = '/' - const serviceId = `${id}-${port || 'default'}` - traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${container}-${pathPrefix}`, `${id}-${port || 'default'}`, previewDomain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } - traefik.http.services = { ...traefik.http.services, ...generateServices(container, container, port) } + const serviceId = `${container}-${port || 'default'}-${pathPrefix}` + traefik.http.routers = { ...traefik.http.routers, ...generateRouters(serviceId, previewDomain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } + traefik.http.services = { ...traefik.http.services, ...generateServices(serviceId, container, port) } } } } @@ -426,9 +426,9 @@ export async function proxyConfiguration(request: FastifyRequest, remote const isHttps = fqdn.startsWith('https://'); const isWWW = fqdn.includes('www.'); const isCustomSSL = false; - const serviceId = `${id}-${port || 'default'}` - traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${serviceId}-${pathPrefix}`, `${id}-${port || 'default'}`, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } - traefik.http.services = { ...traefik.http.services, ...generateServices(serviceId, id, port) } + const serviceId = `${oneService}-${port || 'default'}-${pathPrefix}` + traefik.http.routers = { ...traefik.http.routers, ...generateRouters(serviceId, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } + traefik.http.services = { ...traefik.http.services, ...generateServices(serviceId, oneService, port) } } } else { if (found.services[oneService].ports && found.services[oneService].ports.length > 0) { @@ -443,8 +443,8 @@ export async function proxyConfiguration(request: FastifyRequest, remote const isWWW = fqdn.includes('www.'); const pathPrefix = '/' const isCustomSSL = false - const serviceId = `${id}-${port || 'default'}` - traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${serviceId}-${pathPrefix}`, `${id}-${port || 'default'}`, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } + const serviceId = `${oneService}-${port || 'default'}-${pathPrefix}` + traefik.http.routers = { ...traefik.http.routers, ...generateRouters(serviceId, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } traefik.http.services = { ...traefik.http.services, ...generateServices(serviceId, id, port) } } } @@ -468,9 +468,9 @@ export async function proxyConfiguration(request: FastifyRequest, remote const port = 3000 const pathPrefix = '/' const isCustomSSL = false - - traefik.http.routers = { ...traefik.http.routers, ...generateRouters(`${id}-${port || 'default'}-${pathPrefix}`, `${id}-${port || 'default'}`, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } - traefik.http.services = { ...traefik.http.services, ...generateServices(`${id}-${port || 'default'}`, container, port) } + const serviceId = `${id}-${port || 'default'}-${pathPrefix}` + traefik.http.routers = { ...traefik.http.routers, ...generateRouters(serviceId, domain, nakedDomain, pathPrefix, isHttps, isWWW, dualCerts, isCustomSSL) } + traefik.http.services = { ...traefik.http.services, ...generateServices(serviceId, container, port) } } } catch (error) { console.log(error) diff --git a/package.json b/package.json index 4a8cc1fc1..46e9e2802 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "build:api": "NODE_ENV=production pnpm run --filter api build", "build:ui": "NODE_ENV=production pnpm run --filter ui build", "dockerlogin": "echo $DOCKER_PASS | docker login --username=$DOCKER_USER --password-stdin", - "release:staging:amd": "cross-var docker buildx build --platform linux/amd64 -t coollabsio/coolify:$npm_package_version --push .", + "release:staging:amd": "cross-var docker buildx build --platform linux/amd64 -t coollabsio/coolify:next --push .", "release:local": "rm -fr ./local-serve && mkdir ./local-serve && pnpm build && cp -Rp apps/api/build/* ./local-serve && cp -Rp apps/ui/build/ ./local-serve/public && cp -Rp apps/api/prisma/ ./local-serve/prisma && cp -Rp apps/api/package.json ./local-serve && env | grep '^COOLIFY_' > ./local-serve/.env && cd ./local-serve && pnpm install . && pnpm start" }, "devDependencies": {