Compare commits
2 Commits
da1df6e13a
...
v3.35.1
| Author | SHA1 | Date | |
|---|---|---|---|
| 3724116214 | |||
| b29510fa23 |
55
Dockerfile
55
Dockerfile
@@ -2,57 +2,60 @@ FROM node:20-bookworm-slim
|
|||||||
|
|
||||||
WORKDIR /metrics
|
WORKDIR /metrics
|
||||||
|
|
||||||
# Install Google Chrome stable and runtime deps + fonts
|
# Install Chromium from Debian and runtime deps + fonts
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
apt-get update; \
|
apt-get update; \
|
||||||
apt-get install -y --no-install-recommends \
|
apt-get install -y --no-install-recommends \
|
||||||
wget gnupg ca-certificates curl unzip \
|
# runtime deps used by chromium headless
|
||||||
# Chrome runtime deps
|
chromium \
|
||||||
libnss3 libxss1 libx11-xcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 \
|
libnss3 libxss1 libx11-xcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 \
|
||||||
libxkbcommon0 libxrandr2 libatk1.0-0 libatk-bridge2.0-0 libgtk-3-0 \
|
libxkbcommon0 libxrandr2 libatk1.0-0 libatk-bridge2.0-0 libgtk-3-0 \
|
||||||
libgbm1 libasound2 fonts-liberation \
|
libgbm1 libasound2 fonts-liberation \
|
||||||
# Optional fonts for broader charset support
|
# optional fonts for broader charset support
|
||||||
fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf; \
|
fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \
|
||||||
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/google-linux.gpg; \
|
# helpers
|
||||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-linux.gpg] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list; \
|
curl unzip ca-certificates; \
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends google-chrome-stable; \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Prevent Puppeteer from downloading Chromium, point to system Chrome
|
# Prevent Puppeteer from downloading Chromium
|
||||||
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||||
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable
|
|
||||||
|
|
||||||
# Default Chrome args suitable for containers (headless + no sandbox)
|
# Force flags via a wrapper so no X/Wayland or sandbox is used
|
||||||
ENV CHROME_DEFAULT_ARGS="--no-sandbox --disable-setuid-sandbox --headless=new --disable-gpu --disable-dev-shm-usage --no-zygote --no-first-run --ozone-platform=none --disable-features=UseOzonePlatform --enable-features=NetworkService,NetworkServiceInProcess"
|
# We call Debian's chromium executable (usually /usr/bin/chromium or chromium-browser)
|
||||||
|
RUN set -eux; \
|
||||||
|
CHROME_BIN="$(command -v chromium || command -v chromium-browser)"; \
|
||||||
|
printf '%s\n' \
|
||||||
|
'#!/usr/bin/env bash' \
|
||||||
|
"exec ${CHROME_BIN} \\" \
|
||||||
|
' --no-sandbox --disable-setuid-sandbox \\' \
|
||||||
|
' --headless=new --disable-gpu --disable-dev-shm-usage \\' \
|
||||||
|
' --no-zygote --no-first-run \\' \
|
||||||
|
' --ozone-platform=none --disable-features=UseOzonePlatform \\' \
|
||||||
|
' "$@"' \
|
||||||
|
> /usr/local/bin/chrome-wrapper; \
|
||||||
|
chmod +x /usr/local/bin/chrome-wrapper
|
||||||
|
|
||||||
# Env consumed by lowlighter/metrics to pass browser flags
|
# Point puppeteer to the wrapper (guarantees the flags are applied)
|
||||||
|
ENV PUPPETEER_EXECUTABLE_PATH=/usr/local/bin/chrome-wrapper
|
||||||
|
|
||||||
|
# Optional envs the app may read
|
||||||
ENV METRICS_BROWSER=chromium
|
ENV METRICS_BROWSER=chromium
|
||||||
ENV METRICS_BROWSER_HEADLESS=true
|
ENV METRICS_BROWSER_HEADLESS=true
|
||||||
ENV METRICS_BROWSER_ARGS=""
|
ENV METRICS_BROWSER_ARGS=""
|
||||||
|
|
||||||
# Optional: trust reverse proxy for express-rate-limit
|
|
||||||
ENV METRICS_TRUST_PROXY=1
|
ENV METRICS_TRUST_PROXY=1
|
||||||
|
|
||||||
# Copy sources and install JS deps
|
# Install JS deps
|
||||||
COPY package.json package-lock.json* ./
|
COPY package.json package-lock.json* ./
|
||||||
RUN npm ci
|
RUN npm ci
|
||||||
|
|
||||||
|
# Copy source and build
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Build the project
|
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Wrapper entrypoint to ensure args are always set
|
# Entrypoint that just runs the app; flags are injected by chrome-wrapper
|
||||||
RUN printf '%s\n' \
|
RUN printf '%s\n' \
|
||||||
'#!/usr/bin/env bash' \
|
'#!/usr/bin/env bash' \
|
||||||
'set -euo pipefail' \
|
'set -euo pipefail' \
|
||||||
'export PUPPETEER_EXECUTABLE_PATH="${PUPPETEER_EXECUTABLE_PATH:-/usr/bin/google-chrome-stable}"' \
|
|
||||||
'export METRICS_BROWSER="${METRICS_BROWSER:-chromium}"' \
|
|
||||||
'export METRICS_BROWSER_HEADLESS="${METRICS_BROWSER_HEADLESS:-true}"' \
|
|
||||||
'if [ -z "${METRICS_BROWSER_ARGS:-}" ]; then' \
|
|
||||||
' export METRICS_BROWSER_ARGS="${CHROME_DEFAULT_ARGS}"' \
|
|
||||||
'fi' \
|
|
||||||
'exec npm start' \
|
'exec npm start' \
|
||||||
> /usr/local/bin/metrics-entrypoint && chmod +x /usr/local/bin/metrics-entrypoint
|
> /usr/local/bin/metrics-entrypoint && chmod +x /usr/local/bin/metrics-entrypoint
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user