SmartestHome/digest-engine/whatsapp-bridge/Dockerfile

39 lines
1.5 KiB
Docker

# whatsapp-bridge — headful Chromium under Xvfb, for read-only WhatsApp ingestion.
#
# Chromium comes from Debian's apt repo (PUPPETEER_SKIP_DOWNLOAD=true), not from
# Puppeteer's own bundled download, for two reasons:
# 1. The container host in this project is a Raspberry Pi 5 (arm64) — Puppeteer
# publishes no arm64 Chromium build, so the bundled download simply fails
# there. Debian's chromium package is built for both arm64 and amd64.
# 2. It picks up Chromium security updates through apt like everything else on
# the host, instead of pinning whatever revision Puppeteer vendored.
FROM node:20-bookworm-slim
ENV PUPPETEER_SKIP_DOWNLOAD=true \
CHROMIUM_PATH=/usr/bin/chromium \
NODE_ENV=production
# fonts-liberation + fonts-noto-color-emoji: without them Chromium renders WhatsApp
# Web as tofu boxes, which also breaks the QR-code page on first login.
RUN apt-get update && apt-get install -y --no-install-recommends \
chromium \
xvfb \
ca-certificates \
fonts-liberation \
fonts-noto-color-emoji \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY package.json ./
RUN npm install --omit=dev && npm cache clean --force
COPY index.js ./
VOLUME ["/data"]
# xvfb-run is the whole mechanism that lets Chromium run headful (see the
# headless: false comment in index.js) with no display attached to the host.
# -a picks a free display number so a restart never collides with a stale lock.
CMD ["xvfb-run", "-a", "--server-args=-screen 0 1280x1024x24", "node", "index.js"]