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"]