an atproto based link aggregator
1FROM node:22-slim AS base
2ENV PNPM_HOME="/pnpm"
3ENV PATH="$PNPM_HOME:$PATH"
4RUN corepack enable
5
6WORKDIR /app
7
8# Build stage
9FROM base AS build
10
11COPY package.json pnpm-lock.yaml .npmrc ./
12RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
13
14COPY . .
15RUN pnpm build
16
17# Production stage
18FROM base AS production
19
20# Install supervisor for multi-process management
21RUN apt-get update && apt-get install -y supervisor && rm -rf /var/lib/apt/lists/*
22
23# Copy built artifacts
24COPY --from=build /app/build ./build
25COPY --from=build /app/node_modules ./node_modules
26COPY --from=build /app/package.json ./
27COPY --from=build /app/drizzle ./drizzle
28COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
29COPY scripts/start.sh /app/start.sh
30COPY drizzle.content.config.ts drizzle.local.config.ts ./
31
32# Create data directory (will be mounted as volume)
33RUN mkdir -p /data
34
35ENV NODE_ENV=production
36ENV PORT=3000
37ENV CONTENT_DB_PATH=/data/content.db
38ENV LOCAL_DB_PATH=/data/local.db
39
40EXPOSE 3000
41
42CMD ["/app/start.sh"]