diff options
| author | MohamedBassem <me@mbassem.com> | 2024-02-18 02:56:04 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-02-18 02:56:04 +0000 |
| commit | 146d9ed674245940221d3a56fd20ca243f90060a (patch) | |
| tree | 3f52548c6745180d7627102d7ae857cb8ad3d44b | |
| parent | f78cbe0bab0928a01d06185cbf0dece3505f8e77 (diff) | |
| download | karakeep-146d9ed674245940221d3a56fd20ca243f90060a.tar.zst | |
build: Optimizing the docker image sizes a bit
| -rw-r--r-- | .dockerignore | 2 | ||||
| -rw-r--r-- | Dockerfile | 92 | ||||
| -rw-r--r-- | package.json | 6 | ||||
| -rw-r--r-- | packages/db/package.json | 4 | ||||
| -rw-r--r-- | packages/workers/package.json | 11 |
5 files changed, 61 insertions, 54 deletions
diff --git a/.dockerignore b/.dockerignore index 4dda7677..7759d5dd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,4 +4,6 @@ node_modules npm-debug.log README.md **/.next +**/*.db +**/.env* .git @@ -1,46 +1,27 @@ -FROM node:21-alpine AS base - -# Install dependencies only when needed -FROM base AS deps -# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. -RUN apk add --no-cache libc6-compat \ - make \ - g++ \ - py3-pip \ - linux-headers -WORKDIR /app - -# Install dependencies based on the preferred package manager -COPY package.json yarn.lock .yarnrc.yml ./ -COPY packages/web/package.json ./packages/web/package.json -COPY packages/db/package.json ./packages/db/package.json -COPY packages/shared/package.json ./packages/shared/package.json -COPY packages/workers/package.json ./packages/workers/package.json -COPY packages/browser-extension/package.json ./packages/browser-extension/package.json -RUN corepack enable && \ - yarn install --immutable && \ - cd packages/web && \ - yarn install --immutable - ################# The Web App ############## # Rebuild the source code only when needed -FROM base AS web_builder +FROM node:21-alpine AS web_builder + +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat + WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules -COPY packages packages +COPY packages/db packages/db +COPY packages/web packages/web +COPY packages/shared packages/shared COPY package.json yarn.lock .yarnrc.yml . ENV NEXT_TELEMETRY_DISABLED 1 -RUN cd packages/db && \ - yarn prisma generate - RUN corepack enable && \ - cd packages/web/ && \ + cd /app/packages/db && \ + yarn dlx prisma generate && \ + cd /app/packages/web/ && \ + yarn install --immutable && \ yarn next experimental-compile -FROM base AS web +FROM node:21-alpine AS web WORKDIR /app ENV NODE_ENV production @@ -72,30 +53,47 @@ CMD ["node", "server.js"] ################# Db migrations ############## -FROM base AS db +FROM node:21-alpine AS db WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules -COPY packages packages -COPY package.json yarn.lock .yarnrc.yml . +COPY packages/db packages/db +COPY package.json yarn.lock .yarnrc.yml . +WORKDIR /app/packages/db -RUN cd packages/db && \ - yarn prisma generate +RUN corepack enable && \ + yarn workspaces focus --production && \ + yarn dlx prisma generate -WORKDIR /app/packages/db USER root -CMD ["yarn", "prisma", "migrate", "deploy"] +CMD ["yarn", "dlx", "prisma", "migrate", "deploy"] + +################# The workers builder ############## + +FROM node:21-alpine AS workers_builder +WORKDIR /app + +# Install chromium needed for puppeteer +RUN apk add --no-cache make g++ py3-pip linux-headers + +COPY packages/db/package.json packages/db/package.json +COPY packages/shared/package.json packages/shared/package.json +COPY packages/workers/package.json packages/workers/package.json +COPY package.json yarn.lock .yarnrc.yml . + +RUN corepack enable && \ + cd /app/packages/workers && \ + yarn workspaces focus --production && \ + cd /app/packages/db && \ + yarn dlx prisma generate ################# The workers ############## -FROM base AS workers +FROM node:21-alpine AS workers WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules - # Install chromium needed for puppeteer RUN apk add --no-cache chromium runuser ENV PUPPETEER_SKIP_DOWNLOAD true @@ -110,11 +108,13 @@ RUN echo '#!/bin/sh' >> /app/start-chrome.sh && \ echo 'runuser -u chrome -- $CHROME_PATH $@' >> /app/start-chrome.sh && \ chmod +x /app/start-chrome.sh -COPY packages packages +COPY packages/db packages/db +COPY packages/shared packages/shared +COPY packages/workers packages/workers COPY package.json yarn.lock .yarnrc.yml . +COPY --from=workers_builder /app/node_modules /app/node_modules -RUN cd packages/db && \ - yarn prisma generate +RUN corepack enable && cd packages/db && yarn dlx prisma generate WORKDIR /app/packages/workers USER root diff --git a/package.json b/package.json index c9b15e86..be5f485c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "class-variance-authority": "^0.7.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0" + "eslint-plugin-react-hooks": "^4.6.0", + "typescript": "^5" }, "devDependencies": { "@tanstack/eslint-plugin-query": "^5.20.1", @@ -35,8 +36,7 @@ "eslint-plugin-tailwindcss": "^3.14.2", "install": "^0.13.0", "prettier": "3.2.5", - "prettier-plugin-tailwindcss": "^0.5.11", - "typescript": "^5" + "prettier-plugin-tailwindcss": "^0.5.11" }, "packageManager": "yarn@4.1.0" } diff --git a/packages/db/package.json b/packages/db/package.json index e533361d..92437cef 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -5,7 +5,9 @@ "private": true, "main": "index.ts", "dependencies": { - "@prisma/client": "^5.9.1", + "@prisma/client": "^5.9.1" + }, + "devDependencies": { "prisma": "^5.9.1" } } diff --git a/packages/workers/package.json b/packages/workers/package.json index e5fb3944..7bdd1db8 100644 --- a/packages/workers/package.json +++ b/packages/workers/package.json @@ -20,13 +20,16 @@ "openai": "^4.26.1", "puppeteer": "^22.0.0", "puppeteer-extra": "^3.3.6", - "puppeteer-extra-plugin-stealth": "^2.11.2" + "puppeteer-extra-plugin-stealth": "^2.11.2", + "ts-node": "^10.9.2", + "typescript": "^5", + "@tsconfig/node21": "^21.0.1", + "bullmq": "^5.1.9", + "zod": "^3.22.4" }, "devDependencies": { - "@tsconfig/node21": "^21.0.1", "@types/metascraper": "^5.14.3", - "nodemon": "^3.0.3", - "ts-node": "^10.9.2" + "nodemon": "^3.0.3" }, "scripts": { "start": "nodemon index.ts", |
