scrape / Dockerfile
kjbytes's picture
push code
ef4c36f
Raw
History Blame Contribute Delete
2.11 kB
# ponytail: Playwright's own image already ships chromium + all its system libs
FROM mcr.microsoft.com/playwright:v1.61.1-noble
WORKDIR /app
# ponytail: dev deps stay installed so `next build` works; compose flips this to development
ENV NEXT_TELEMETRY_DISABLED=1
RUN corepack enable
# ponytail: node-canvas/FreeType can't read @fontsource's .woff β€” captions render as tofu
# boxes without real TTFs. Install them system-wide so fontconfig resolves them by family.
RUN mkdir -p /usr/share/fonts/truetype/reel \
&& curl -fsSL -o /usr/share/fonts/truetype/reel/Anton-Regular.ttf \
https://github.com/google/fonts/raw/main/ofl/anton/Anton-Regular.ttf \
&& curl -fsSL -o /usr/share/fonts/truetype/reel/Oswald.ttf \
"https://github.com/google/fonts/raw/main/ofl/oswald/Oswald%5Bwght%5D.ttf" \
&& fc-cache -f
COPY package.json pnpm-lock.yaml ./
# ponytail: lockfile is already vetted on the host; skip pnpm's release-age gate
RUN pnpm install --frozen-lockfile --config.minimumReleaseAge=0 \
--config.dangerouslyAllowAllBuilds=true
# ponytail: HF Spaces run the container as UID 1000, which cannot read /root/.cache β€”
# install browsers to the image-wide path instead and make them world-readable
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
# ponytail: image ships 1.61.1's browsers; our playwright is newer, so fetch its build
RUN ./node_modules/.bin/playwright install chromium \
&& chmod -R a+rX /ms-playwright
COPY . .
RUN ./node_modules/.bin/next build
# ponytail: HF Spaces run as UID 1000 β€” storage/ and .next must be writable by it
RUN mkdir -p /app/storage \
&& chown -R 1000:1000 /app \
&& chmod -R u+rwX /app/storage
# ponytail: free hosts dictate the port (HF Spaces app_port, Cloud Run 8080) β€” honour $PORT
ENV PORT=3000
EXPOSE 3000
# HF Spaces expect the app to run as this user; harmless locally
USER 1000
# ponytail: run next directly β€” `pnpm start` re-runs its deps/policy check at boot.
# compose overrides this with `next dev` for local work.
CMD ["sh", "-c", "./node_modules/.bin/next start --hostname 0.0.0.0 --port ${PORT:-3000}"]