Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol.
wisp.place
1# Use official Node.js Alpine image with pnpm
2# Build from monorepo root: docker build -f apps/hosting-service/Dockerfile .
3FROM node:alpine AS base
4
5# Install pnpm globally (supports workspace: protocol)
6RUN npm install -g pnpm
7
8# Set working directory
9WORKDIR /app
10
11# Copy workspace configuration
12COPY package.json tsconfig.json ./
13
14# Copy all workspace packages
15COPY packages ./packages
16
17# Copy hosting-service and main-app package.json (for workspace resolution)
18COPY apps/hosting-service ./apps/hosting-service
19COPY apps/main-app/package.json ./apps/main-app/package.json
20
21# Install all dependencies (including workspaces)
22RUN pnpm install --frozen-lockfile || pnpm install
23
24# Set working directory to hosting-service
25WORKDIR /app/apps/hosting-service
26
27# Create cache directory
28RUN mkdir -p ./cache/sites
29
30# Set environment variables (can be overridden at runtime)
31ENV PORT=3001
32ENV NODE_ENV=production
33
34# Expose the application port
35EXPOSE 3001
36
37# Health check
38HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
39 CMD node -e "fetch('http://localhost:3001/health').then(r => r.ok ? process.exit(0) : process.exit(1)).catch(() => process.exit(1))"
40
41# Start the application (can override with 'pnpm run backfill' in compose)
42CMD ["pnpm", "run", "start"]