diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..337d6e44 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# ---------- build stage ---------- +FROM node:20-alpine AS builder + +# pnpm is the package manager used by Strudel +RUN corepack enable && npm install -g pnpm # corepack ships with Node 20 :contentReference[oaicite:0]{index=0} + +# native deps needed for sharp and other Astro plugins to compile on Alpine Linux :contentReference[oaicite:1]{index=1} +RUN apk add --no-cache git python3 make g++ + +WORKDIR /app +COPY . . + +# deterministic install & build +RUN pnpm install --frozen-lockfile # workspace root uses pnpm :contentReference[oaicite:2]{index=2} +RUN pnpm build # produces website/dist (Astro default) :contentReference[oaicite:3]{index=3} + +# ---------- runtime stage ---------- +FROM nginx:alpine +LABEL org.opencontainers.image.source="https://github.com/tidalcycles/strudel" + +# copy the static site produced above +COPY --from=builder /app/website/dist /usr/share/nginx/html + +EXPOSE 80 +HEALTHCHECK CMD wget -qO- http://localhost/ || exit 1 +CMD ["nginx","-g","daemon off;"]