Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol. wisp.place
1# Build stage 2FROM oven/bun:1.3 AS build 3 4WORKDIR /app 5 6# Copy workspace configuration 7COPY package.json bunfig.toml tsconfig.json bun.lock* ./ 8 9# Copy all workspace package.json files first (for dependency resolution) 10COPY packages ./packages 11COPY apps/main-app/package.json ./apps/main-app/package.json 12COPY apps/hosting-service/package.json ./apps/hosting-service/package.json 13 14# Install all dependencies (including workspaces) 15RUN bun install --frozen-lockfile 16 17# Copy source files 18COPY apps/main-app ./apps/main-app 19 20# Build compiled server 21RUN bun build \ 22 --compile \ 23 --target bun \ 24 --minify \ 25 --outfile server \ 26 apps/main-app/src/index.ts 27 28# Production dependencies stage 29FROM oven/bun:1.3 AS prod-deps 30 31WORKDIR /app 32 33COPY package.json bunfig.toml tsconfig.json bun.lock* ./ 34COPY packages ./packages 35COPY apps/main-app/package.json ./apps/main-app/package.json 36COPY apps/hosting-service/package.json ./apps/hosting-service/package.json 37 38# Install only production dependencies 39RUN bun install --frozen-lockfile --production 40 41# Remove unnecessary large packages (bun is already in base image, these are dev tools) 42RUN rm -rf /app/node_modules/bun \ 43 /app/node_modules/@oven \ 44 /app/node_modules/prettier \ 45 /app/node_modules/@ts-morph 46 47# Final stage - use distroless or slim debian-based image 48FROM debian:bookworm-slim 49 50# Install Bun runtime 51COPY --from=oven/bun:1.3 /usr/local/bin/bun /usr/local/bin/bun 52 53WORKDIR /app 54 55# Copy compiled server 56COPY --from=build /app/server /app/server 57 58# Copy public files 59COPY apps/main-app/public apps/main-app/public 60 61# Copy production dependencies only 62COPY --from=prod-deps /app/node_modules /app/node_modules 63 64# Copy configs 65COPY package.json bunfig.toml tsconfig.json /app/ 66COPY apps/main-app/tsconfig.json /app/apps/main-app/tsconfig.json 67COPY apps/main-app/package.json /app/apps/main-app/package.json 68 69# Create symlink for module resolution 70RUN ln -s /app/node_modules /app/apps/main-app/node_modules 71 72ENV PORT=8000 73 74EXPOSE 8000 75 76CMD ["./server"]