# ───────────────────────────────────────────────────────────────────────────── # Speedboard Docker image # # Based on the official sitespeed.io image which already includes: # - Node.js 20 # - Chrome & Firefox (headless) # - Xvfb # - sitespeed.io CLI # ───────────────────────────────────────────────────────────────────────────── FROM sitespeedio/sitespeed.io:latest WORKDIR /app # Copy speedboard app files COPY package.json ./ RUN npm install --omit=dev COPY . . # Create persistent directories RUN mkdir -p /data/reports # Symlink reports dir into app folder RUN ln -sf /data/reports /app/reports # Runtime env ENV PORT=3132 \ IN_DOCKER=1 \ # sitespeed.io is already installed at /usr/local/lib/node_modules/sitespeed.io/bin/sitespeed.js # but we ship our own copy — point to the bundled one inside image SITESPEED_BIN=/usr/local/lib/node_modules/sitespeed.io/bin/sitespeed.js \ NODE_ENV=production EXPOSE 3132 # Override the base image's ENTRYPOINT (which is "sitespeed.io") so that # Docker doesn't prepend it to our CMD, causing sitespeed.io to treat # "node" as a URL to test. ENTRYPOINT ["node"] CMD ["app.js"]