aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-17 21:34:04 +0000
committerMohamedBassem <me@mbassem.com>2024-02-17 21:54:57 +0000
commitf78cbe0bab0928a01d06185cbf0dece3505f8e77 (patch)
tree45e93d5122373cfd434025c6bb3c78e4a92ceb3e
parente247b141a98ab7b55d54ca5c7be8347fd076bda2 (diff)
downloadkarakeep-f78cbe0bab0928a01d06185cbf0dece3505f8e77.tar.zst
build: Fix docker images
Diffstat (limited to '')
-rw-r--r--.dockerignore2
-rw-r--r--.env.sample10
-rw-r--r--Dockerfile31
-rw-r--r--docker-compose.yml1
-rw-r--r--packages/shared/config.ts2
-rw-r--r--packages/web/app/signin/components/SignInForm.tsx2
-rw-r--r--packages/workers/crawler.ts6
7 files changed, 34 insertions, 20 deletions
diff --git a/.dockerignore b/.dockerignore
index c5500558..4dda7677 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -3,5 +3,5 @@ Dockerfile
node_modules
npm-debug.log
README.md
-.next
+**/.next
.git
diff --git a/.env.sample b/.env.sample
index befdb5c3..c38a998c 100644
--- a/.env.sample
+++ b/.env.sample
@@ -1,18 +1,20 @@
+############## Global ##############
# Must have a scheme in the beginning (e.g. file://)
# DATABASE_URL=
# LOG_LEVEL=debug
-# CRAWLER_HEADLESS_BROWSER=true
-
-# Redis for BullMQ
+############## Crawler ##############
+# CRAWLER_HEADLESS_BROWSER=true
+############## Redis ##############
# REDIS_HOST=
# REDIS_PORT=
-# OpenAI
+############### OpenAI ##############
# OPENAI_API_KEY=
+############## Auth ##############
# Authentik for auth
# AUTHENTIK_ID=
diff --git a/Dockerfile b/Dockerfile
index 668c6a46..8e9c8472 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -38,7 +38,7 @@ RUN cd packages/db && \
RUN corepack enable && \
cd packages/web/ && \
- yarn run build
+ yarn next experimental-compile
FROM base AS web
WORKDIR /app
@@ -46,9 +46,6 @@ WORKDIR /app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
-# RUN addgroup --system --gid 1001 nodejs
-# RUN adduser --system --uid 1001 nextjs
-
COPY --from=web_builder --chown=node:node /app/packages/web/.next/standalone ./
COPY --from=web_builder /app/packages/web/public ./packages/web/public
@@ -61,9 +58,7 @@ RUN chown node:node ./packages/web/.next
COPY --from=web_builder --chown=node:node /app/packages/web/.next/static ./packages/web/.next/static
WORKDIR /app/packages/web
-
-USER node
-
+USER root
EXPOSE 3000
ENV PORT 3000
@@ -89,10 +84,9 @@ RUN cd packages/db && \
yarn prisma generate
WORKDIR /app/packages/db
-USER node
+USER root
CMD ["yarn", "prisma", "migrate", "deploy"]
-# CMD ["ls", "-la", "/data"]
################# The workers ##############
@@ -100,11 +94,22 @@ CMD ["yarn", "prisma", "migrate", "deploy"]
FROM base AS workers
WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+
# Install chromium needed for puppeteer
-RUN apk add chromium
-env PUPPETEER_EXECUTABLE_PATH "/usr/bin/chromium-browser"
+RUN apk add --no-cache chromium runuser
+ENV PUPPETEER_SKIP_DOWNLOAD true
+ENV CHROME_PATH "/usr/bin/chromium-browser"
+ENV BROWSER_EXECUTABLE_PATH "/app/start-chrome.sh"
+ENV BROWSER_USER_DATA_DIR="/tmp/chrome"
+
+RUN echo '#!/bin/sh' >> /app/start-chrome.sh && \
+ echo 'set -x;' >> /app/start-chrome.sh && \
+ echo 'id -u chrome &>/dev/null || adduser -S chrome' >> /app/start-chrome.sh && \
+ echo 'mkdir -p /tmp/chrome && chown chrome /tmp/chrome' >> /app/start-chrome.sh && \
+ echo 'runuser -u chrome -- $CHROME_PATH $@' >> /app/start-chrome.sh && \
+ chmod +x /app/start-chrome.sh
-COPY --from=deps /app/node_modules ./node_modules
COPY packages packages
COPY package.json yarn.lock .yarnrc.yml .
@@ -112,6 +117,6 @@ RUN cd packages/db && \
yarn prisma generate
WORKDIR /app/packages/workers
-USER node
+USER root
CMD ["yarn", "run", "start:prod"]
diff --git a/docker-compose.yml b/docker-compose.yml
index b2f6d156..5816e75d 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -45,6 +45,7 @@ services:
DATABASE_URL: "file:/data/db.db"
volumes:
- data:/data
+
volumes:
redis:
data:
diff --git a/packages/shared/config.ts b/packages/shared/config.ts
index 35014823..28828418 100644
--- a/packages/shared/config.ts
+++ b/packages/shared/config.ts
@@ -26,6 +26,8 @@ const serverConfig = {
},
crawler: {
headlessBrowser: (process.env.CRAWLER_HEADLESS_BROWSER ?? "true") == "true",
+ browserExecutablePath: process.env.BROWSER_EXECUTABLE_PATH, // If not set, the system's browser will be used
+ browserUserDataDir: process.env.BROWSER_USER_DATA_DIR,
},
logLevel: process.env.LOG_LEVEL || "debug",
};
diff --git a/packages/web/app/signin/components/SignInForm.tsx b/packages/web/app/signin/components/SignInForm.tsx
index ea19dedb..0b625f1e 100644
--- a/packages/web/app/signin/components/SignInForm.tsx
+++ b/packages/web/app/signin/components/SignInForm.tsx
@@ -1,4 +1,4 @@
-import { getProviders, signIn } from "next-auth/react";
+import { getProviders } from "next-auth/react";
import SignInProviderButton from "./SignInProviderButton";
export default async function SignInForm() {
diff --git a/packages/workers/crawler.ts b/packages/workers/crawler.ts
index 4ba6aedc..99469105 100644
--- a/packages/workers/crawler.ts
+++ b/packages/workers/crawler.ts
@@ -47,7 +47,11 @@ const browserMutex = new Mutex();
async function launchBrowser() {
browser = undefined;
await browserMutex.runExclusive(async () => {
- browser = await puppeteer.launch({ headless: serverConfig.crawler.headlessBrowser });
+ browser = await puppeteer.launch({
+ headless: serverConfig.crawler.headlessBrowser,
+ executablePath: serverConfig.crawler.browserExecutablePath,
+ userDataDir: serverConfig.crawler.browserUserDataDir,
+ });
browser.on("disconnected", async () => {
logger.info(
"The puppeteer browser got disconnected. Will attempt to launch it again.",