From ea638279e5c3a21a31333d18f1158998c39ffb5c Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 20 Mar 2025 09:46:50 +0530 Subject: [PATCH] feat(docker): use standalone build --- .github/workflows/docker-build.yaml | 25 +++++---------------- app.dockerfile | 35 ++++++++++++++++------------- docker-compose.yaml | 1 + next.config.mjs | 1 + 4 files changed, 28 insertions(+), 34 deletions(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index f658c29..0620afb 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -10,9 +10,6 @@ on: jobs: build-and-push: runs-on: ubuntu-latest - strategy: - matrix: - service: [backend, app] steps: - name: Checkout code uses: actions/checkout@v3 @@ -36,17 +33,12 @@ jobs: id: version run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - - name: Build and push Docker image for ${{ matrix.service }} + - name: Build and push Docker image if: github.ref == 'refs/heads/master' && github.event_name == 'push' run: | docker buildx create --use - if [[ "${{ matrix.service }}" == "backend" ]]; then \ - DOCKERFILE=backend.dockerfile; \ - IMAGE_NAME=perplexica-backend; \ - else \ - DOCKERFILE=app.dockerfile; \ - IMAGE_NAME=perplexica-frontend; \ - fi + DOCKERFILE=app.dockerfile; \ + IMAGE_NAME=perplexica; \ docker buildx build --platform linux/amd64,linux/arm64 \ --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:main \ --cache-to=type=inline \ @@ -54,17 +46,12 @@ jobs: -t itzcrazykns1337/${IMAGE_NAME}:main \ --push . - - name: Build and push release Docker image for ${{ matrix.service }} + - name: Build and push release Docker image if: github.event_name == 'release' run: | docker buildx create --use - if [[ "${{ matrix.service }}" == "backend" ]]; then \ - DOCKERFILE=backend.dockerfile; \ - IMAGE_NAME=perplexica-backend; \ - else \ - DOCKERFILE=app.dockerfile; \ - IMAGE_NAME=perplexica-frontend; \ - fi + DOCKERFILE=app.dockerfile; \ + IMAGE_NAME=perplexica; \ docker buildx build --platform linux/amd64,linux/arm64 \ --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }} \ --cache-to=type=inline \ diff --git a/app.dockerfile b/app.dockerfile index 97c6a96..2571305 100644 --- a/app.dockerfile +++ b/app.dockerfile @@ -1,22 +1,27 @@ +FROM node:20.18.0-alpine AS builder + +WORKDIR /home/perplexica + +COPY package.json yarn.lock ./ +RUN yarn install --frozen-lockfile + +COPY tsconfig.json next.config.mjs next-env.d.ts postcss.config.js drizzle.config.ts tailwind.config.ts ./ +COPY src ./src +COPY public ./public + +RUN mkdir -p /home/perplexica/data +RUN yarn build + FROM node:20.18.0-alpine WORKDIR /home/perplexica -COPY src /home/perplexica/src -COPY public /home/perplexica/public -COPY package.json /home/perplexica/package.json -COPY yarn.lock /home/perplexica/yarn.lock -COPY tsconfig.json /home/perplexica/tsconfig.json -COPY next.config.mjs /home/perplexica/next.config.mjs -COPY next-env.d.ts /home/perplexica/next-env.d.ts -COPY postcss.config.js /home/perplexica/postcss.config.js -COPY drizzle.config.ts /home/perplexica/drizzle.config.ts -COPY tailwind.config.ts /home/perplexica/tailwind.config.ts +COPY --from=builder /home/perplexica/public ./public +COPY --from=builder /home/perplexica/.next/static ./public/_next/static + +COPY --from=builder /home/perplexica/.next/standalone ./ +COPY --from=builder /home/perplexica/data ./data -RUN mkdir /home/perplexica/data RUN mkdir /home/perplexica/uploads -RUN yarn install --frozen-lockfile -RUN yarn build - -CMD ["yarn", "start"] \ No newline at end of file +CMD ["node", "server.js"] \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 631e42b..b702b4e 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -10,6 +10,7 @@ services: restart: unless-stopped app: + image: itzcrazykns1337/perplexica:main build: context: . dockerfile: app.dockerfile diff --git a/next.config.mjs b/next.config.mjs index 74156d1..2300ff4 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,5 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { + output: 'standalone', images: { remotePatterns: [ {