diff --git a/Dockerfile b/Dockerfile index 958f9ea..6c76c36 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,9 @@ FROM node:20-alpine WORKDIR /app +RUN apk add --no-cache chromium nss freetype harfbuzz ca-certificates ttf-freefont +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser COPY package*.json ./ RUN npm ci COPY . . EXPOSE 3001 -CMD ["npm", "run", "dev"] +CMD ["npm", "run", "dev:docker"] diff --git a/package.json b/package.json index e04f662..5001a71 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "start": "cross-env NODE_ENV=production node dist/main.js", "predev": "node scripts/ensure-port-free.js", "dev": "cross-env NODE_ENV=development nest start --watch", - "start:dev": "npm run dev" + "start:dev": "npm run dev", + "dev:docker": "cross-env NODE_ENV=development nest start --watch" }, "dependencies": { "@nestjs/common": "^11.1.19", diff --git a/src/modules/whatsapp/whatsapp.service.ts b/src/modules/whatsapp/whatsapp.service.ts index fed9f75..6393434 100644 --- a/src/modules/whatsapp/whatsapp.service.ts +++ b/src/modules/whatsapp/whatsapp.service.ts @@ -7,6 +7,18 @@ import { WhatsappTemplateService } from './whatsapp-template.service'; import * as fs from 'fs'; import * as path from 'path'; +function getBrowserExecutablePath() { + if (process.env.PUPPETEER_EXECUTABLE_PATH) { + return process.env.PUPPETEER_EXECUTABLE_PATH; + } + + if (process.platform === 'win32') { + return 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'; + } + + return undefined; +} + @Injectable() export class WhatsappService implements OnModuleInit { private client: Client; @@ -31,7 +43,7 @@ export class WhatsappService implements OnModuleInit { authStrategy: new LocalAuth({ dataPath: './whatsapp-session' }), puppeteer: { headless: true, - executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', + executablePath: getBrowserExecutablePath(), args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-accelerated-2d-canvas', '--no-first-run', '--disable-gpu'] }, webVersionCache: {