# gitzone dockerfile_service ## STAGE 1 // BUILD frontend bundle FROM --platform=linux/amd64 node:22-alpine AS build # Install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate WORKDIR /app # Use verdaccio registry (hosts private packages and proxies public ones) RUN npm config set registry https://verdaccio.lossless.digital/ # Install dependencies first (better caching) COPY package.json pnpm-lock.yaml ./ RUN pnpm install # Copy source and build COPY npmextra.json ./ COPY html/ ./html/ COPY ts_web/ ./ts_web/ COPY ts_interfaces/ ./ts_interfaces/ COPY ts_bundled/ ./ts_bundled/ RUN pnpm run build ## STAGE 2 // production runtime with Deno FROM alpine:edge AS final # Install Deno and minimal runtime dependencies RUN apk add --no-cache \ deno \ ca-certificates \ tini \ gcompat \ libstdc++ WORKDIR /app # Copy only what Deno needs at runtime COPY deno.json ./ COPY mod.ts ./ COPY ts/ ./ts/ COPY ts_interfaces/ ./ts_interfaces/ COPY --from=build /app/ts_bundled/bundle.ts ./ts_bundled/bundle.ts # Pre-cache Deno dependencies RUN deno cache mod.ts # Create storage directory RUN mkdir -p /data EXPOSE 9000 3000 VOLUME ["/data"] ENTRYPOINT ["/sbin/tini", "--"] CMD ["deno", "run", "--allow-all", "mod.ts", "server"]