offline-first, p2p synced, atproto enabled, feed reader
at main 1.3 kB view raw
1# Build stage - install deps and build frontend 2FROM node:22-slim AS builder 3 4WORKDIR /app 5 6# Install pnpm 7RUN corepack enable && corepack prepare pnpm@latest --activate 8 9# Copy package files first for better layer caching 10COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ 11 12# Install all dependencies (including dev for build) 13RUN pnpm install --frozen-lockfile 14 15# Copy source code 16COPY tsconfig.json vite.config.js ./ 17COPY src ./src 18 19# Build the frontend 20RUN pnpm run build 21 22# Production stage - minimal runtime image 23FROM node:22-slim AS runtime 24 25WORKDIR /app 26 27# Install pnpm 28RUN corepack enable && corepack prepare pnpm@latest --activate 29 30# Copy package files 31COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ 32 33# Install production dependencies only 34RUN pnpm install --frozen-lockfile --prod 35 36# Copy built frontend from builder 37COPY --from=builder /app/dist ./dist 38 39# Copy server source (runs with tsx) 40COPY tsconfig.json ./ 41COPY src/feedline ./src/feedline 42COPY src/realm ./src/realm 43COPY src/lib ./src/lib 44 45# Create data directory for realm storage 46RUN mkdir -p /data/realms 47 48# Environment variables 49ENV NODE_ENV=production 50ENV PORT=4001 51ENV HOST=0.0.0.0 52ENV REALM_STORAGE_DIR=/data/realms 53 54EXPOSE 4001 55 56# Run the server 57CMD ["pnpm", "exec", "tsx", "src/feedline/main.ts"]