File size: 2,484 Bytes
cf9339a
f6d3fb5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
const fs = require('fs');

const dockerfile = `FROM node:lts-trixie-slim AS base
RUN apt-get update \\
  && apt-get install -y --no-install-recommends ca-certificates curl git \\
  && rm -rf /var/lib/apt/lists/*
RUN corepack enable

FROM base AS deps
WORKDIR /app
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc ./
COPY cli/package.json cli/
COPY server/package.json server/
COPY ui/package.json ui/
COPY packages/shared/package.json packages/shared/
COPY packages/db/package.json packages/db/
COPY packages/adapter-utils/package.json packages/adapter-utils/
COPY packages/adapters/claude-local/package.json packages/adapters/claude-local/
COPY packages/adapters/codex-local/package.json packages/adapters/codex-local/
COPY packages/adapters/cursor-local/package.json packages/adapters/cursor-local/
COPY packages/adapters/gemini-local/package.json packages/adapters/gemini-local/
COPY packages/adapters/openclaw-gateway/package.json packages/adapters/openclaw-gateway/
COPY packages/adapters/opencode-local/package.json packages/adapters/opencode-local/
COPY packages/adapters/pi-local/package.json packages/adapters/pi-local/
COPY packages/plugins/sdk/package.json packages/plugins/sdk/
COPY packages/plugins/create-paperclip-plugin/package.json packages/plugins/create-paperclip-plugin/
COPY packages/plugins/examples packages/plugins/examples/

RUN pnpm install --frozen-lockfile

FROM base AS build
WORKDIR /app
COPY --from=deps /app /app
COPY . .
RUN pnpm --filter @paperclipai/plugin-sdk build
RUN pnpm --filter @paperclipai/shared build
RUN pnpm --filter @paperclipai/db build
RUN pnpm --filter @paperclipai/adapter-utils build
RUN pnpm --filter @paperclipai/ui build
RUN pnpm --filter @paperclipai/server build

FROM base AS production
WORKDIR /app
COPY --chown=node:node --from=build /app /app
RUN npm install --global --omit=dev @anthropic-ai/claude-code@latest @openai/codex@latest opencode-ai \\
  && mkdir -p /paperclip \\
  && chown node:node /paperclip

ENV NODE_ENV=production \\
  HOME=/paperclip \\
  HOST=0.0.0.0 \\
  PORT=7860 \\
  SERVE_UI=true \\
  PAPERCLIP_HOME=/paperclip \\
  PAPERCLIP_INSTANCE_ID=default \\
  PAPERCLIP_CONFIG=/paperclip/instances/default/config.json \\
  PAPERCLIP_DEPLOYMENT_MODE=authenticated \\
  PAPERCLIP_DEPLOYMENT_EXPOSURE=private

VOLUME ["/paperclip"]
EXPOSE 7860

USER node
CMD ["node", "--import", "./server/node_modules/tsx/dist/loader.mjs", "server/dist/index.js"]
`;

fs.writeFileSync('Dockerfile', dockerfile);