From f78cbe0bab0928a01d06185cbf0dece3505f8e77 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Sat, 17 Feb 2024 21:34:04 +0000 Subject: build: Fix docker images --- .dockerignore | 2 +- .env.sample | 10 +++++--- Dockerfile | 31 +++++++++++++---------- docker-compose.yml | 1 + packages/shared/config.ts | 2 ++ packages/web/app/signin/components/SignInForm.tsx | 2 +- packages/workers/crawler.ts | 6 ++++- 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.", -- cgit v1.2.3-70-g09d2