aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-18 02:56:04 +0000
committerMohamedBassem <me@mbassem.com>2024-02-18 02:56:04 +0000
commit146d9ed674245940221d3a56fd20ca243f90060a (patch)
tree3f52548c6745180d7627102d7ae857cb8ad3d44b
parentf78cbe0bab0928a01d06185cbf0dece3505f8e77 (diff)
downloadkarakeep-146d9ed674245940221d3a56fd20ca243f90060a.tar.zst
build: Optimizing the docker image sizes a bit
-rw-r--r--.dockerignore2
-rw-r--r--Dockerfile92
-rw-r--r--package.json6
-rw-r--r--packages/db/package.json4
-rw-r--r--packages/workers/package.json11
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
diff --git a/Dockerfile b/Dockerfile
index 8e9c8472..a881c9f2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -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",